WebGoat代码审计-07-XSS
WebGoat代码审计-07 XSS
0x01 前言
最近刷 Port 上的 Web Cache 投毒好累,醉了,真的费精力。
WebGoat 这里的题目偏向代码审计,一些简单的题目就不在这里呈现了,有需要可以传送到 仙女象师傅的文章。
0x02 XSS 开搞
1. XSS PageLesson7 反射型 XSS
- 题意让我们查找出一个易受到攻击的 XSS 字段,要对这些框进行逐个测试。
题目部分
靶场界面如图所示
简单使用反射型 XSS 的 Payload
1 | <script>alert(1)</script> |
- 最终发现在 Credit card number 界面存在反射型 XSS
源码部分
- 是比较容易理解的
44 - 46 行,定义了关于过滤 XSS 语句的正则,这个正则后续会用到;
52 - 55 行,定义参数;定义的这些参数在 61 行进行了计算,并且后续无拼接操作,所以上面四个框内是不存在 XSS 的。
63 - 68 行,定义一个新的 StringBuffer 类,这里我们看到明显两个参数是可控的,但是 WebGoat 的写法让我们只能对 Field1 进行注入。
审计完毕 ~
2. XSS PageLesson10 DOM 型 XSS 利用测试的代码进行 XSS 攻击
DOM 型 XSS 全部都是由前端进行触发的。有时测试代码会留在生产环境当中,如果测试环境的代码能够被我们搞到,那弄 DOM 型 XSS 可谓手到擒来。
题目部分
题意:在生产期间保留在应用程序中的测试代码的路由是什么
这是一种真正意义上的通过代码审计进行攻击的方式,需要我们一层一层去翻,去找 JS
由于 DOM XSS 全部都是由前端进行触发的,所以我们关注的代码都在前端,直接点开 f12 对 JS 进行全局搜索,搜索内容为 route
,得到的结果不多,都审计一下。
- 重点关注 GoatRouter.js
这里我们找到了 testRoute 这一 function
进一步探,param 参数被传入了 lessonController 的 testHandler 方法,我们进一步去找 testHandler 方法。遵循 MVC 三层,很好找的。
OK 找到 testHandler,继续探,去找 lessonContentView.js 中的 showTestParam 方法。
成功找到 lessonContentView.js 中的 showTestParam 方法。
showTestParam 方法这里未处理,直接可以构造 XSS,但是这种构造是需要条件的,不是傻乎乎直接在对应的框内输入 XSS 的 Payload 就可以的。存在 XSS 的地方其实是测试环境,而给我们看的都是生产环境。
哦差点把正事儿给忘了,先把 WebGoat 题目的答案写出来 ———— start.mvc#test
我们再回过头来讲这道题里面 XSS 的利用。
我们尝试访问 /start.mvc#test
接口,可以访问到,但是界面没什么变化,我们直接构造 XSS 的基础 Payload,记得要 URL 编码一下。
1 | <script>alert(1)</script> |
一整个 URL 应该是
1 | http://ip/WebGoat/start.mvc#test/%3Cscript%3Ealert%281%29%3C%2fscript%3E |
代码审计
这一块不是后端要去审计的部分,而是属于前端的 JS 的问题了。”象征性” 地挂一下代码 ~
2. XSS PageLesson11 DOM 型 XSS
- DOM 型 XSS 的应用,同样也是和上一题一样的思路,一个个去挖。
在 GoatRoute.js 中找到这个方法,这里不太懂,我看 WP 是直接这样子解决的。
1 | <script>webgoat.custom.phoneHome()</script> |
我这里属实没看懂是为什么,如果题意没告诉我可以直接利用这个方法,那我不就几乎找不到了吗?
还是挂一下 Payload 吧
1 | http://ip/WebGoat/start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome%28%29%3C%2Fscript%3E |
访问之后页面上没有显示什么,打开开发者工具,进入 Console,可以看到要找的随机数(下图中最后一个高亮部分),填入上图输入框并提交即可过关。
- 本文标题:WebGoat代码审计-07-XSS
- 创建时间:2022-05-05 21:02:11
- 本文链接:2022/05/05/WebGoat代码审计-07-XSS/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!