[CISCN2019 华北赛区 Day1 Web5]CyberPunk(二次注入)
打开源码,发现关键信息
我们可以使用filter伪协议读取index.php的内容
1 | ?file=php://filter/convert.base64-encode/resource=index.php |
得到base64编码
我们进行解码,得到index.php的代码
index.php
1 | <?php |
同理可得search.php,delete.php,change.php
search.php
1 | <?php |
delete.php
1 | <?php |
change.php
1 | <?php |
这几个文件源码都使用了关键词过滤,基本没有注入方法。然后
change.php中,只对phone
和user_name
进行了过滤,而对address
只是使用addslashes()
函数,可以使用报错注入。
addslashes用法
1 | addslashes(string $string): string |
返回需要在转义字符之前添加反斜线的字符串。这些字符是:
- 单引号(
'
) - 双引号(
"
) - 反斜线(
\
) - NUL(NUL 字节)
注意change.php的sql语句
1 | $sql = "update `user` set `address`='".$address."', `old_address`='".$row['address']."' where `user_id`=".$row['user_id']; |
首先我们提交订单,将地址改为注入语句
我们再修改收货地址
点击修改订单,得到部分flag,剩下的修改注入语句中的截取范围就能得到
1 | flag{9dc62f0c-6733-487f-99cf-ee2e42c5ce6b} |