XML外部实体注入(XML External Entity)简称XXE漏洞,XML用于标记电子文档使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档包括XML声明、DTD文档类型定义、文档元素。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
文档类型定义(菜鸟教程):https://www.runoob.com/dtd/dtd-tutorial.html
目标地址:https://www.bihuoedu.com/vul/xxe/xxe_1.php
]>
&b;
懵......
WAF(Web Application Firewall,Web应用防火墙),基本上可以分为几类:
主要介绍判断网站是否存在WAF的几种方法。
1. SQLMap
SQLMap自带的WAF识别模块可以识别出WAF的种类,但是如果所安装的WAF并没有什么特征,SQLMap只能识别出类型是Generic。格式如下:
sqlmap -u "http://bihuoedu.com" --identify-waf --batch
2. 手工判断
直接在相应网站的URL后面加上最基础的测试语句,比如Union select 1,2,3%23,并放在一个不存在的参数名中。
?id=1 union select 1,2,3#
被拦截的表现为(增加了无影响的测试语句后):页面无法访问、响应码不同、返回与正常请求网页时不同的结果等。
1.大小写混合(现在几乎没有这样的情况)
uNioN SeLecT 1,2,3,4,5
2.URL编码
3.替换关键字
WAF采用替换或者删除select/union这类敏感关键词的时,如果只匹配一次则很容易进行绕过
union select 1,2,3,4,5 替换为
union union selectselect 1,2,3,4,5
4.使用注释
注释在截断SQL语句时用的比较多,在绕过WAF时主要使用其替代空格(/*任意内容*/),适用于检测过程中没有识别注释或替换掉了注释的WAF。
union/*2333*/select/*aaa*/1,2,3,4,5
5.多参数请求划分
对于多个参数拼接到同一条SQL语句中的情况,可以将注入语句分割插入。
例如,在GET参数里,为a=[input1]&b=[input2],合并后,
a=union/* &b= */select 1,2,3,4
6.HTTP参数污染
指同一参数出现多次,不同的中间件会解析为不同的结果。
以IIS为例,普通SQL注入语句:Inject = union select 1,2,3,4
转换为以下格式:Inject=union/*&Inject=*/select/*&Inject=*/1&Inject=2&Inject=3&Inject=4
最终在IIS中读入的参数值为:
Inject=union/*,*/select/*,*/1,2,3,4
7.生僻函数
使用生僻函数替代常见的函数,例如在报错注入中使用poligon()函数替换常用的updatexml()函数,如下:
SELECT polygon((select*from(select*from(select@@version)f)x));
8.寻找网站源站IP
对于具有云WAF防护的网站而言,只要找到网站的IP地址,然后通过IP访问网站,就可以绕过云WAF的检测。常见方法:
9.注入参数到cookies中
某些程序员在代码中使用$_REQUEST获取参数,$_REQUEST会依次从GET/POST?cookie中获取参数,若WAF只检测了GET/POST而没有检测cookie,可将注入语句放入cookie中进行绕过。