WebGoat代码审计-09-跨站点请求伪造
Drunkbaby Lv6

WebGoat代码审计-09-跨站点请求伪造

WebGoat代码审计-09-跨站点请求伪造

  • WebGoat 这一部分主要分为两块 ———— CSRF 与 SSRF

0x01 前言

  • 摘自木头师傅

常见的请求伪造有两种,第一种跨站请求伪造也就是我们的 CSRF,第二种服务端请求伪造也就是我们的 SSRF。

CSRF 通俗的说就是构造 payload 然后诱导受害者点击,从而利用受害者的身份去做一些事情。

SSRF 服务端请求伪造简单的来说就是,这个请求是服务端发起的,通常有的功能会存在从第三方的链接等获取资源,但是如果没有对资源来源进行一个限定那么就可以导致我们可以利用服务端来请求他本地或者他其中的内网信息。

0x02 CSRF

1. CSRF PageLesson3 CSRF Poc 初体验

题目部分

首先要明确的一点,其实 CSRF 也是钓鱼攻击,而不是像 SQL 注入那么直接与暴力。因此这里我们借用第三方的 WebWolf 作为受害者进行操作。

借用 Burpsuite 的 CSRF Poc,CSRF 的原理我就不阐述了,有兴趣的师傅们可以移步至 从0到1完全掌握CSRF

接着将其发送到 WebWolf 上,点击链接即可,再输入我们的答案。

源码部分

文件位置在 CSRFGetFlag 文件处,未对 CSRF 进行任何请求上的针对。

2. CSRF PageLesson4 CSRF 应用场景

  • 题意:从其他网站以当前用户身份提交一条评论

其实攻击手段都是差不多的,我这里就加速过了

3. CSRF PageLesson7

  • 题意:从其他网站向webgoat服务器发送下图中的JSON消息

把 POC 进行一下解码

1
2
3
4
5
6
      <input type="hidden" name="{
"name" : "WebGoat",
"email" : "webgoat@webgoat.org",
"content" : "WebGoat is the best!!"
}" value="" />

仔细观察发现 这里的name value是键值对

1
name=value

所以像上图的poc的话 html中的结果就是如下

由于value为空 所以便会出现如下这种情况

1
2
{"name":"WebGoat","email":"webgoat@webgoat.org","content":"WebGoat is the best!!" }=

所以我们需要对poc进行改进 ,因为无论如何都有 = 所以我们得把等号包含进去

比如

name {"name": "WebGoat", "email": "webgoat@webgoat.org", "content": "WebGoat is the best!!", "ignoreme":"

Value 'sdfsdfdf"}

这样的话正常结果就是如下

name = value

1
{"name": "WebGoat", "email": "webgoat@webgoat.org", "content": "WebGoat is the best!!", "ignoreme":"=sdfsdfdf"}

最终的 Payload

1
2
3
4
5
6
7
8
9
10
11
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<form action="http://124.222.21.138:9000/WebGoat/csrf/feedback/message" method="POST" enctype="text/plain">
<input type="hidden" name='{"name": "pasa","email":"passsaa@wobwolf.com","subject":"service","message":"' value='aaa"}'>
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>

4. CSRF PageLesson8

就新建一个账号………… CSRF 这块确实难设计。



对 CSRF 这一块我个人还是有点失望的,本来还想看一看 CSRF 这里有什么基础防御手法,以及绕过手段的,结果只是有几个应用场景而已。

0x03 SSRF

1. SSRF PageLesson2

其实有点奇怪,我不知道为什么这个场景会出现在 WebGoat 里面,其实这算是一点前端未设计好的东西,和 SSRF 有啥关系。

  • 靶场界面如图所示

题目要求我们将 Tom 的图片修改成 jerry 的图片,我们这里先点开图片,然后将 images 修改为 jerry.png。一般这种情况,暴露出路径,而且未处理的话,是更有可能造成文件上传的 Getshell 的。

用 Burpsuite 抓包,将 tom 修改成 jerry 即可。

2. SSRF PageLesson3

  • 这里利用 ifconfig.pro 来显示接口。

Payload 一般如下

1
http://ifconfig.pro]

就是单纯的这种 Payload,不要自作聪明将 http 后面加上 IP 与端口。

同样 bp 抓包后,修改 url 为 http://ifconfig.pro 即可。

0x04 小结

因为最近自己也打算开发靶场的,就怎么说呢。。。

其实我觉得 CSRF 设计的还是不错的,就是少了一点绕过手段与防御讲解,CSRF 本来考点,或者说是利用点就不是那么多,不用该只是如此潦草地设计的。

SSRF 的话,其实也能理解吧就,因为 Java 里面能利用的 SSRF 毕竟是很少,但是那几个协议最好还是设计进去的吧 ……

 评论
.valine-container { #vcomments { .vwrap { border 0.1rem solid var(--text-color-4) .vheader { .vinput { color var(--text-color-3) border-color var(--text-color-4) &:focus { border-bottom 0.1rem dashed var(--primary-color) !important } } } .vedit { .veditor { color var(--text-color-3) } .vctrl { .vicon { fill var(--text-color-3) &.actived { fill var(--primary-color) } } } } button.vsubmit { color var(--text-color-3) !important background transparent !important border 0.1rem solid var(--text-color-3) !important &:hover { color var(--primary-color) !important border 0.1rem solid var(--primary-color) !important } } } .vcount { color var(--text-color-3) .vnum { color var(--text-color-2) } } .vcard { .vnick { .author { margin-left 0.15rem padding 0.15rem color #fff font-weight 450 font-size 0.9rem background -webkit-linear-gradient(45deg, #e3565e, #ee854b, #f6c258, #90c68a, #5fb3b3, #6699cc, #c594c5) background linear-gradient(45deg, #e3565e, #ee854b, #f6c258, #90c68a, #5fb3b3, #6699cc, #c594c5) border-radius 0.15rem } } .vhead { .vnick { color var(--primary-color) } .vsys { color var(--text-color-3) background var(--background-color-2) !important } } .vcontent { P { color var(--text-color-3) code { color var(--code-foreground) background var(--code-background) } } } .vh { border-bottom-color var(--border-color) } .vquote { border-left-color var(--border-color) } } .vcopy { color var(--text-color-4) } .vpage { .vmore { color var(--text-color-2) border 0.1rem solid var(--border-color) } } } }