欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

一次SQL注入与WAF绕过思路分享

来源:本站整理 作者:佚名 时间:2019-05-07 TAG: 我要投稿

一、前言
这个注入是之前做测试时发现的,但是测试的时候发现有防护,但是想想这么个小网站都绕不过,实在不应该啊。开始补充学习各种场景、各种waf绕过姿势,勉勉强强的成功执行我构造的SQL的语句。趁着还有些印象,就写下过程当记录吧,本次全程打码,纯技术分享。
二、注入发现
首先,网页打开是这样的,好熟悉的表单页面,常规测试一下,XSSSQL注入XSS我都玩腻了感觉没啥好研究的。随便碰碰运气测下SQL注入

三、挖掘思路
当我在用户名处输入aaa’时,

直接返回错误,典型的IIS错误,目测可能存在注入,返回页面如下:

从上述返回结果,我大概知道了,
1、 网站是aspx
2、 中间件是IIS
3、“字符串 ‘aaa” 后的引号不完整。’aaa” 附近有语法错误。”说明单引号被执行
四、数据库判断
其实aspx+iis基本上都是MSSQL数据库,但是我为了确认一下,还是判断是否为MSSQL,否则数据库搞错了,那岂不是瞎忙了嘛。
用户名处输入 aaa’ and user>0

此处用户名处是字符串,肯定需要闭合引号的,这里我先不闭合直接点击“确定提交”,返回如下:

说明有waf过滤我的输入,此时我的内心:

继续测试,构造为aaa’ and ’1′=’1,但是同样被waf过滤了。


到了这里我还是没法确定为MSSQL数据库,冷静了两分钟之后,经过测试,最后发现数据库常用关键字都被过滤了,但是某些特殊字符未被过滤。

继续构造,aaa’ /*and @@version>0 and ’1 ‘=’1′*/–,这里解释下,/**/是注释符,–是MSSQL、Oracle的注释符,如果能够成功注释,可能为两个之一,特别说明:Mysql也可以– 注释,但是后面还有个空格,即– ,而其它两个后面是没有空格的。

终于成功执行了。“用户名不存在”,当然就是aaa用户名不存在的嘛,毕竟用户名“aaa“是我随便输入的,如果用户名存在,则会提示“所填厂家名称资料有误!”到这一步已经成功执行了我输入的SQL注释符,而“–“注释符目前有两个数据库可以使用,MSSQL与Oracle,基本上确定为这两个数据库之一,继续判断思路:用”;“即可判断,因为MSSQL支持”;“,它是MSSQL的语句分隔符,而Oracle不支持这个语句分隔符。


五、waf绕过
绕过waf没啥好说的,就是不断的测试,构造语句打乱waf的防护,同时又能在后端成功执行即可,每个应用、数据库、中间件等,都对应不同的构造语法,需要结合实际环境来测试,比如HTTP参数污染绕过waf:http://www.test.com/test.asp?id=123&id=456
提交的参数为id=1&id=2&id=3,即/test.asp?id=1&id=2&id=3
Asp.net + iis:id=1,2,3 
Asp + iis:id=1,2,3 
Php + apache/nginx:id=3
这里用asp.net+iis做示例,经过asp.net+iis提取为id=1,2,3,因为三个参数都是id。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载