这次借助合天网安实验室的一道ctf题来详细演示变量覆盖漏洞
Web安全领域探索之变量覆盖漏洞实战
于 2023-01-18 13:30:00 首次发布
这次借助合天网安实验室的一道ctf题来详细演示变量覆盖漏洞
extract()
函数,这个函数简而言之就是将数组的键值对转换成变量名和变量值。比如数组是'a'=>'111'
,经过这个函数转换之后就会变成$a='111'
,这里传进来的是get方式传的参数,比如?flag=1
那就会转换成$flag='1'
,如果之前有$flag
这个变量名,如果没有加其他参数,那就会覆盖掉之前变量的值$gift
的判断,如果这个变量存在值,那就对变量$flag
这个变量值作为文件名用函数file_get_contents()
进行取值,取出里面的文本内容,再用函数trim()
对首尾的空白符或其他预定义字符进行去除,前面加@
表示如果这个函数出错那也不会显示任何提示,最后赋值给变量$content
$content
变量值和$gift
变量值是否相等,相等则输出flag,很显然,这里没有定义过变量$gitf
,所以我们要通过get方式进行传参,然后程序会通过extract()
函数将其转换成变量名和变量值,变量$content
是名为变量$flag
的变量值xxxx
的文件里的内容去除前后空白符之后的字符串,但是我们并不知道该文件内容是什么,所以我们这里需要借助函数file_get_contents()
如果里面的参数是空字符串,那么返回的值也是空字符串,即最后变量$content
值为空字符串,那么我们只要传参gift也为空字符串就能使它们相等了,所以最终构造payload ?gift=&flag=