JAVA代码审计09:WEBGOAT Request Forgeries 请求伪造

0x00 前言

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

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

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

0x01 CSRF

简单来说就是弄一个csrf的poc 获取我们的flag

image-20201115123744292

我这里直接使用的是burp的功能

image-20201115123933789

但是发现生成过程中是有问题的,当我们点击payload中的submit之后

发现burp传输过程中的 数据最后面会有一个莫名其妙的等号

image-20201115124007971

我们来查看一下我们的poc

image-20201115124550527

我们进行一下解码

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

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

name=value

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

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

{"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

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

image-20201115145637651

0x02 SSRF

SSRF1

题目要求我们去找到jerry的图片

image-20201115153232043

发现请求了images下的tom图片,我们修改为jerry就可以了

image-20201115153158455

看了看后端代码发现就是一个简单的判断语句,没啥好说的233

image-20201115153316745

SSRF2

第二题让我们请求他给出的网址,也是很简单直接换成url即可

image-20201115153514711

如下图

image-20201115153601649

0x03 总结以及修复建议

CSRF的修复方法很简单,因为csrf的本质就是攻击者知道对应的url导致可以进行伪造,那么我们只要添加随机化的token让攻击者无法伪造就可以了,当然也可以通过校验Referer来进行判断

SSRF的修复方法就是对请求的资源进行严格的过滤,如果发现请求到本地或者内网的资源返回不合法等信息即可

做一个总结,这个章节相比之前后端代码不那么贴近真实环境,算是为了做靶场而写的所以代码审计也做不了什么,只能说是提供提供思路这种,所以这篇文章只是简单的介绍了题解但是没有着重介绍后端代码的原因

点赞

发表评论

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