攻防世界web bilibili

最后一步存在问题。。没有得到flag

 

打开环境

 

 

 

爆破*站  提示我们一定要买到lv6

有个注册 第一步 首先想到要注册一个用户

直接注册一个admin/admin试试

 

 

 

没有反应

 

 

 

那多半是有admin用户了 ,我们注册一个admin123/admin

成功注册并登录,这里就想到有一个admin用户存在了,应该会用到提权

提示我们要买到lv6

第一页没有 那么点击下一页看看,我发现我的环境点下一页没用 ,查看源码

 

 

 

直接访问下一页

 

 

 

那就是要找到lv6在哪一页了

手动翻页不现实太多了  大概测试了一下有500页

继续分析源代码

 

 

 

这些lv的图片都是 同一种形式的 

使用脚本来找lv6

from urllib import request
url="http://220.249.52.133:59855/shop?page="
for i in range(1,501):
    r = request.urlopen(url+str(i))
    if "lv6.png" in r.read().decode('utf-8'):
        print(i)
        break
    else:
        print("lv6 is not in page "+str(i))

 

 

 

 

 

 

找到lv6 在181 页

 

 

直接购买肯定买不到

尝试有没有1元钱就可以购买的方法

直接抓包

 

 

 

修改价格试试

 

 

 

操作失败

试试修改折扣

 

 

 

302跳转 到 /b1g_m4mber

那我们直接访问/b1g_m4mber

 

 

 只允许admin访问

那么就是提权了

提权嘛 多半和cookie有关

注意到cookie里面有个JWT   

全称叫 JSON Web Token,现代 web 应用中替代 cookie 表示用户身份凭证的载体。形式类似 base64,但使用了 base64 可用字符空间之外的点字符,且无法直接解码。HTTP 报文中一旦发现 JWT,应重点关注。服务端对 JWT 实现不好,容易导致垂直越权,比如,把第二段的 user 字段值从 nana 篡改 admin。但是,JWT 的签名(也就是上面的第三部分),是对信息头和数据两部分结合密钥进行哈希而得,服务端通过签名来确保数据的完整性和有效性,正因如此,由于无法提供密钥,所以,篡改后的 token 到达服务端后,无法通过签名校验,导致越权失败。

 

JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluMTIzIn0.a2_XSubn-rw_b4YmH5jcEpObqMnqsWNKeFidyH3DnH8;

在线解一下

 

 

 

直接出现 username admin123  是我们使用的用户

 

 

攻击 JWT,常用三种手法:未校验签名、禁用哈希、暴破弱密钥。

未校验签名: 某些服务端并未校验 JWT 签名,所以,尝试修改 token 后直接发给服务端,查看结果。于是,将 user 字段值从 admin123 改为 admin 后,重新生成新 token:

 

 

 

由于未填写密钥,即便生成格式正确的新 token,但提示无效签名(invalid signature),直接发给服务端,试试手气:

 

 

 

500错误

继续下一个攻击

禁用哈希。JWT 第一部分含有 alg 字段,该字段指定生成签名采用哪种哈希算法,该站使用的是 HS256,可将该字段篡改为none,某些 JWT 的实现,一旦发现 alg 为 none,将不再生成哈希签名,自然不存在校验签名一说。

https://jwt.io/#debugger将 alg 为 none 视为恶意行为,所以,无法通过在线工具生成 JWT:

 

 

 

 

所以直接使用  python的 pyjwt库

 

 

 

用 none 算法生成的 JWT 只有两部分了,根本连签名都没生成。将新的 token 发给服务端

 

 

 

依旧500错误

 

暴破弱密钥。

在GitHub上面找到一个py脚本    https://github.com/Ch1ngg/JWTPyCrack

 

 

 test.txt 是准备的弱密码脚本

得到密钥 1Kun

 

接下来伪造 JWT  提权成admin

 

 

 将生成的JWT 发送到服务器

 

 

 

成功

查看源代码

 

 

 

 

 

找到了一个www.zip文件

下载下来

 

 

 

是一系列的 py文件 ,

源代码审计吧。。。

我确实不会了。

查wp

是一个 python的反序列化漏洞

分析反序列化漏洞部分代码

 

 

 这里用的是ttornado框架   

找到一个python反序列化的 浅谈 https://www.dazhuanlan.com/2020/02/26/5e55c53a3403f/

import pickle
import urllib
import commands

class payload(object):
    def __reduce__(self):
        return (commands.getoutput,('ls /',))

a = payload()
print urllib.quote(pickle.dumps(a))

 

运行脚本得到

ccommands%0Agetoutput%0Ap0%0A%28S%27ls%20/%27%0Ap1%0Atp2%0ARp3%0A.

 

 

 

提示我们403 

这时我们注意到 之前传值的包里面有一项  _xsrf 

我们找一个正常包的 xsrf来加上去传过去

 

这里不知道是什么问题

一直都是403

按照wp上面传过去也是不行。。。

 

 

这题就最后这里有点问题了

可能是我的环境有点问题了吧

 

卡住了出不来

 

posted @ 2020-07-21 17:37  zhangzhijie98  阅读(1189)  评论(0编辑  收藏  举报