久违的参加 hackergame 了,前两年都忙得忘记了还有这个好玩的比赛,上一次参加已经是2020年的事情了

最终成绩

当前分数:2750, 总排名:260 / 2386
AI:0 , binary:200 , general:1550 , math:200 , web:800

hackergame 启动

一道简单的签到题,显而易见的我不可能通过录制音频来过这个题目,于是我直接F12看源代码,这个相似度是使用js评估得出来然后放进一个不显示的元素里面的,于是我直接自己将100放进这个元素内,然后提交,这样就得到了第一个flag

flag{wELcoM3-7O-HaCk3Rg@Me-AnD-enJOy-hACKIN9-20Z3}

猫咪小测

又是经典的搜索引擎时间

  • 想要借阅世界图书出版公司出版的《A Classical Introduction To Modern Number Theory 2nd ed.》,应当前往中国科学技术大学西区图书馆的哪一层?

很容易就能找到中国科学技术大学图书馆的官方网站,里面有提供图书检索的功能,搜到这本书馆藏在西区图书馆的外文书库 于是搜索西区图书馆的简介,可得外文书库在12楼

  • 今年 arXiv 网站的天体物理版块上有人发表了一篇关于「可观测宇宙中的鸡的密度上限」的论文,请问论文中作者计算出的鸡密度函数的上限为 10 的多少次方每立方秒差距?

这个随便搜搜就出来了,可得 23

  • 为了支持 TCP BBR 拥塞控制算法,在编译 Linux 内核时应该配置好哪一条内核选项?

使用 google 搜索这几个关键词 tcp bbr 编译 "config_" 可以找到这篇文章 由于这次的题目是能明确看到分数的,所以逐个试试就可以得到答案为 CONFIG_TCP_CONG_BBR

  • 🥒🥒🥒:「我……从没觉得写类型标注有意思过」。在一篇论文中,作者给出了能够让 Python 的类型检查器 MyPY mypy 陷入死循环的代码,并证明 Python 的类型检查和停机问题一样困难。请问这篇论文发表在今年的哪个学术会议上?

这题目有点难,但是我打开了bing ai找到了一些相关的信息 虽然没有得到最终正确的答案,但是我找到了新的关键词 esop python type checking is undecidable 把它塞进 google 搜索,可以找到 这篇论文 论文的角落就写着学术回忆的缩写

更深更暗

这题又是看js源代码可以拿到的flag,就不多说了

旅行照片 3.0

神秘奖牌

怎么又是问答题目啊!!!

题目第一个图片可以通过识图看出是诺贝尔奖,然后通过搜索可以得出东京大学展出的诺贝尔奖章最年轻的得主是梶田隆章 他所在的研究所是 东京大学宇宙射线研究所 ICRR

至于见面的日期,就用简单的js来改值枚举出来了

d=new Date(document.querySelectorAll('input')[0].value);
d.setDate(d.getDate()+1);
document.querySelectorAll('input')[0].value = formatDate(d, "yyyy-MM-dd")
document.querySelectorAll('.ui button')[0].click()

赛博井字棋

这个题目,我是使用自己构造请求来将自己的棋子下在已经被占的格子实现的

奶奶的睡前 flag 故事

题目的指向性很明显了,就是要看 google pixel 手机的截图漏洞 搜索了这个漏洞名字之后,找到了一个在线还原的工具 很容易的就得到了flag

组委会模拟器

很显然不能手动撤回,于是就写了两个函数来判断是否需要撤回+发送删除消息的请求就好了

function hasFlag(str) {
    const regex = /hack\[[a-z]+\]/g;
    return regex.test(str);
}

function del() {
    console.log("check")
    var data = document.querySelectorAll('.fakeqq-message__content');
    var i = 0;
    for (i = 0; i < data.length; i++) {
        if (hasFlag(data[i].innerText)) {
   sssssss   console.log(data[i].innerText);
            data[i].innerText="";
            fetch("http://202.38.93.111:10021/api/deleteMessage", {
                "headers": {
                    "accept": "application/json, text/plain, */*",
                    "accept-language": "zh-CN,zh;q=0.9",
                    "cache-control": "no-cache",
                    "content-type": "application/json",
                    "pragma": "no-cache"
                },
                "referrer": "http://202.38.93.111:10021/",
                "referrerPolicy": "strict-origin-when-cross-origin",
                "body": "{\"id\":" + i + "}",
                "method": "POST",
                "mode": "cors",
                "credentials": "include"
            });
        }
    }
}
del()
setInterval(del(), 1000)

哇,这个我刚好了解过,就是SSTV(慢扫描电视),手动编译安装了一下QSSTV 然后通过 qpwgraph 进行音频重定向,将 VLC 的输出怼进 QSSTV 的输入,得到 flag

JSON ⊂ YAML?

JSON ⊄ YAML 1.1

搜索一下可得 stackoverflow:What valid JSON files are not valid YAML 1.1 files?

{"test":12345e999}

JSON ⊄ YAML 1.2

这个,我也不知道为啥,就是误打误撞做出来的

{ "foo": true, "foo": "False" }

Git? Git!

git reflog 的简单使用

HTTP 集邮册

  • 100
GET / HTTP/1.3\r\n
Host: baidu.com\r\n
Accept: None \r\n
Content-Length: 0 \r\n
Timeout: 0 \r\n
Expect: 100-continue \r\n
\r\n\r\n
  • 200
  • 206
GET / HTTP/1.3\r\n
Host: baidu.com\r\n
Accept: None \r\n
Content-Length: 0 \r\n
Timeout: 0 \r\n
Range: bytes=1-20
\r\n\r\n
  • 404
GET /.path HTTP/1.1\r\n
Host: example.com\r\n\r\n
  • 304
GET / HTTP/1.1\r\n
Host: example.com\r\n
If-Modified-Since: Tue, 15 Aug 2023 17:03:04 GMT \r\n\r\n
  • 400
GET /../ HTTP/1.1\r\n
Host: example.com\r\n

\r\n\r\n
  • 405
POST / HTTP/1.1\r\n
Host: example.com\r\n

\r\n\r\n
  • 413
GET /index.html HTTP/1.1\r\n
Host: example.com\r\n
Content-Length: 10000000000 \r\n\r\n
  • 414
GET /...很长一段... HTTP/1.3\r\n
Host: baidu.com\r\n
Accept: None \r\n
Content-Length: 0 \r\n
Timeout: 0 \r\n
\r\n\r\n
  • 416
GET / HTTP/1.3\r\n
Host: baidu.com\r\n
Accept: None \r\n
Content-Length: 0 \r\n
Timeout: 0 \r\n
Range: bytes=200000-300000
\r\n\r\n

没有状态……哈?

不带 http版本 即可触发

GET /   \r\n
Host: example.com*\r\n\r\n

Docker for Everyone

将链接到的目录挂载进镜像即可

惜字如金 2.0

🪐 高频率星球

如图,将内容输出到一个文件之后将多余的特殊字符删掉就可以得到个可以执行的js脚本了

🪐 低带宽星球

小试牛刀

网上随便搜个无损压缩的在线工具就好了

为什么要打开 /flag 😡

LD_PRELOAD, love!

这题我解得有点取巧了

package main  
  
import (  
    "fmt"  
    "io"    "os")  
  
func main() {  
    open, err := os.Open("/flag")  
    if err != nil {  
       panic(err)  
       return  
    }  
    all, err := io.ReadAll(open)  
    if err != nil {  
       panic(err)  
       return  
    }  
    fmt.Println(string(all))  
}
export CGO_ENABLED=0
go build