手痒,花半天玩了下,剩下的就都卡住了。
做了签到、2048、一闪而过的 Flag、从零开始的记账工具人、233 同学的 Docker
签到
打开题目,能看见这样的一个页面,包括一个可拖拽 range 和一个提取 button。那我们现在可做的是,拖拽 range 到 1?
那么恭喜你,将触发一个“没想到吧!”的 console.log()
,生怕你没有被惊喜到。再看看源代码?
// 也就是说,如果 range 为 1,则触发一个 log,和值的修改。所以别费力拖和用方向键了...
if ($('#number')[0].value.toString() === "1") {
console.log('没想到吧!');
$('#number')[0].value = 1.00001;
if (prevVal == 1.00001) $('#number')[0].value = 0.99999;
if (prevVal == 0.99999) $('#number')[0].value = 1.00001;
}
俗话说,万事先试,不试怎知?欲知后事如何,点下提取试试?
看到 URL 了吧,出题者也怕难为各位的眼神了,故意摆了个 number 的 query?
不改怎么知道是不是故意的,修改为 ?number=1
后回车。
欧了,结束本题。
2048
打开题目后,我先玩了几把 2048,但是由于太菜了始终没有靠实力解题XDDDD...
不过我想,这题如果真的是考游戏能力的话,应该不会归类到 Web 吧,于是二话不说,打开看看源代码先?
嗯,HTML 写的挺工整。不过都 0202 年了,还有人会把 changelog 注释在这?
为了满足下好奇心,打开这个文件,看看它到底修复了啥。
// 你细品,这个赢法也太 bug 了吧,就这还写 changelog...
if (won) {
url = "/getflxg?my_favorite_fruit=" + ('b'+'a'+ +'a'+'a').toLowerCase();
} else {
url = "/getflxg?my_favorite_fruit=";
}
所以我就假装赢了,把上面这个 url 贴进去看看。
对了,要是不知道这个 toLowerCase()
的结果是啥,带到 Console 里跑一下就清楚了。不过之前貌似在微博看过这类梗,所以上手直接就是一个 banana。
一闪而过的 Flag
这题的 Bug 之处,是点击下载后,是一个 .exe 文件...
当时手头没有 Windows 系统,所以下次,请出题者好好考虑一下卑微的 macOS 用户。
找来了个 Windows 10,你可以使用 xbox 的屏幕录像,也可以用手机拍视频。
反正条条大路通罗马,不管是优雅的城镇路,还是破土路,它都是路。
(鉴于我手头又没有 Windows 环境了,所以各位脑补下结果。
(对了,要区分好 i
、l
、I
和 1
,你可以用火眼金睛,也可以讨巧地修改下 cmd 的字体。总之随便你,只要你填对了 flag,就牛逼。
从零开始的记账工具人
本来以为一个 Excel 表格有啥难度,但是打开就懵了。
原来金额大写的那堆单元格,不是数字直接设置样式渲染的,而是份量很足的、真实的中文大写金额文字...
好吧,先找了个 JS 金额大写转小写的脚本,再找了个空行转数组的工具。一手进,一手出。
后面再把输出的数字们贴回去 Excel 里,乘上数量再算个 SUM,结果就出来了。
(我这个是傻办法,Node 一把梭更简单,当时脑袋没开光 😀️
由于时间原因,后续的代码啥的之后补上,但也有可能就 🕊️ 了,这些都 谷饹 / 拜度 得到。
233 同学的 Docker
这道题困了很久,一直的思路是如何把 /bin/sh -c rm /code/flag.txt
这层 layer 删除,但是看了很久,没有这种解决方法。
但我在一遍又一遍的重新拉取中,察觉到每层 layer 都是需要下载并在本地做 diff 的,这就说得通了,可能这个文件还缓存在某个角落。
于是我开始了下面这行操作:
find / -name flag.txt
会发现有两个符合的文件,接着一个个 cat
就好。
Summary
这些题目严格意义上,不算是正经的 CTF。(正经 CTF 可比这个无聊多了)
玩完这些,看看 dalao 们的 WriteUp。
我只能说:
我不敢了... 下次还来!