文章目录 [隐藏]
终于咱也入了 CTF 坑 23333 不多说,先上 wp。
刘翔
比较明显的栅栏密码,看第一个 f 到 l,所以 6 个一组。
刘翔跨栏可还行。
爆破一下?
发现有密码,无脑先修复一下,发现没用。拖进 aapr,然后惊喜的发现我裂开了(指默认暴力和字典都不行)。之后打开发现说明密码为 5 位数字,
然后就完事儿了。
base64 果然不行(
不过看到给出了字母表,于是百度了下 base64 的原字母表,写个 py 脚本映射就好。
红石电路
丢尽 MultiMC,然后发现是简单的门电路。甚至还好心的给了不同门的实现。
从结果端逆推,拿着红石块放到红石线上做标记(可以点亮红石),然后就推出来了(
我觉得可以做个强模(逃
drcom
丢进 InnoExtract,发现里面是个.c 和其编译后执行文件。
strings 找到的密码也不对,然后就没思路了。
我 裂 开 了。
仔细阅读发现,答案在 EULA 里…… 而且整句话也不含 flag,这就更隐蔽了。
这里注意提交要带上最后的句号。真狠啊。
Pixel
按照 Misc 解题自动机(?),先丢进 ps 建两个图层,把混合模式从上到下滚动一遍。然后丢进 BeyondCompare,调节容差看对比。可惜的是两种都没结果。
然后丢进 010Editor 文件比对,终于发现有点不同。于是将两段内容复制出来,发现 xor 后就是 flag。
RE
BabyRE
搜索字符串,找 xref 到引用处。
写个脚本异或就完事了。
疯狂点击
这题做了两次,开始是队友做的,连点器点出来了 flag,但是提交发现不是。
首先找入口。不会 mfc 啊…… 所以就断点,然后找到 offset 0xE31154 处。
然后就跟到了 offset 0xE31006 处,F5 之后对代码进行简单处理。(内心 os:为什么连点结果不对,看逻辑没看出来
简单处理就可以丢进 cpp 了,代码如下:
#include <iostream> #include <cstdlib> #include <Windows.h> using namespace std; unsigned char datas[] = {0x72,0xFF,0x0E,0xA5,0x6F,0xC3,0x3D,0x8C,0x53,0xCC,0x0C,0xA3,0x25,0xF0,0x30,0xAB,0x21,0xCC,0x1C,0xF2,0x4B,0xA6,3 ,0xAF,0x44,0xDA,0x0A,0xBF}; int main() { int v4; // ebx int v5; // ebx int v6; // ebx unsigned int magic_number; // ebx unsigned char magic_number_2[4]; char *new_space; // eax char *flag; // esi unsigned int i; // edx int offset; // edi char *flag_i; // ecx char flag_val; // al int v15; // edi int v16; // eax srand(0x3164624Au); for (int i = 0; i < 114514; i++) { v4 = (unsigned __int8)rand(); v5 = ((unsigned __int8)rand() << 8) | v4; v6 = ((unsigned __int8)rand() << 16) | v5; magic_number = (rand() << 24) | v6; } new_space = (char *) malloc(29u); magic_number_2[0] = *(((unsigned char *) &magic_number) + 0); magic_number_2[1] = *(((unsigned char *) &magic_number) + 1); magic_number_2[2] = *(((unsigned char *) &magic_number) + 2); magic_number_2[3] = *(((unsigned char *) &magic_number) + 3); flag = new_space; i = 0; do { flag_i = &flag[i]; flag_val = datas[i] ^ magic_number_2[i & 3]; ++i; *flag_i = flag_val; } while ( i < 28 ); for(int j = 0; j < 28; j++) { // cout << flag[i] << endl; } printf("%s", flag); return 0; }
然后发现结果和连点器是一样的,然后官方就发通知了,然后就没有然后了(
pwn
hof
主要是让条件成立。
阅读代码发现,可以通过 service 来达到目标地址。所以:
auth 233
service 23333333333333333333
login
然后就可以 cat flag.txt(也可以先 ls -al 看看是什么文件)
easyprintf
虽然最后也没过,但是搞了一上午很自闭,贴下代码(
Re:从零开始的 pwn 学习.jpg
Web
php 代码审计
阅读代码,发现要绕过三层判断条件。第一个可以用数组,第二个也可以用数组,第三个就不能了。
然后发现可以科学计数法,然后就没有然后了
所以说动态类型不好啦((
整个页面也只有 favicon.png 作为线索了。而且这张图还让我的 postman 裂开了。
丢进 010editor,结合我裂开的 postman,果然是因为 ihdr 的 crc 校验裂开了。首先想到修复宽高,python 一跑发现是高度不对,改成 0x0462 就完事…… 诶等等图里面竟然是一个链接
打开发现一大堆颜文字,还好原先见过,这其实是 aaencode(参见:论如何正确的收一个新年解谜红包),原理简单说就是字符串构造和 eval。最简单的方法,就是开个网页 F12 丢 console 然后
就没有然后了。
后记
玩的还是很开心哒~这次 CTF,有幸和 @某昨和凡神组队,两位队友都贼强。虽然赛前都说没接触过,但是赛程 A 题都超快的 w。说实话,刚开始队友光速做掉了 web 压力还是很大的 Orz。最后,也很开心能拿到 rank1。
另 1/3 的 wp 可以看 @某昨的博客:https://blog.yesterday17.cn/post/ctf-2019/
如果还有什么特别印象深刻的……
“什么东西会背叛你呢?金钱会,女人会,但是 pwn 不会,不会就是不会,怎么学都不会”.jpg
完全没看懂在写什么 (:3_ヽ)_这就是 dalao 的世界吗
我觉得主要还是因为没有放上题目啦(
恭喜啊,拿到 rank1,也算是一种锻炼自己的机会吧。高中时立下的目标,越学习技术发现离它越远,CTF 也是不错了。
非技术的路过。