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, 记录]
---
现在我终于把CTF的全流程都体验了一遍! <!--more-->
# 起因
去年, 我们学校整了CTF, 我作为协办方的一员[组织了那场比赛](/2020/11/24/createctf.html), 而今年又是一年一度的CTF比赛, 这次我有了组织了经历就想换点别的, 因为前段时间我还在[线下打过CTF](/2021/09/06/offlinectf.html),相比去年有了更加丰富的经验,所以这次的比赛我就不维护平台了,而是试着去出题。
# 出了什么题?
说是有丰富的经验, 但是实际上我又不是信息安全专业的, 也没有专门去练过怎么打CTF, 所以我实际上也不咋会出题😂。不过没关系, 我前几次CTF也有解出来过题目, 那就用他们的思路来出些题目吧! 当然在CTF里还是得出点原创题, 如果直接去抄别人的题还是非常不好的行为, 毕竟对于这种情况搜到的人会感觉很没意思, 而对于没搜到的人也很不公平, 毕竟这不是搜索技能大赛。不过借鉴思路还是没有问题的, 毕竟对于普通人来说还是得用普通思路解题。
## 第一题
所以第一题我缝合了两年前打过的CTF中一道叫[Swedish State Archive](/2019/12/16/ctf.html)的题目和前几个月打过的CTF中一道[关于PHP判断MD5漏洞](/2021/09/06/offlinectf.html)的一道题。在这个题中首先要绕过Python的那些条件, 才能获得PHP的源码, 而且我没有在git中直接提交flag, 所以难度比那单个题目更难了, 获得了PHP的源码之后就可以用那个MD5的漏洞来获得真正的flag了。总的来说难度还可以, 毕竟这还是正常思路可以解决的问题。最终解出来的情况我也很满意, 有12个队伍解出来了。
## 第二题
第一题既然用了别人的思路,第二题自然要自己整点有意思的题目。在我弃坑[MaBBS](https://github.com/Mabbs/Mabbs.Project)之前,我在项目中发现了严重的安全漏洞,那就是我的程序在创建比如贴子之类的东西是直接用标题作为文件名的,而且我最开始的时候没有做任何的过滤。当时我首先写了一个叫做`danw`的函数来过滤有可能出问题的字符, 但是我只给Wiki部分加了这个过滤函数。这是为啥呢? 是因为我当时想把贴子整成ID的形式, 然后把贴子的标题写到meta里面。可惜后来弃坑了就再也没有管这个问题, 只留下一句只有上帝才能看得懂这个代码就结束了MaBBS。也许[重建MaBBS的计划](/2019/07/01/mabbs.html)也再也没有机会完成了, 毕竟失去了当时写程序的初心, 现在也只是会写程序罢了……emmmm有点跑题了。总之既然有这样的漏洞, 那我可以部署出来让我看看那些学信息安全的家伙到底是什么货色, 看看是真的只会按着解题思路来解题还是真的有分析代码的能力。结果也不出我所料, 果然全是一群废物, 除了我曾经告诉过漏洞的人除外, 没有一个人解出来。不过也正是因为我知道那个题有人可能知道答案, 所以分数也不会定很高, 不然我觉得这可能真的无人会解。
## 第三题
第二题可能太原创了, 对于他们没有接触过实战的人来说不合适, 所以第三题我和另外一个学信安的朋友一起出, 这道题我们决定用APICloud他们公司的能力作为这道题难度的上限。APICloud有一个加密HTML源代码的功能, 目前我们在网上没有搜到已经破解的方案。不过如果网上无人会破那作为出题者的我们自己也破不出来啊……毕竟这个题要是没有方案能解, 那出题的意义就没有了, 而且万一要我们自己写WriteUp的话那不就尴尬了。所以我们换了一个思路, 用它加密本来就不考虑让其他人解密, 但是我们在里面偷偷放一个可以调试的工具在里面, 比如vConsole。然后给JS代码二次加密, 使得解题者只有一条路可以走, 那就是使用调试功能来干涉程序。这次我们写的是一个抽卡程序, 目标是点够20亿次才能抽出来。所以这里我们可以直接用调试工具来修改点击次数来实现获得flag, 其实也主要是我们自己不会才整的这种烂方案。不过这个也不算难, 发现的人稍微想一想就能解出来, 所以如果以后有机会, 我还想再提高一个难度, 不给vConsole, 而是写一个请求比如`https://example.com/hello.js`, 然后需要解题者劫持hello.js来实现修改变量, 这样才更有意思, 可惜这次出题没想到这一点, 所以只能出个比较简单的。不过那群信安的家伙真的还是不行, 这么简单的题居然只有一个队伍解出来, 不过他能解出来我也觉得挺不错的, 证明他的思维比较开阔, 不那么局限。
# 出题感受和其他
这次CTF出题感觉还是挺有意思的, 而且挖坑还要想到自己怎么填这个也对找坑很有帮助。毕竟大多数情况真正的环境漏洞不会按常规路走, 能按常规路走的漏洞绝大多数情况都已经被人踏过了, 所以思维要开阔, 真正优秀的渗透工程师肯定是思路开阔, 想法很独特, 而目前那些学信安的就是一群思维固化, 除了解题不懂得其他东西的家伙, 以后找不到坑就等着背锅吧😂。
另外上个月末我还遇到一次很有意思的事情,有一个叫做[萌国ICP备案](https://icp.gov.moe/)的网站有个XSS漏洞, 于是我和同在那个网站上的几个网友进行了一次XSS AWD大战, 为了自己链接的特效而战, 非常的有意思, 可惜这个月初我生病了, 没能记录下这有趣的事情, 等我过两天再次想写博客时就分享一下这个有趣的事情吧!