变量覆盖漏洞
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值
推荐阅读代码审计|变量覆盖漏洞
1.exartact函数
exartact()函数的作用是从传入数组中将变量导入当前符号表中,键名是变量名,键值是变量值。
注:符号表是记录符号属性的表,它的每一表项表示一个标识符的属性信息.这些属性信息通常包括种类(常数,变量,数组,标号等),类型(整型,实型,逻辑型,字符型等),给名字分配的存储单元地址等。
该函数有三个参数var_array(必须,规定输入)、extract_type(可选,检查每个键名是否为合法变量)、prefix
该函数出现变量覆盖漏洞通常有两种情况:
(1)二参为EXTR_OVERWRITE,它表示有冲突时覆盖已有变量
(2)只有一参,默认二参为EXTR_OVERWRITE
这道变量覆盖的ctf题中,extract函数是获取post传参后的以数组形式传入符号表,我们post传入pass=0&thepassword_123=0,将thepassword_123变量值赋值为0
2.parse_str函数
该函数作用是解析字符串并且注册成变量,在注册变量之前不会验证变量是否已经存在,直接覆盖
语法:
parse_str(string,array)
1 | <?php |
输出的b的值变为了2
例:某ctf
1 | $id = $_GET['id']; |
3.import_request_variables函数
该函数是把GET,POST,COOKIE的参数注册为变量,用在register_globals被禁止的时候
1 | bool import_request_variables ( string $types [, string $prefix ] ) |
$type代表要注册的变量,G代表GET,P代表POST,C代表COOKIE,第二个参数为要注册变量的前缀
1 | <?php |
4.$$变量覆盖
$$常常用在foreach函数中
例:
1 | <?php |
foreach函数将get参数存入数组,我们构造payload:index.php?name=meizijiu233,name作为变量存入,$$key=$name=meizijiu233;判断通过