WebGoat代码审计-07-XSS
Drunkbaby Lv6

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,可以看到要找的随机数(下图中最后一个高亮部分),填入上图输入框并提交即可过关。

 评论