文章目录[隐藏]
终于咱也入了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也是不错了。
非技术的路过。