22

JAVA代码审计08:WebGoat XSS

 3 years ago
source link: https://www.wjlshare.xyz/2020/11/14/java代码审计08webgoat-xss/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00 前言

其实在这之前还有一章Broken Access Control 但是简单的做了做之后发现那个章节就是为了给我们提供一些思路,代码方面没什么可以说的就跳过了

0x01 正文

Reflected XSS

xss相对熟悉一些,我们只需要找到输出的点然后尝试我们的xss脚本就可以了

我们先updatecert一下,发现红框中的数据直接输出了所以我们直接进行xss即可

nuQNRfa.png!mobile

U3QjYbz.png!mobile

viamymU.png!mobile

接下来我们来看一下源码

查看后端代码可以发现,后端没有进行任何过滤直接进行了拼接输出

6VJrEfB.png!mobile

Dom XSS

一直以来dom xss没怎么关注(主要是不知道怎么关注

正好webgoat有这个例子,根据题意让我们找到测试页面的基础路由地址

bam6zya.png!mobile

由于dom xss全部都是由前端进行触发的所以我们关注的代码都在前端

我这里使用的是火狐因为火狐有全局搜索功能 爱了爱了

我们全局搜索route

FNZ3iqU.png!mobile

发现存在testtoute,点进去进行追踪

发现对应的是 testRoute函数,param参数传入到了testRoute函数中

fIrIZnF.png!mobile

继续跟进这个函数

发现调用了testHanlder,同样的继续进行一个跟进

nENfqu7.png!mobile

发现又调用了showTestParam函数,继续跟进

i6biuiE.png!mobile

最后发现了在该函数下直接进行了一个参数拼接

RFZ3iaR.png!mobile

所以url如下

http://localhost:8081/WebGoat/start.mvc#test/1111

Basic url 为 /start.mvc#test/

后面的111是参数

I3IRrmN.png!mobile

所以只要把111替换成我们的xss即可,过程中我们将我们的payload url编码即可

所以如下命令可触发

http://localhost:8081/WebGoat/start.mvc#test/%3Cdetails%20open%20ontoggle=confirm(0)%3E

zMFjUn.png!mobile

Try It! DOM-Based XSS

这一题其实在上面就已经做过了

题目的意思是让我们利用dom xss 来触发 webgoat.customjs.phoneHome()

nM7JVvQ.png!mobile

所以我们只需要

http://localhost:8081/WebGoat/start.mvc#test/%3c%73%63%72%69%70%74%3e%77%65%62%67%6f%61%74%2e%63%75%73%74%6f%6d%6a%73%2e%70%68%6f%6e%65%48%6f%6d%65%28%29%3c%2f%73%63%72%69%70%74%3e

直接在外面加个script标签 然后url编码即可

就能获取到我们的电话号码

2yY3qaQ.png!mobile

然后提交即可

0x02 修复建议

xss 防御起来也比较简单,我们只需要将尖括号等进行一个转义就可以了,然后前端dom xss的话避免参数直接拼接,还是要做好过滤


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK