一题关于二次注入的题
目录结构如下:
confirm.php 提交订单
change.php 修改订单
search.php 查询订单
delete.php 删除订单
在index.php下发现注释<!--?file=?-->
文件包含得到以上文件源码
可以看到。confim.php是进行了插入数据库的操作。但是name和phone进行了过滤。并且插入使用了预处理。不存在sql注入
在change.php。user_name和phone都进行了过滤。唯独address进行了addslashes转义
然后就是根据user_name和phone查询。将查询结果中的address当做值进入下一次查询
update `user` set `address`='".$address."', `old_address`='".$row['address']."' where `user_id`=".$row['user_id'];
这里就是接收转义address的值。然后存入数据库。并且old_address是上一次查询name和phone得到的
这就有个问题。存入的时候是经过addslashes转义。而翻看所有文件。读取的时候并没有进行转义。那么久存在一个二次注入
接下来就只要找利用点。还是change.php。只有这个文件。调用了address
首先注册name。phone。address都为1
然后change.php第一次修改。
change.php第二次修改。
updatexml报错注入。但是好像限制了长度
修改payload
1' and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,30))),1)#
即可
PS:这里flag.txt是猜的。一开始猜/flag结果没回显。