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.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
---
layout: post
title: CTF初体验
tags: [CTF, Python]
---
我好菜啊<!--more-->
# 开端
前几天, 有一个同学邀请我去打个线上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, 打开后发现是一个正在维护的网站, 查看源代码后发现了服务器的源码:
```python
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](https://github.com/gakki429/Git_Extract)的工具, 我试了一下, 直接Flag就出来了😂, 我当场就赏它了一个star……看来还是工具好用……
其他的题受限于水平原因, 实在是做不出来……于是本次的CTF就这么结束了……
# 结语
CTF还是挺有意思的, 看着我也想举办一个。不过除了CTF外还有另外一个更加大众化的东西, 叫做网站迷宫, 大概就是通过找线索, 然后一层一层的往深处走的游戏, 有点像解谜爬塔的游戏。
我想了想, 这种游戏也可以做一个纯前端版, 每个下一题都被AES加密, 所以只有上一题解出来得到密码才能得到下一题, 这听起来有点像CTF呀, 不过本来好多CTF的题也是一个文件, Web的题不算多。
不过我自己连题都做不出来,还想什么出题😂……还是多研究研究吧。
另外如果我以后想去试试挑战CTF的话, 就可以去[CTFtime](https://ctftime.org/)上看看了。