summary refs log tree commit diff
path: root/_posts/2019-12-16-ctf.md
diff options
context:
space:
mode:
authormayx2022-01-04 20:42:55 +0800
committermayx2022-01-04 20:42:55 +0800
commitf4aa957c53cda659d026ffd23856f65a72fee739 (patch)
treeafc51b78e1ff241c955ca30910e895e02e0a1d22 /_posts/2019-12-16-ctf.md
Restore deleted repositories
Diffstat (limited to '_posts/2019-12-16-ctf.md')
-rw-r--r--_posts/2019-12-16-ctf.md62
1 files changed, 62 insertions, 0 deletions
diff --git a/_posts/2019-12-16-ctf.md b/_posts/2019-12-16-ctf.md
new file mode 100644
index 0000000..6ce2c4e
--- /dev/null
+++ b/_posts/2019-12-16-ctf.md
@@ -0,0 +1,62 @@
+---
+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/)上看看了。
+