第一届 _帕鲁杯_ - CTF挑战赛

文章描述了一个基于Python的FlaskWeb应用,通过解析ASCII编码和旗标提取(如paluctf),以及涉及加密解密(如YafuN分解)的CTF签到挑战过程。

Mis

签到

题目附件:

27880
30693
25915
21892
38450
23454
39564
23460
21457
36865
112
108
98
99
116
102
33719
21462
21069
27573
102
108
97
103
20851
27880
79
110
101
45
70
111
120
23433
20840
22242
38431
22238
22797
112
108
98
99
116
102
33719
21462
21518
27573
102
108
97
103

使用脚本将ASCII字符转换为文本字符串
参考博客:pythonascii转换脚本


ascii_text = '''
27880
30693
25915
21892
38450
23454
39564
23460
21457
36865
112
108
98
99
116
102
33719
21462
21069
27573
102
108
97
103
20851
27880
79
110
101
45
70
111
120
23433
20840
22242
38431
22238
22797
112
108
98
99
116
102
33719
21462
21518
27573
102
108
97
103
'''

text = ""

ascii_codes = ascii_text.strip().split()
for ascii_code in ascii_codes:
    char = chr(int(ascii_code))
    text += char
    

print("转换结果:", text)

image.png
flag:

flag{TreJaiuLT1rgbdfG0Eay}

Web

Web-签到

打开题目显示签到题
image.png
题目附件代码内容:

from flask import Flask, request, jsonify
import requests
from flag import flag  # 假设从 flag.py 文件中导入了 flag 函数
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def getinfo():
    url = request.args.get('url')
    if url:
        # 请求url
        response = requests.get(url)
        content = response.text
        print(content)
        if "paluctf" in content:
            return flag
        else:
            return content
    else:
        response = {
            'message': 200,  # 这里是数值,不是字符串
            'data': "Come sign in and get the flag!"
        }
        return jsonify(response)
@app.route('/flag', methods=['GET', 'POST'])
def flag1():
    return "paluctf"

if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", port=80)

这段代码看起来是一个使用 Flask 框架编写的简单的 Web 应用程序。根据代码的结构和提示,我们可以看到以下关键点:

  1. 应用程序有两个路由:
    • ‘/’ 路由用于处理 GET 和 POST 请求,它会检查传入请求的参数中是否包含名为 url 的参数。如果包含了 url 参数,它会使用 requests 库发送一个 GET 请求到指定的 URL,并检查返回的内容是否包含 “paluctf” 字符串。如果包含了该字符串,就返回 flag;否则,返回请求到的内容。
    • ‘/flag’ 路由仅用于返回字符串 “paluctf”。
  2. flag 函数来自于名为 flag.py 的文件,但在提供的代码中并未包含 flag.py 文件的内容。
  3. 应用程序运行在调试模式下,并监听 0.0.0.0:80。

基于以上信息,需要执行以下步骤来解决这道 CTF 题目:
首先访问一下[http://localhost:13382/flag](http://localhost:13382/flag)
image.png
发现显示了paluctf
那么我们直接传参url=[http://localhost:13382/flag](http://localhost:13382/flag)不就满足了这段代码吗?

def getinfo():
    url = request.args.get('url')
    if url:
        # 请求url
        response = requests.get(url)
        content = response.text
        print(content)
        if "paluctf" in content:
            return flag

传入的网页内容里面包含paluctf的话就显示flag
image.png
发现报错,再分析一下代码

if __name__ == '__main__':
    app.run(debug=True, host="0.0.0.0", port=80)

是在80端口,那么我们改为80端口试一下
构造URL[http://localhost:13382/?url=http://localhost:80/flag](http://localhost:13382/?url=http://localhost:80/flag)
成功获取flag
image.png

Crypto

Crypto-签到

NC上去获得信息
image.png
yafu分解N
然后求D
最后求M,获得flag
image.png
flag{56cd7679-774f-4f15-8d0a-c8def614ddbf}

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fab1an要努力!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值