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*’。

ctfshow-184 sql注入_第1张图片

返回结果:$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,后面就都可以理解。

你可能感兴趣的:(wzm的ctfshow的wp,sql,数据库,database)