绕过W*S-WAF的MSSQL注入
○ 第一个网站
◇ 确定列数与显示位
◇ 查库名
◇ 查表名
◇ 查列名
◇ information_schema
◇ 查数据
◇ 另一个payload,用%0a代替空格绕过w*s waf
◇ 登录后台
○ 第二个网站
◇ 确认列数
◇ 查表名
◇ 查列名
◇ 查数据
◇ 另一个payload,用%0a代替空格绕过w*s waf
◇ 登录后台
○ 声明
第一个网站
NO.1
前几天参加了一个小hw,遇到了两个SQL注入,记录一下,也是对文章关于mssql注入的知识分享的实战运用。
在 id=38 后面添加 and 1=1 -- ,发现 W*S-WAF 拦截,版本号:Server: w*s/1.6 。
测试发现拦截了空格,空格可通过 + 或 %0a 绕过
确定列数与显示位
输入代码查询列数
可以看到显示位是2和6
查库名
输入代码查看库名
确定数据库是mssql,查询库名和当前用户名:dg2018db和dbo
查询dbo.sysobjects表中用户创建的表,获取其对应的id和name
查询下一个表名
查列名
这里有个坑,查询列名的时候因为已经知道了表名的id值,所以where只需要使用id即可,不再需要xtype了。
查询下一个列名
利用代码查询下一个列名
列名: Ad_Id,Ad_Name,Ad_Password
information_schema
值得一提的是,除了借助sysobjects表和syscolumns表获取表名、列名外,mssql数据库中也兼容information_schema,里面存放了数据表表名和字段名。
查到的表名有以下
'Admin','Anli','AnliType','Article','ArticleType','Banner','Banquan','Fuwu','GdImage
','Intro','Kefu','KeyWords','Lx','Message','Product','Type1'
查询Amin表中的列名有:
'Ad_Id','Ad_Name','Ad_Password'
查数据
密码是明文存储:admin/khkj18
另一个payload,用%0a代替空格绕过w*s waf
这里使用"+"运算符将Ad_name和Ad_password查询的结果(两个字符串)给聚合连接起来,并返回一个名为"a"的列,其中包含所有管理员的用户名和密码,用"-"分隔。
登录后台
第二个网站
NO.2
在 tid=EwMLN3nd') 后面添加 and '1'='1' -- ,发现也是W*S-WAF拦截,版本号:Server: w*s/1.6 。
跟上一个网站一样,空格可通过 + 或 %0a 绕过。
确认列数
利用代码确认列数
查看当前数据库名是tczr2018
查表名
查询dbo.sysobjects表中用户创建的表,获取其对应的id和name
查列名
这里有个坑,查询列名的时候因为已经知道了表名的id值,所以where只需要使用id即可,不再需要xtype了。
查询admin的表
查询下一个列名
字段如下:
'account','createtime','email','grade','Id','modifytime','name','order','password','
phone','remark','state'
查数据
后台账密:admin/tc2019119zr
另一个payload,用%0a代替空格绕过w*s waf
这里使用"+"运算符将account,name和password查询的结果(三个字符串)给聚合连接起来,并返回一个名为"a"的列,其中包含所有管理员的账户用户名和密码,用"~"分隔。
登录后台
声明
NO.3
本文作者:she1by
本文编辑:Yusa
感谢 she1by 师傅 (๑•̀ㅂ•́)و✧
扫描下方二维码关注天虞实验室官方微信公众号发送“MSSQL注入”可以查阅原文中所有的代码哟~
往期回顾
扫码关注我们
天虞实验室为赛宁网安旗下专业技术团队,重点攻关公司业务相关信息安全前沿技术。