XXE篇
XXE就是基于XML文件的漏洞,这个漏洞又叫XML外部实体注入或者XXE注入都是一码事,XML文件呢主要用于存储数据,传输数据所用。但随着JSON的出现,XML的份额应该是在逐渐减少。
可以用谷歌语法找到网上的XML文件: site:edu.cn filetype:xml
XML文件格式大致如下:
比起json来说,XML文件用来传输数据开销大了很多,这就是XML文件较之json不足的地方
XXE攻击一般用来做文件的读取
XXE攻击怎么引起的呢,类似于JSON注入攻击一样,后端在解析的时候执行了XML文件里的恶意代码,就会引起XML注入了,比如:
下面这个这是前端提交过来的用户的登录数据已经响应数据包,以XML文件格式提交的
这是修改过后的数据,这非法操作读取了D盘下的1.txt文件里的内容为“hello world”
这就是简单的且有回显的XML注入攻击
XML外部实体引用:
test.dtd里的内容为:
<!ENTITY send SYSTEM "file:///d:/1.txt">
这里的send和数据包里那个username标签里的&send;名字要对应上。
这里的意思就类似远程包含一个文件一样的,让对方服务器去请求了一个外部资源叫test.dtd的文件,而这个dtd文件里存放了恶意代码,读取了d盘下的1.txt文件里的内容(这也是一个有回显的例子)
还有无回显的情况:
无回显的目标就可以使用带外查询之类的方法去判断目标是否存在XXE漏洞,方法比如
- DNSlog平台:
`
`如果在dnslog平台上发现了访问记录说明命令被执行成功
- 也可以不用网上的dns平台,在自己的云服务器上用
“python -m http.server [端口号默认8000,如需修改在这写就行]”
。比如换成8888端口"python -m http.server 8888"
这个命令可以快速启动监听一个端口,并把当前目录给共享出去,如果有请求访问,会在服务器上显示来访记录。也可以判定命令执行成功与否。 - 如果能用命令在网站下创建一个原本不存在的文件,然后去访问,如果存在了说明命令也执行成功了,总之就是说无回显问题,我们要想办法创建一个"特征"出来,只要"特征"出现即表示命令执行成功。
漏洞挖掘
黑盒测试中发现XXE漏洞:
- 抓包观察正常提交数据的格式,原本的正常数据传输中就是用的XML文件格式来传输如上面那张图片,那我们自然也能用XML的攻击语句来测试是否存在漏洞
- 因为POST提交的数据有时候可能加密了,或者编码过了,看不懂,那就可以看Content-Type里的值,可以看到这个例子里Content-Type里的值是application/xml;那我们就可以判定是可以用XML的格式来提交数据的
- 不管获取的Content-Type类型是不是application/xml或是其它的类型,都可以尝试修改成这个application/xml进行XML注入测试
- XXE不仅在数据传输上可能存在漏洞,同样在文件上传,引用插件解析或预览也会造成文件中的XXE Payload被执行
白盒测试中发现XXE漏洞:
去搜索特定的函数。比如说是PHP的网站,那就去网上搜索PHP中关于XML文件解析函数之类的。在IDE中打开源码直接搜特定函数然后转到声明或用例追踪相关参数,去分析有无漏洞
比如:simplexml_load_string()
这个函数造成的漏洞一般不能拿来命令执行,只能拿来文件读取;有命令执行的XXE漏洞,一般是第三方功能模块导致的
XXE漏洞很难从黑盒中发现,因为这个XML文件吧难以知道在哪会发生意思就是它没有什么明显的特征,比如文件上传的漏洞就去有文件上传功能的地方去寻找比如上传头像之类的地方,Sql注入也是去网站上找有其特征功能的地方。这些都是有特征的,而XXE难有什么特征,所以难以在黑盒中去发现。
相关文章