2018 LUG HackerGame 解题笔记
最近玩了一下 LUG 的 2018 HackerGame, 下面是解题笔记
推荐阅读:
Coxxs 大佬的 Blog 官方 writeups Soha 大佬的
签到题
这题没啥好讲的, 只要把 maxlength 改成相应的长度就好了
猫咪问答
拿着题目去问 Google / 百度
游园会的集章卡片
拼图游戏, (我用画图拼的)
Word 文档
将附件 下载之后后缀改为 zip 然后解压出 flag.txt (因为 docx 就是 zip + XML 之前 LTT 还是哪里都有做过一期科普)
黑曜石浏览器
搜索得到官网 https://heicore.com/ (看 whois 是八月份注册的) 然后用 chrome 打开 dev tools 会直接 crash 掉浏览器 直接用 Firefox 打开就好了 (或者 curl 一下) 崩掉浏览器应该用的是
setInterval(() => {
var r = /./;
r.toString = function () {
eval("console.clear();");
document.documentElement.innerHTML = '';
};
if(navigator.userAgent.includes('Safari') && !navigator.userAgent.includes('Edge'))
console.log('%c', r);
}, 50);
然后搜索找到
isLatestHEICORE
回到过去
下载附件 去掉最上面的
q
ed
ed
w flag.txt
我是谁
第一关
请求页面 会发现 status code 是
418 I'm a teapot
第二关
提示换种请求方式, 使用 POST 得到
<p>The method "POST" is deprecated.</p>
<p>See RFC-7168 for more information.</p>
然后根据 RFC-7168 使用 BREW 请求服务器 拿到 flag
这里据大佬将可以使用 curl 进行请求, 我直接使用 nc 发了请求 233
猫咪克星
就是一个自动应答, 我用 nodejs 写了一个脚本来完成
const process = require('child_process')
const nc = process.spawn('nc', ['202.38.95.46', '12009'])
const calc = (payload) => {
const t = process.spawnSync('/usr/bin/python', [], {
input: `print(${payload}); exit()`
})
return t.stdout.toString().trim()
.replace(/\r/g, '')
.replace(/\n/g, '')
}
nc.stdout.on('data', chunk => {
let data = chunk.toString().trim()
if (data === 'You have only 30 seconds') {
return
}
console.log(`<== ${data}`)
data = data.replace(/exit\(\)/g, "0")
.replace(/sleep\(100\)/g, "sleep(0)")
.replace(/__import__\('os'\).system\('find ~'\)/g, '0')
.replace(/\\x1b\\x5b\\x33\\x3b\\x4a\\x1b\\x5b\\x48\\x1b\\x5b\\x32\\x4a/g, '')
.replace(/print\(''\)/g, '0')
console.log(data)
const result = calc(data)
console.log(`===> ${result}`)
nc.stdin.write(result)
nc.stdin.write('\r\n')
})
期间会运行 sleep 和 find 啥的指令, 有大佬直接用 py 实现的时候 eval 限定了 import 内容可以绕过这部分
猫咪电路
就是土球写的一个 Minecraft 地图, 照着做就好了
猫咪银行
这题按正常流程是无法拿到 20 CTB 的, 但是在 理财产品 A1 中有 integer overflow 的问题, 在时间处输入一个较大的数字 (我使用的是
154748364800000000