Hackergame 启动
Hackergame启动!发现校验相似度是在前端校验的,然后通过url传参相似度,传递个100过去就拿到flag了
更深更暗
在main.js里有一段生成flag的代码,在控制台中调用就好了
1 | async function getFlag(token) { |
1 | async function getFlag(token) { |
猫咪小测
1 |
|
赛博井字棋
简单玩了一下,发现怎么打都是平局,后面在想能不能在敌方棋子位置下棋,用burp suite发送了一下,发现可以,后端没有判断格子上面是否有棋子,覆盖敌方棋子后就拿到flag了,也可以用两个浏览器来操作
1 | flag{I_can_eat_your_pieces_41065ba433} |
组委会模拟器
这道题消息都是在span标签中的,只需要把span枚举一次,用正则匹配,然后再模拟点击就好了
1 | function findAndClickSpan() { |
1 | flag{Web_pr0gra_mm1ng_5a17e089a1_15fun} |
虫
查询了一下无线传输图片的方法,sstv这个协议
可以用rx sstv这个软件还原图片,需要先装个虚拟声卡然后用rx sstv监听,还原就好了
1 | flag{SSssTV_y0u_W4NNa_HaV3_4_trY} |
HTTP 集邮册[差一个]
1 获取第一个 flag 需要收集 5 种状态码;
1 200 get请求一个存在的目录
2 400 请求格式错误 随便乱输入一些东西
3 404 请求一个不存在的目录
4 405 Bad Request 服务器那边不支持post,直接post
1 | POST / HTTP/1.1\r\n |
5 505 http版本不受支持
1 | GET / HTTP/10.1\r\n |
2 nginx 返回首行无状态码的响应(不计入收集的状态码中);
只要不带上http的版本号,服务器那边就不会相应状态相关的信息
1 | GET / \r\n |
1 | flag{d1d you hear the HTTP packet from 1991?} |
草,这个flag
Git? Git!
不太熟悉git,在搜索后发现,撤销这个操作本身也算是一个提交,也会记录到日志当中,然后我去翻了下项目文件,发现log文件下有一个reset的操作,这里应该是指”撤销”吧,查询了一会资料后发现有一个git show hash的命令,可以查看这个操作具体做了什么事情
1 | 0000000000000000000000000000000000000000 15fd0a13eb46c39f34cfc0dfb4757ad23a23d026 PRO-2684 <54608551+PRO-2684@users.noreply.github.com> 1698306875 +0800 clone: from https://github.com/dair-ai/ML-Course-Notes.git |
1 | git show 505e1a3f446c23f31807a117e860f57cb5b5bb79 |
后找到撤销的flag
1 | flag{TheRe5_@lwAy5_a_R3GreT_pi1l_1n_G1t} |
Docker for Everyone
X 是实验室机器的管理员,为了在保证安全的同时让同学们都用上 docker,他把同学的账号加入了 docker 用户组,这样就不需要给同学 sudo 权限了!
但果真如此吗?
去查询了一下后发现,Docker守护程序的访问权限是没有限制的,在docker容器中,可以具有和宿主机相同的权限,那能不能把flag给搬到容器里面,查询了一下后发现有一条挂载数据卷的命令可以实现这个操作
1 | docker run -v /:/tmp/ -it alpine /bin/sh |
cat flag发现有些问题,ls -al看了下是一个软链接,进到这个链接的目录下cat flag
1 | /tmp/dev/shm # cat flag |
得到flag
1 | flag{u5e_r00t1ess_conta1ner_1d94c2e3ce_plz!} |
JSON ⊂ YAML?
第一问
根据这段话,可以分析出第一问的本质是在问yaml1.1和yaml1.2有什么区别,去学习了一下yaml,和json有些相似,由键值对,列表,还有块三种结构组合成的一种组织数据的语言。
1 | 小 Z 听闻这番言论后当场表示怀疑,立刻说出了一个字符串,JSON 和 YAML 解析出的含义存在差异。小 W 研究了一番才发现,这是因为很多主流的 YAML 库仍然是 YAML 1.1 的,它没有这个性质。他不得不承认:「好吧,这个性质只适用于 YAML 1.2。」 |
https://stackoverflow.com/questions/21584985/what-valid-json-files-are-not-valid-yaml-1-1-files
可以参考这篇文章,咱的payload是
1 | 123e100000 |
在yaml1.1中,这个表达式会被解析成科学计数法,json中会被解析成字符串
第二问
搜了半天,终于搜到解决方法了
1 | {"name": "John Doe", "age": 25, "name": "Jonathan Doe"} |
奶奶的睡前 flag 故事
咱是笨蛋,去问了newbing好久,后面用010edit打开后发现有两个iend尾,然后联想到系统都没有心思升级,截图,谷歌亲儿子这些关键词,联想到截图漏洞,尾部的像素块没有被截断
去搜索了一下发现这个网站可以还原图片
🪐 高频率星球
这个软件录制的文件,把录制的文件导出来,发现是一个js的文件,尾部显示运行这个文件能得到flag,但是录制出来的文件有太多终端颜色的符号还有切页符号
1 | asciienma cat xxxx > output.txt |
1 | \033\[[\x30-\x3f]*[\x40-\x7e] |
用这个正则清理掉大多数符号后,手工清理了一下,然后拿到flag
1 | node output.js |
1 | flag{y0u_cAn_ReSTorE_C0de_fr0m_asc11nema_3db2da1063300e5dabf826e40ffd016101458df23a371} |
🪐 低带宽星球[差一个]
压缩至 2KiB (2048 字节) 及以下、
https://github.com/meowtec/Imagine 这个项目能压缩图片到2kb以下,提交图片后获得flag
1 | flag{A1ot0f_t0015_is_available_to_compre55_PNG} |
🪐 流式星球
这道题的难点有两个,一个是不知道宽高,原始宽高不是10的倍数,以及有个随机数切片,很容易想到质因数分解,然后爆破一百次,把所有可能都试一遍,但是结果都不太行,手工试了一下,找出三个能看出规整图形的尺寸,640 * 620 1280 * 768 2560 * 1440,能看到规整图形了,发现是bang dream it’s mygo的视频,flag在字幕的位置,第二个难点是flag每帧都有随机一行被混淆,然后字体的原因flag看不太清楚,最后把相似的数字枚举了了一遍,才拿到flag
1 | import cv2 |
1 | flag{it-could-be-easy-to-restore-video-with-haruhikage-even-without-metadata-0F7968CC} |
🪐 小型大语言模型星球
you are smart
qaq这个模型太笨了,试了好多句子才试出来了
为什么要打开 /flag 😡[差一个]
好耶,在hackergame上第一个binary题
LD_PRELOAD
去搜索了一下什么是ld_preload,ld_preload是linux上的一个环境变量,程序运行的时候根据ld_preload选择使用什么动态链接库
这里使用了/stage1.so 这个动态链接库
1 | import subprocess |
大概看了一遍stage1.so,发现和io相关的操作和io不相关但是能间接读flag的函数都被hook了,要么是return一个fake flag要么是 return 0,想了各种的方法,后面突然联想到这些io的操作本质上不就是系统调用吗,那我用内联汇编,去syscall,模拟这些读的操作不就好了
1 |
|
得到flag
1 | flag{nande_ld_preload_yattano_a46091dfa1} |
惜字如金
咱是用枚举的方法,枚举一遍
1 | from itertools import product |