依言墨香小筑 - 依言酱の小博客 - CTF
type: channel
link: https://blog.y1yan.com/tag/CTF/
items: USTC Hackergame 2024 个人题解
items: USTC Hackergame 2022 个人题解
items: 【CTF】CTF中常用的脚本(转载+自写）

USTC Hackergame 2024 个人题解
type: item
date: 2024-11-09T11:42:00+08:00
description: Y1yan's Hackergame 2024 个人题解前言本文同时发布于 我的博客，欢迎到我的博客进行IP1的加（好玩喵，下次还来玩喵\~另外，多图预警喵（1. 签到这道题要求输入多个语言的启动，具体内容已经在 placeholder 中给出了。因此这里直接使用js脚本取出来再填进去。（话说好几种语言都是不同的冒号，处理起来麻烦了一些）a=document.getElementsByClassName("input-box"); console.log(a[1]); a = Array.from(a); a.forEach((e)=>{ b = e.getAttribute("placeholder").split(': '); b = b[b.length-1]; b = b.split('；'); b = b[b.length-1]; b = b.split('：'); b = b[b.length-1]; b = b.split('：'); b = b[b.length-1]; b = b.split('：'); b = b[b.length-1]; b = b.split('：'); b = b[b.length-1]; console.log(b); e.value = b; });2. 喜欢做签到的 CTFer 你们好呀还是有点曲折的（先搜索 nebula 招新 找到 NEBULA 招新的 Github 仓库，但这里什么有用的东西都没有，就从仓库的创建者入手。找到 唯一一个 commit 的提交者，发现他的博客网址中有 nebuu.la， 于是访问，看见一个类似终端的网页。输入 help 能看见所有能输入的命令，然后试出来输入 env 可以看见一个flag。之后试了一阵子没找到第二个 flag，之后试了下整个页面都是纯前端渲染，没有后端的部分。于是直接 f12 查看源代码，然后 ctrl+f 搜索 flag，倒是很快就找到第二个 flag 了。把 atob... 的那些代码粘贴到控制台运行一下就有了。猫咪问答（Hackergame 十周年纪念版）1. 在 Hackergame 2015 比赛开始前一天晚上开展的赛前讲座是在哪个教室举行的？搜索 Hackergame 2015 可以找到对应的比赛的公告存档，再页面可以看到对应的教室 3A204。2. 众所周知，Hackergame 共约 25 道题目。近五年（不含今年）举办的 Hackergame 中，题目数量最接近这个数字的那一届比赛里有多少人注册参加？上 Hackergame 的 Github 把历年的题数都数一遍，发现最接近的是2019年，然后在 https://lug.ustc.edu.cn/news/2019/12/hackergame-2019/ 得知注册人数是 2682。3. Hackergame 2018 让哪个热门检索词成为了科大图书馆当月热搜第一在 2018 年猫咪问答的官方题解 中可以看到：`在中国科大图书馆中，有一本书叫做《程序员的自我修养:链接、装载与库》，请问它的索书号是？打开中国科大图书馆主页，直接搜索“程序员的自我修养”即可。`不难推测出本题答案。4. 在今年的 USENIX Security 学术会议上中国科学技术大学发表了一篇关于电子邮件伪造攻击的论文，在论文中作者提出了 6 种攻击方法，并在多少个电子邮件服务提供商及客户端的组合上进行了实验？首先搜索进入 USENIX 的官网，之后搜索 USTC， email 等关键词就可以找到对应的论文：FakeBehalf: Imperceptible Email Spoofing Attacks against the Delegation Mechanism in Email Systems之后，把论文下载下来，丢给 ChatGPT：但这个并不是正确答案。实际上，客户端还多了一个：Web interface。因此，实际答案是： (20+1)*16 = 3365. 10 月 18 日 Greg Kroah-Hartman 向 Linux 邮件列表提交的一个 patch 把大量开发者从 MAINTAINERS 文件中移除。这个 patch 被合并进 Linux mainline 的 commit id 是多少？首先找到 Linux 内核的 git 仓库 https://git.kernel.org/根据题目，直接右上角搜索 MAINTAINERS https://git.kernel.org/?q=MAINTAINERS把每一个都点进去，查找 10 月18 日附近 Greg Kroah-Hartman 的相关内容，不难发现对应的 commit。点进去就是对应的 commit 了。6. 大语言…

USTC Hackergame 2022 个人题解
type: item
date: 2022-10-29T22:06:00+08:00
description: 前言算下来，今年已经是我第四次参加 hackergame 了，前几次参加做出来的题都不多，这次总算是勉强上榜了。所以来写个题解，混个脸熟（另：这次上榜后感谢各位大佬没有把我挤下去。能够上榜，填列其中，倍感荣幸（）题解（做出来的）签到解法一众所周知，签到题是一道手速题。只要我的手速够快，就可以在cpu反映过过来之前，在屏幕上写下 2022 四个数字，然后提交得到 flag。解法二然而很遗憾，我并没有那样的手速。不过没关系，我们在点击提交后可以看见我们写下的数字是通过 get 传参的，因此，只要把 result=2022 加在后面提交就可以获得 flag 了。http://202.38.93.111:12022/?result=2022猫咪问答喵Q1. 中国科学技术大学 NEBULA 战队（USTC NEBULA）是于何时成立的喵？搜索 NEBULA 战队（USTC NEBULA） 可以找到这么一个网站：点进去就可以看见成立日期为 2017-03 。Q2. 2022 年 9 月，中国科学技术大学学生 Linux 用户协会（LUG @ USTC）在科大校内承办了软件自由日活动。除了专注于自由撸猫的主会场之外，还有一些和技术相关的分会场（如闪电演讲 Lightning Talk）。其中在第一个闪电演讲主题里，主讲人于 slides 中展示了一张在 GNOME Wayland 下使用 Wayland 后端会出现显示问题的 KDE 程序截图，请问这个 KDE 程序的名字是什么？搜索 Linux 用户协会（LUG @ USTC） 可以找到 自由软件日的介绍页面 ，继续浏览就可以看到题中 闪电演讲的 slides。根据第15张ppt配图中的 Configure Kdenlive 字样可以得出本体的答案就是 Kdenlive。Q3. 22 年坚持，小 C 仍然使用着一台他从小用到大的 Windows 2000 计算机。那么，在不变更系统配置和程序代码的前提下，Firefox 浏览器能在 Windows 2000 下运行的最后一个大版本号是多少？提示：格式为 2 位数字的整数。搜索词条 forefox win2000 可以找到这样一篇文章：Firefox向Windows 2000, Windows XP RTM和SP1说再见 -36氪点进去就可以看到：Dotzler表示，今年6月5日的Firefox 12发布日期是Firefox支持这些老旧系统的最后期限。如果用户还不升级他们的系统，Opera将是Firefox的最佳替代方案。可以得知本题的答案是 12 。Q4. 你知道 PwnKit（CVE-2021-4034）喵？据可靠谣传，出题组的某位同学本来想出这样一道类似的题，但是发现 Linux 内核更新之后居然不再允许 argc 为 0 了喵！那么，请找出在 Linux 内核 master 分支（torvalds/linux.git）下，首个变动此行为的 commit 的 hash 吧喵！提示：格式为 40 个字符长的 commit 的 SHA1 哈希值，字母小写，注意不是 merge commit。搜索关键词 linux kernel，可以找到 Linux 内核的 git 页面。之后在右上角的 log 搜索关键词 argc ，在得出的结果中进一步 ctrl+f 搜索 arg ，可以看到这样一条 commit： exec: Force single empty string when argv is empty看名字就知道可能是符合题意的答案。因此本题的答案就是 dcd46d897adb70d63e025f175a00a89797d31a43。Q6. 中国科学技术大学可以出校访问国内国际网络从而允许云撸猫的“网络通”定价为 20 元一个月是从哪一天正式实行的？搜索关键词 中科大 网络通 可以找到 中国科学技术大学校园网用户服务页面。进一步点开 常见问题列表 后，可以看到：但提交后发现 2011年1月1日并不是本题的答案，因此推测在更早就已经是这个价格了。在 使用 Web Archive 无果后，直接进入 中科大网络信息中心的新闻公告页面。终于在第18页翻到了 关于实行新的网络费用分担办法的通知 这篇文章。点进去后看到：各单位： 为充分发挥网络资源在教学、科研和管理工作中的作用，根据中国科学院、中国教育和科研计算机网有关网络费用分担的原则和办法，参照学校与有关通信公司签订的协议和兄弟院校的做法，结合我校具体情况，决定自2011年1月1日起实行新的网络运行及通信费用分担办法。总的原则是降低费率、鼓励使用、合理分担、促进发展。同时网字〔2003〕1号《关于实行新的网络费用分担办法的通知》终止实行。 特此通知。然后再搜索 〔2003〕1号《关于实行新的网络费…

【CTF】CTF中常用的脚本(转载+自写）
type: item
date: 2019-11-20T13:02:00+08:00
description: Script:栅栏密码:#!/usr/bin/env python # -*- encoding: utf-8 -*- ''' @Time : 2018/12/23 09:55:19 @Author : HeliantHuS @Version : 1.0 @Contact : 1984441370@qq.com ''' string = input("输入:") frequency = [] # 获得栅栏的栏数 result_len = len(string) # 栅栏密码的总长度 25 for i in range(2, result_len): # 最小栅栏长度为2 逐个测试2,3,4.... if(result_len % i == 0): # 当栅栏密码的总长度 模 i 余数为0 则这个i就是栅栏密码的长度 frequency.append(i) for numberOfColumn in frequency: # 循环可能分的栏数 RESULT = [] # 保存各栏数的结果 for i in range(numberOfColumn): # i : 开始取值的位置 for j in range(i, result_len, numberOfColumn): # 开始取值， 隔栏数取一个值， 起始位置是i RESULT.append(string[j]) print("".join(RESULT)) 凯撒密码：#!/usr/bin/env python # -*- encoding: utf-8 -*- ''' @Time : 2018/12/23 09:56:53 @Author : HeliantHuS @Version : 1.0 @Contact : 1984441370@qq.com ''' import string inputStr = input("输入:").lower() caseS1 = string.ascii_lowercase * 2 # caseS1 = string.ascii_uppercase * 2 for j in range(26): result_list = [] for i, num in zip(inputStr, range(len(inputStr))): status = caseS1.find(i) if status != -1: result_list.append(caseS1[status + j]) else: result_list.append(inputStr[num]) print("".join(result_list), "向右偏移了{}位".format(j)) xor异或:#!/usr/bin/env python # -*- encoding: utf-8 -*- ''' @Time : 2018/12/20 14:17:59 @Author : HeliantHuS @Version : 1.0 @Contact : 1984441370@qq.com 可以进行字符串的异或运算 可xor加密也可以解密 思路就是先将要解码的字符串转换为ascii码， 然后穷举一个数字 i , 将这个数字i与字符串的ascii码进行异或运算，将结果再转换为字符串 ''' import base64 s1 = list(b'') for i in range(200): # 进行穷举的数字可高可低 result = "" for j in range(len(s1)): result += chr(s1[j] ^ i) print(result) ROT13:#!/usr/bin/env python # -*- coding: utf-8 -*- ''' @Author : HeliantHuS @Time : 2018/12/17 8:26 @Version : 1.0 @Contact : 1984441370@qq.com ''' import string s1 = "" rot13_1 = string.ascii_lowercase[:13] rot13_2 = string.ascii_lowercase[13:] result = [] for i in s1: find_1 = rot13_1.find(i.lower()) if find_1 != -1: if i.isupper(): result.append(rot13_2[find_1].upper()) continue result.append(rot13_2[find_1]) find_2 = rot13_2.find(i.lower()) if find_2 !…