ctfshow-184 sql注入

1:问题

2:分析

这题过滤了where,‘ ,",*,等符号,目的是使用左右连接查询进行注入。

已知条件:flag格式:ctfshow{ 这个字符开头。

好多wp和官方视频没有解释为什么要使用$user_count=43,来做判断条件,基本不好的小白就很难受了。

3:步骤

(1)我在前台写了一个注入,比较好理解:

payload: tableName= ctfshow_user as a left join ctfshow_user as b on a.pass regexp(CONCAT(char(99),char(116),char(42)) )  
CONCAT:字符串连接 ,char(99),char(116),char(42)=‘ct*’。

返回结果:$user_count=43. 这里根据返回结果43,就可以判断我们的payload是执行正确的,精确操作了数据表中带flag值的行:具体可以分析一下我们的payload。

ctfshow_user as a left join ctfshow_user as b on a.pass regexp(‘ct*’)  

这里使用regexp('ct*'),已经筛选出来我们的flag了,通过$user_count=43可以确定我们的代码是正确的,为什么=43,可以参考我的left join 笔记:一文搞懂sql左右连接/(2)分析43:

step1:左连接,保留左表中的数据,22条。

step2:on a.pass regexp(‘ct*’)  ,22条数据肯定有一条是满足该条件的,并且a是左表,所以筛选出来的这条数据对应的b表数据(22条)都满足条件。,剩下的a中21条不满足on,所以对应的b的22条也不满足。

step3: a中满足条件的一条数据与b表所有数据做全连接,22条。a表还剩21条,对于的b表不满足,全部为null,21+22=43。

(3)现在就是需要一个脚本,来盲注,猜测我们的flag值是多少。这个脚本就可以用网上的脚本了,只要理解了前面最基本的Payload,后面就都可以理解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值