JAVA代码审计08:WebGoat XSS

0x00 前言

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

0x01 正文

Reflected XSS

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

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

image-20201114094120072

image-20201114094232215

image-20201114094308060

接下来我们来看一下源码

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

image-20201114094927675

Dom XSS

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

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

image-20201114103635073

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

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

我们全局搜索route

image-20201114104655785

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

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

image-20201114104921461

继续跟进这个函数

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

image-20201114105046462

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

image-20201114105248427

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

image-20201114105334680

所以url如下

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

Basic url 为 /start.mvc#test/

后面的111是参数

image-20201114105743958

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

所以如下命令可触发

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

image-20201114105953679

Try It! DOM-Based XSS

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

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

image-20201114152351294

所以我们只需要

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编码即可

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

image-20201114152519028

然后提交即可

0x02 修复建议

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

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像