session伪造+pickle反序列化

发布时间 2023-10-29 15:28:36作者: Eddie_Murphy

来自

[CISCN2019 华北赛区 Day1 Web2]ikun

小黑子真没有树脂!!!

进去就是坤哥的舞蹈视频,意思就是让我们找到LV6的号然后买了,翻了好几页没找到:

url上有个page参数,直接写个python脚本帮我找:

import requests
import re

# 页面URL和GET参数
base_url = "http://ec000824-34eb-4762-8af6-00f57098348c.node4.buuoj.cn:81/shop"
num = 1
for _ in range(600):
    params = {"page": num}# 将此处替换为您想要请求的具体页面页码

    # 发送请求并获取页面内容
    response = requests.get(base_url, params=params)
    html = response.text

    # 使用正则表达式匹配<img>标签
    pattern = r'<img class="lv" src="/static/img/lv/lv6.png" alt=""/>'
    match = re.search(pattern, html)

    # 检查是否找到匹配项
    if match:
        print(num)
        break
    else:
        num+=1
        continue

直接访问181页,找到lv6账号:

显然我们是买不起的。

随便注册个号,这个时候就要考虑怎样修改账户值了,如果是前端就好办,js一改就有了。

接下来我们f12里面找那里有这个剩余金额数的,能不能改了。

只改html显然没用,应该去源码里改。

但是修改源金额好像不行,那换个思路,去购买页面看看,还真有个action可以利用:

这里直接改discount,不就买上了吗。

也可以直接上抓包改discount:

但抓包的时候看到个jwt,估计还有session伪造。

需要提权。

jwt作用不就来了,直接丢jwt-hack里面梭:

但显然是需要密钥的,不然改不了。

爆密钥也有个工具:

brendan-rius/c-jwt-cracker: JWT brute force cracker written in C (github.com)

密钥是1Kun,工具不好使直接去官网JSON Web 令牌 - jwt.io

 

改完抓包放包:

但是这个一键成为大会员点不动。

查看源码,发现www.zip:

又到了web题的常客源码审计,找到关键源码Admin.py,一眼pickle反序列化:

意思大概就是可以post传参become,然后将接受到的字符串进行反序列化为对象,那我们直接构造payload给它dumps出来。

pickle反序列化初探 - 先知社区 (aliyun.com)

CTF-python pickle反序列化 - sijidou - 博客园 (cnblogs.com)

表单里也有become传参,但是被hidden了,后面f12删了hidden或者抓包传就行。

exp:

 

(注意是python2,本机没装py2怕跟py3混了,虚拟机装的py2,但win7的cmd着实让人难受,复制粘贴还要开快速编辑模式,选定复制按回车....)