【MoeCTF 2021】地狱通讯

题目

from flask import Flask, render_template, request
from flag import flag, FLAG
import datetime

app = Flask(__name__)


@app.route("/", methods=['GET', 'POST'])
def index():
    f = open("app.py", "r")
    ctx = f.read()
    f.close()
    f1ag = request.args.get('f1ag') or ""
    exp = request.args.get('exp') or ""
    flAg = FLAG(f1ag)
    message = "Your flag is {0}" + exp
    if exp == "":
        return ctx
    else:
        return message.format(flAg)


if __name__ == "__main__":
    app.run()

思路

关键代码分析:

  1. flAg = FLAG(f1ag):用户提供的f1ag参数被传入FLAG函数处理,假设当参数不正确时返回一个对象实例。

  2. message = "Your flag is {0}" + exp:将用户输入的exp拼接到字符串中,形成新的格式化字符串。

  3. return message.format(flAg):使用flAg作为参数进行格式化,若exp包含格式化占位符,可触发二次格式化,访问对象属性。

MoeCTF2024 是一场面向网络安全爱好者的 CTF(Capture The Flag)竞赛活动,通常包括多种类型的题目,例如 Web、Reverse、Pwn、Crypto、Misc 等。比赛详情、赛题设置、时间安排以及参与方式如下: ### 比赛时间 MoeCTF2024 通常在每年的特定时间举办,比赛周期一般持续 24 至 48 小时。具体时间通常在主办方的官方公告中发布,例如 MoeCTF 官方网站、社交媒体或相关社区中通知。 ### 比赛详情 比赛主要面向网络安全爱好者,旨在通过实战演练提高参赛者的网络安全技能。比赛通常由多个团队参与,参赛者需要在规定时间内解决各类网络安全题目,获取 Flag 并提交以获得分数。比赛设有排行榜,最终根据解题数量和时间决定排名。 ### 赛题设置 MoeCTF2024 的题目涵盖多个网络安全领域,包括但不限于: - **Web 安全**:涉及漏洞挖掘、SQL 注入、XSS、CSRF 等。 - **Reverse 工程**:需要逆向分析二进制文件,寻找隐藏的 Flag。 - **Pwn**:涉及漏洞利用、缓冲区溢出、格式化字符串等。 - **密码学(Crypto)**:包括对称加密、非对称加密、哈希算法等。 - **Misc(杂项)**:包含网络流量分析、隐写术、取证等。 ### 参与方式 参与 MoeCTF2024 通常需要以下步骤: 1. **注册账号**:访问 MoeCTF 官方平台,注册账号并加入或创建团队。 2. **关注公告**:及时查看比赛官网或相关社区的公告,了解比赛时间、规则和赛题发布情况。 3. **参与比赛**:在比赛开始后,登录平台,下载题目,进行解题并提交 Flag。 4. **团队协作**:与团队成员协作,分工解决不同类型的题目,提高解题效率。 ### 示例代码 以下是一个简单的 Python 脚本示例,用于模拟用户提交请求,可能用于自动化部分 Web 类题目的交互操作: ```python import requests from lxml import html url = "http://127.0.0.1:58591/" session = requests.Session() data1 = { 'player': 1, 'direct': '弟子明白' } d1 = ["北方", "东北方", "东方", "东南方", "南方", "西南方", "西方", "西北方"] d2 = ["北方一个", "东北方一个", "东方一个", "东南方一个", "南方一个", "西南方一个", "西方一个", "西北方一个"] r = session.post(url, data=data1) data_html = html.fromstring(r.text) b = data_html.xpath('/html/body/h1[2]/text()') strs = b[0].strip() n = 5 while n: if len(strs) == 1: data = { 'player': 1, 'direct': str(d1[int(strs) - 1]) } else: data = { 'player': 1, 'direct': str(d2[int(strs[0]) - 1] + ',' + d2[int(strs[len(strs) - 1]) - 1]) } print(data) r = session.post(url, data=data) print(r.text) data_html = html.fromstring(r.text) b = data_html.xpath('/html/body/h1[2]/text()') strs = b[0].strip() print(strs) n = n - 1 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值