1.漏洞点
漏洞点在根目录下的index.php中的61行
target传参可任意控制,控制index.php包含任意文件
上面的if条件需要满足target传参不为空且为字符串且不以index开头且不在黑名单中
黑名单:
查看最后一个条件,需要返回true
第一个红框定义白名单
第二个红框检查文件名是否在白名单中,在则返回true
第三个红框将原传入字符串从0到?前分割出来,再检查字符串是否在白名单中,在则返回true
可以考虑设置字符串内容?之前的字符串为白名单,绕过过滤,可是?不能出现在文件名中
最后则是利用点
先是进行url解码,再进行分割,这就有了可乘之机
由于url解码最后这里解了两次码,原本协议解一次,这里的代码再解一次
如果将?二次url编码,既可以绕过过滤,url编码还能出现在文件名中,这就产生了漏洞
2.漏洞利用
如何往服务器中写入恶意文件呢?
可以在后台新建一个表,相应的表名以及数据就会存放在frm与MYD文件中
查看路径
构建payload:
db_datadict.php%253f/../../../../../../../../../../../phpstudy_pro/Extensions/MySQL5.7.26/data/dou/test.frm
成功