0%

XXE和SSRF学习

最近主要学习了XXE和SSRF

引言

XXE介绍:XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

SSRF介绍:SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。

XXE漏洞

XXE漏洞实践操作

Blind XXE实在是懵逼了……实验环境一直搭不好(跪

xxe漏洞主要代码是从这里进行了参考:https://www.cnblogs.com/vincebye/p/7199290.html(进行了些去除注释之类的工作)

1
2
3
4
5
6
7
8
<?php
libxml_disable_entity_loader (false);#不过这里还是要注释一下,libxml2.9.0+会默认不解析外部实体,一开始我没用这里的代码结果没有这条折腾了好长时间
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$answer = simplexml_import_dom($dom);
echo $answer;
?>

payload和结果用下图(顺便不知道怎么的一开始burpsuit不能正确截断数据包导致一直没法传参折腾了好久才弄好)

结果:(读取txt文件)

QQ截图20200223174215.jpg

读取php文件则需要通过base64进行读取,直接读取php文件会报错。

QQ截图20200223174052.jpg

Blind XXE以后可能搭好了环境再试试或者找个在线平台试一下

XXE漏洞逐渐消亡的原因

正如上节代码中备注一样:

XXE漏洞必须要libxml2.8.0以前会默认解析外部实体,但是2.9.0后不再解析,故该漏洞逐渐消亡。

如果有的话,可以通过禁用外部实体的方法避免XXE漏洞。比如php中可以这样设置:

1
libxml_disable_entity_loader(true);

Java和Python也可以(此处不介绍)。

如果要使用外部实体,则要过滤用户提交的XML数据,过滤掉XML的关键词。

SSRF漏洞实践操作

SSRF我本人也是一知半解,感觉好像是会了感觉又有些问题,所以暂时先不在博客发布了。文章在本地存放等着我觉得完全懂了再发布吧。