You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.0 KiB

layout title tags
post CTF初体验
CTF
Python

我好菜啊

开端

前几天有一个同学邀请我去打个线上CTF我大概看了下时间是在周末于是我就答应了。
以前我倒是对CTF也有些了解曾经也试着在网上找到一些题不过那些题的评论区总是有一堆人透答案体验极差所以其实我也没真正做过CTF的题。
不过我曾经也攻击过一些网站,也算有点经验吧,所以觉得问题应该不大。

答题

到了周末我还是像往常一样睡到中午不过没关系这个比赛持续2天所以无所谓。
等到我想答题的时候题目也基本上全部都出来了,我打开网站一看,题的类型挺多的,有涉及密码学、二进制、文件组成、溢出之类乱七八糟的东西。当然我全都不会 (于是就凉了)
虽然大多数都不会不过至少我还是学过一些HTTP协议之类的东西所以觉得我至少要解出一道Web题吧。
首先吸引我的是一个叫做Cookie的题我想既然它叫Cookie那么大概就是改改cookie就能解出来吧。题目大概是我有$50有三种饼干Flag饼干最贵要$100因为买不起所以得不到Flag。那么解法应该就是想办法改我有的钱的然后再去买Flag饼干就OK了吧。以这个思路我看了下cookie那是一个被base64编码后的json解码后发现里面有一个叫做money的key这下我想那不就解出来了嘛我修改了money的value编码后提交钱的数量不出意料的变了然后我就去买Flag饼干但是不知道为什么改完以后所有饼干都买不了了……所以这道题最后没有解出来…… (太菜了)
之后我换了一道题那道题叫做Swedish State Archive打开后发现是一个正在维护的网站查看源代码后发现了服务器的源码

from flask import Flask, request, escape
import os

app = Flask("")

@app.route("/")
def index():
    return get("index.html")

@app.route("/<path:path>")
def get(path):
    print("Getting", path)
    if ".." in path:
        return ""

    if "logs" in path or ".gti" in path:
        return "Please do not access the .git-folder"

    if "index" in path:
        path = "index.html"

    if os.path.isfile(path):
        return open(path, "rb").read()

    if os.path.isdir(path):
        return get("folder.html")

    return "404 not found"


if __name__ == "__main__":
    app.run("0.0.0.0", "8000")

虽然我Python学的不多但是至少我看到了.gti看来是通过git获得Flag的题但是它屏蔽了文件夹和index和logs两个路径的关键词……这该怎么做……后来我去网上搜了下解git类型的ctf的题大多数人都用了一个叫做Githack的工具我大概看了一下这是个Python的脚本但是它依赖于index文件所以不能用。正当我要放弃之时我发现了一个叫做Git Extract的工具我试了一下直接Flag就出来了😂我当场就赏它了一个star……看来还是工具好用……
其他的题受限于水平原因实在是做不出来……于是本次的CTF就这么结束了……

结语

CTF还是挺有意思的看着我也想举办一个。不过除了CTF外还有另外一个更加大众化的东西叫做网站迷宫大概就是通过找线索然后一层一层的往深处走的游戏有点像解谜爬塔的游戏。
我想了想这种游戏也可以做一个纯前端版每个下一题都被AES加密所以只有上一题解出来得到密码才能得到下一题这听起来有点像CTF呀不过本来好多CTF的题也是一个文件Web的题不算多。
不过我自己连题都做不出来,还想什么出题😂……还是多研究研究吧。
另外如果我以后想去试试挑战CTF的话就可以去CTFtime上看看了。