目录
红队:前期资产较多,一般使用漏扫工具,后期才会针对性进行手工注入
蓝队:看请求头和响应包,返回字段长度,相应数字
理解WAF的拦截原理
WAF主要通过匹配规则库中的敏感字符进行拦截。因此,绕过WAF的关键在于让输入的数据不被WAF识别为恶意字符。
1.WAF绕过
等于号 substr,mid等 逗号q and / or
原字符 | 替代字符 |
a'a'a'a'e'a | aaaaaea |
<> | like 'x%' rlike '/n' |
in | bentween 't' and 't' |
,(逗号) | %EF%BC%8C |
2. 绕过WAF的策略
2.1 修改请求头
- 攻击者:可以通过修改HTTP请求的头部信息,如User-Agent、Referer、Cookie等字段,以模拟正常浏览器行为,隐藏恶意SQL注入代码。
2.2 使用编码技术
- URL编码:如
SELECT * FROM users WHERE username = '%61%64%6D%69%6E'
,其中%61%64%6D%69%6E
是“admin”的URL编码形式。 - Base64编码:利用Base64编码技术对SQL注入代码进行编码处理,以逃避WAF的检测。
2.3 分段注入
- 攻击者:可以将恶意SQL语句分成多段,并通过不同的请求发送给服务器,使WAF无法完整地识别恶意代码。
2.4 使用特殊字符
- Unicode编码:使用Unicode编码或其他特殊字符来混淆WAF的识别逻辑。
- 注释符:使用SQL注释符号(如
--
、/**/
、#
)来隐藏恶意SQL代码。
2.5 逻辑漏洞绕过
- 利用应用程序或数据库的逻辑漏洞:如使用盲注技术成功绕过WAF的检测。
2.6 大小写和同义词替换
- 关键字大小写:如将“SELECT”替换为“SeLeCt”。
- 同义词替换:如将“AND”替换为“&&”,将“=”替换为“<、>”等。
2.7 模糊测试
- 反复尝试:使用模糊测试技术,反复尝试各种恶意SQL注入的方式,以找到可以成功绕过WAF的方法。
3. 防御策略
- 更新WAF规则库:及时更新WAF的规则数据库,以覆盖新的攻击手法。
- 加强输入验证:对用户输入进行严格的过滤和验证,减少SQL注入漏洞的发生。
- 使用参数化查询:避免直接将用户输入拼接到SQL语句中,使用参数化查询来确保输入的安全性。
- 监控和日志记录:监控可疑的数据库活动,并记录详细的日志,以便及时发现和响应潜在的SQL注入攻击。
sqlmap的使用(get和post使用方法不一样)
扫描用法
1、-u指定目标url
2、-m url_list.txt #使用一个包含多个ul的文件进行扫描。
3、-r request.txt #Post提交方式,使用HTTP请求文件,该文件可从BurpSuit中导
出。(BurpSuit抓包->将请求复制到txt中即可)
4、-p "username,id" #指定要扫描的参数
5、--proxy="http://127.0.0.1:8080/" #使用代理去扫描目标
6、--force-ssl #使用HTTPS连接进行扫描
7、--delay="3" #每次http请求之间的延迟时间,默认无延迟
8、--timeout="10" #请求超时时间,浮点数,默认为30秒
9、--level 2/3/5
2:检测cookie中是否含有注入
3:检测user-agent、referer是否含有注入
5:检测host是否含有注入
10、--risk默认1,最高4,等级高容易造成数据被篡改风险
11、--threads:=7 #提高并发线程,默认为1,建议不要超过10,否则影响站点可用性
12、--dbms="Mysql" #指定数据库类型,还可以加上版本Mysql
13、--os="Windows'"#指定操作系统,还可以是Linux
查询语法
1.--users #查询所有的数据库账号
2.--dbs #查询所有数据库
3.--schema #查询源数据库(包含定义数据的数据)
4.-a #查询当前user、当前数据库、主机名、当前user是否是最大权限管理员、数据库账号等
5.-D dvwa #指定数据库
6.--current-user #查询当前数据库用户
7.--current -db #查询当前数据库
8.--hostname #查看服务器的主机名
9.--columns #查看所有的字段
10.--tables #查看所有的表