CTF Web安全

[CISCN2019 华北赛区 Day1 Web5]CyberPunk

Posted on 2020-02-10,2 min read

一题关于二次注入的题


目录结构如下:

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结果没回显。

下一篇: 无需爆破还原mt_rand()种子→