变量覆盖
攻击者使用自定义的参数去替换应用程序未经过初始化的变量值。
挖掘思路:
文件上传页面覆盖白名单列表 用户注册页面覆盖未初始化的变量导致SQL注入
相关函数:
extract、import_request_variables、parse_str、$$
1、extract函数
extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] ) : int// array一个关联数组。此函数会将键名当作变量名,值作为变量的值。 对每个键/值对都会在当前的符号表中建立变量,并受到 flags 和 prefix 参数的影响。 EXTR_OVERWRITE,如果有冲突,覆盖已有的变量。prefix附加前缀。第二个参数有三种情况会产生变量覆盖://1、 EXTR_OVERWRITE 如果有冲突,覆盖已有的变量。//2、 EXTR_PREFIX_SAME 如果有冲突,在变量名前加上前缀 prefix。 //3、 EXTR_IF_EXISTS 仅在当前符号表中已有同名变量时,覆盖它们的值。
EXTR_OVERWRITE:
EXTR_PREFIX_SAME:
EXTR_IF_EXISTS:
2、import_request_variables函数(PHP<5.4)
3、parse_str函数
4、$$
变量a可被传入的参数覆盖。
漏洞防范:
1、php.ini中register_globals = OFF 2、使用原始变量数组,入POST、_POST、POST、_GET等 3、不使用foreach变量$_GET变量 4、判断变量是否注册