HGame 2019 week1 Writeup
终于来了!
一直盼望着的 HGame 来了!!好开心啊! 本来是计划 25 号回老家的,跟爸爸说协会 25 号有 HGame 后,便推迟到了 26 号回去。 之前也是一直肝到了 4 点,学了超多东西。 不过开始半小时后 ak web 确实让我十分激动啊!!一开心又下单买了个手办,只怕到时候补款又得哭死。
嘛,下面来聊聊这次的题吧。感觉还是有点难度的,这还只是 week 1 啊!!
Web
谁吃了我的flag
这个作为 web 第一题确实有点吓人。
直接上来是一个 html 文件,给了一半的 flag。因为是 html,又没有 JavaScript,所以搞不了什么小动作。
试了下.git
、.DS_Store
都不行。
那么问题来了,剩下的 flag 在哪呢?
根据题干是因为昨天没有好好关机吗T_T
,自己原来剪视频时,总是会遇到 Premiere 崩掉的情况,此时会产生一个临时文件。
百度了一下ctf 临时文件
,发现 vim 编辑器是会生成临时文件的,文件名为.文件名.swp
,
尝试访问.index.html.swp
,下载下来后打开即可得到完整的 flag:
hgame{3eek_diScl0Sure_fRom+wEbsit@}
换头大作战
头就是请求头咯~
显示POST
一个want
,之后根据提示来一步步加请求头。
还是推荐使用 Chrome 插件 Restlet Client。
X-Forwarded-For
为127.0.0.1
,Referer
为www.bilibili.com
,Cookie
为admin
。
但是,这里的User-Agent
好像有点问题,当时就是卡在这里了,不知道是题目的问题还是我太菜了。
直接设置User-Agent
为Waterfox/50.0
是不行的,最后是改为use Waterfox/50.0
才可以,就很懵逼。
hgame{hTTp_HeaDeR_iS_Ez}
very easy web
简单的代码审计。
代码中把GET
参数id
进行了urldecode
,而浏览器同样也会帮我们先做一遍urldecode
,因此我们要传urlencode
两遍的vidar
。
那么问题来了,PHP里面echo(urlencode('vidar'));
出来的还是 vidar。
好像英文字母这些urldecode
都是本身啊;这里就需要我们手动自己对照 URL 编码的表格得出来。
可以参考这个http://www.w3school.com.cn/tags/html_ref_urlencode.html
两遍 URL 编码后得出%2576%2569%2564%2561%2572
,访问http://120.78.184.111:8080/week1/very_ez/index.php?id=%2576%2569%2564%2561%2572
拿到 flag:
hgame{urlDecode_Is_GoOd}
can u find me?
进入后日常 F12,转到f12.php
。
说是要POST
password,日常瞄一眼响应头,找到password: woyaoflag
,
然后POST
过去就行。
转到http://47.107.252.171:8080/toofast.php
,说我们速度 too fast,那就是要抓包咯。
Charles 走一波,得到 flag:
hgame{f12_1s_aMazIng111}
至此,web 题就 ak 了!花了半个小时,如果中途键盘没有因为虚拟机而崩掉搞不好还能更快23333
RE
一点都不会的菜鸡,只能挑简单的做。
brainfxxker
挺硬核的一道题。
brainfucker 看起来虽然比较扯,但是正如 wiki 上所说,“Brainfuck程序很难读懂。尽管如此,Brainfuck图灵机一样可以完成任何计算任务。”所以……这就十分底层了。
菜鸡的我只能大概搞得懂一点,但是,这并不妨碍我们自己先随便试试。
第一个字母输入个a
,不对,再猜b
,诶!对了!
然后就是脑洞了:总共有要输入 9 个字符,题目是 brainfuck 也是 9 个字符,那 flag 会不会就是这个?
结果还真是,只是稍微换了下字母混淆了一下,比如改下大小写啊,i
换成!
,都是些常见的套路。
然后,我们就可以很轻松的猜出flag,笑死。
hgame{bR4!NfUcK}
HelloRe
下载下来直接拖进 IDA,然后一个个翻找到 hgame 的 flag 就行。
hgame{Welc0m3_t0_R3_World!}
Pro的Python教室(一)
跟 Python 无关,直接把enc2 = 'SGVyZV8xc18zYXN5Xw=='
base64_decode
一下,然后拼成最后的 flag 就行。
这题只是给个示例而已,传达一种思想。要来真的肯定是那种复杂的一匹的加密算法。
hgame{Here_1s_3asy_Pyth0n}
PWN
还是一点都不会,只会最简单的。
aaaaaaaaaa
nc
连上后,疯狂输入a
,然后就会反弹出 Shell,然后cat flag
即可。
感觉背后的原理就是接受输入的函数不安全,然后就溢出了吧。
hgame{Aa4_4aA_4a4aAAA}
MISC
Hidden Image in LSB
唔……这个是花了四五个小时,真的是难受。 首先是疯狂在 GitHub 上 LSB 的项目,clone 下来后又直接在本地装了一堆依赖,把本地的 Python 环境搞得乱七八糟。 然后发现还是不行。 也在网上找到了 stegsolve 这个软件,奈何网上的使用教程是错的,我一直在 Data Extract 里面疯狂尝试,结果什么也出不来。 最后发现…… 只要多点击几下下方的箭头就可以了,被自己蠢死QAQ
hgame{LSB_is_easy_for_u}
打字机
死宅真恶心!死宅真恶心!死宅真恶心! 明显就是欺负我看番看得少23333
把打字机的图放 Google 搜了一下,发现居然是《紫罗兰永恒花园》里面的。 瞬间气死,我还以为是什么上古文字。 因为打字机图上的字母都是大写的字母,小写的字母并没有。 在 Google 上我找到了网友对动画中一封信的翻译,其中的大小写字母对照的挺多的。 根据这张图,然后连蒙带猜出 flag:
hgame{My_vi0let_tyPewRiter}
Broken Chest
这个文件下载下来后,丢进 binwalk 看了下,发现有点东西。 但是却一直解压不出来,提示我的 Python 缺少库,然而 macOS 上的 brew 好像并不能装这个库。 便开始忙着用 Docker 开 Ubuntu 虚拟机,配环境。 最后居然。。。 因为这是个 zip 文件,然后文件头那里缺了一点点,因此就损坏了。 自己做一个 zip 文件,比对一下文件头,把缺少的部分用 WinHex 加上去即可解压,密码在压缩包简介那里给出,得到 flag:
hgame{Cra2y_D1aM0nd}
Try
这个题做了很久也是自己太菜了。 首先把下载下来的 try-it.pcapng 拖进 Wireshark 分析。 只看 HTTP 请求,我们可以看到有一个 dec.zip 的文件。然后我便傻乎乎的把整个请求给保存下来然后用 WinHex 删掉前面的请求头,发现并不能打开。 正确的方法应该是:File -> Export Objects -> HTTP
然后选择我们的文件就好了!
解压后发现得到了一个 password.txt 文件和一个带密码的 open-it.zip 文件。 用 WinHex 或 HexFriend 打开 open-it.zip 检查一下是否是伪加密,
可以看到开头结尾都有这个0001
,说明这是用 7z 压缩的真的带密码加密的压缩包。
通过 password.txt 的提示我们可以知道,压缩包的密码是hgame
后面接 8 位字符,用 ARCHPR 进行暴力破解。
选择“掩码”,然后输入hgame????????
,首先只跑一遍所有数字尝试一下。
不到一秒钟就出来啦!
输入密码解压后,可以看到一张石原里美老婆的照片。 用 binwalk 看一下,发现里面藏着个 1.docx 的 Word 文档。
提取出来后用 Word 打开,发现是空白的,但是上面很明显有内容。 直接全选复制,然后粘贴到随便一个文本编辑器,便得到了 flag:
hgame{59d28413e36019861498e823f3f41406}
好耶!misc 也 ak 了!
CRYPTO
Mix
这道是 AC 学长出的题。因为一些原因,这道题很容易得到假 flag 。 当时我疯狂怀疑人生。在群里 o 爷爷给了提示后才发现不对劲2333 描述里面一下就是摩斯密码,随便在网上找个在线解码,得到:
744B735F6D6F7944716B7B6251663430657D
然后 base 编码全部试一下,发现是 base16:
tKs_moyDqk{bQf40e}
看过去年 HGame 的 Writeup,了解到这是栅栏密码。根据 flag 的格式,最后解出来的应该为xxxxx{xxxxxxxxxxx}
。
推荐这个网站https://www.qqxiuzi.cn/bianma/zhalanmima.php
当每组字数为 9 时,解出来为:
tsmyq{Q4eK_oDkbf0}
符合题意。这一看就是凯撒密码,然后我就一脚踩进坑里面了2333
我是用 CTF 在线工具 这个站http://ctf.ssleye.com/
里面的凯撒密码来解密的。
这个站的问题就在于,凯撒编码后所有字母全部都变成了小写:
hgame{e4sy_crypt0}
然而我们的密码原文中是有大写字母的。所以我需要手动对比一下,把小写换成大写才是最终的 flag:
hgame{E4sY_cRypt0}
狡猾狡猾~
Base全家
很有意思的一道题,正规解法应该是用 Python 写脚本的。
但是因为我是个菜鸡,所以用 Python 手动解决。期间总共做了四遍!
我们知道,题目里给的那一串就是疯狂各种 Base 编码搞出来的。
我们可以用 Python base64
库中的base64.b16decode``base64.b32decode``base64.b64decode
,来对其分别进行相应的解码。
如果用错的解码的方式,Python 会报错并抛出一个异常。
然后我可以用try
语句或者用你的眼睛捕获到异常然后再换一种解码方式就行。
我只有菜鸡的做法,也就是我的方法。用我的眼睛捕获异常2333,再手动更换解码方式。
print(base64.b32decode(base64.b64decode(base64.b64decode(base64.b64decode(base64.b32decode(base64.b16decode(base64.b16decode(base64.b16decode(base64.b16decode(base64.b64decode(base64.b16decode(base64.b64decode(base64.b32decode(base64.b16decode(base64.b32decode(base64.b16decode(base64.b16decode(base64.b16decode(base64.b64decode(base64.b64decode(a)))))))))))))))))))))
还是太菜了…… 最后得到字符串
base58 : 2BAja2VqXoHi9Lo5kfQZBPjq1EmZHGEudM5JyDPREPmS3CxrpB8BnC
在网上找到了一个 base58 解码的 JavaScript 实现:https://blog.csdn.net/github_39132847/article/details/83624463
解码后得到 flag:
hgame{40ca78cde14458da697066eb4cc7daf6}
嗯,然后其实还有些题感觉可以做的。只是回到老家后事挺多的,便咕咕咕了。 ak 了 web 和 misc,也算是及格了23333
喜欢这篇文章?为什么不打赏一下呢?