攻防世界web bilibili
2021-01-18 02:15
标签:完整性 环境 atp 折扣 访问 替代 lazy 完整 rom 最后一步存在问题。。没有得到flag 打开环境 爆破*站 提示我们一定要买到lv6 有个注册 第一步 首先想到要注册一个用户 直接注册一个admin/admin试试 没有反应 那多半是有admin用户了 ,我们注册一个admin123/admin 成功注册并登录,这里就想到有一个admin用户存在了,应该会用到提权 提示我们要买到lv6 第一页没有 那么点击下一页看看,我发现我的环境点下一页没用 ,查看源码 直接访问下一页 那就是要找到lv6在哪一页了 手动翻页不现实太多了 大概测试了一下有500页 继续分析源代码 这些lv的图片都是 同一种形式的 使用脚本来找lv6 找到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 运行脚本得到 ccommands%0Agetoutput%0Ap0%0A%28S%27ls%20/%27%0Ap1%0Atp2%0ARp3%0A. 提示我们403 这时我们注意到 之前传值的包里面有一项 _xsrf 我们找一个正常包的 xsrf来加上去传过去 这里不知道是什么问题 一直都是403 按照wp上面传过去也是不行。。。 这题就最后这里有点问题了 可能是我的环境有点问题了吧 卡住了出不来 攻防世界web bilibili 标签:完整性 环境 atp 折扣 访问 替代 lazy 完整 rom 原文地址:https://www.cnblogs.com/zhangzhijie98/p/13356388.html
r = request.urlopen(url+str(i))
if "lv6.png" in r.read().decode(‘utf-8‘):
print(i)
break
print("lv6 is not in page "+str(i))
import urllib
import commands
class payload(object):
def __reduce__(self):
return (commands.getoutput,(‘ls /‘,))
a = payload()
print urllib.quote(pickle.dumps(a))