文章目录隐藏
终于咱也入了CTF坑23333 不多说,先上wp。
比较明显的栅栏密码,看第一个f到l,所以6个一组。
刘翔跨栏可还行。
发现有密码,无脑先修复一下,发现没用。拖进aapr,然后惊喜的发现我裂开了(指默认暴力和字典都不行)。之后打开发现说明密码为5位数字,
然后就完事儿了。
base64果然不行(
不过看到给出了字母表,于是百度了下base64的原字母表,写个py脚本映射就好。
丢尽MultiMC,然后发现是简单的门电路。甚至还好心的给了不同门的实现。
从结果端逆推,拿着红石块放到红石线上做标记(可以点亮红石),然后就推出来了(
我觉得可以做个强模(逃
丢进InnoExtract,发现里面是个.c和其编译后执行文件。
strings找到的密码也不对,然后就没思路了。
我 裂 开 了。
仔细阅读发现,答案在EULA里……而且整句话也不含flag,这就更隐蔽了。
这里注意提交要带上最后的句号。真狠啊。
按照Misc解题自动机(?),先丢进ps建两个图层,把混合模式从上到下滚动一遍。然后丢进BeyondCompare,调节容差看对比。可惜的是两种都没结果。
然后丢进010Editor文件比对,终于发现有点不同。于是将两段内容复制出来,发现xor后就是flag。
搜索字符串,找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;
}
然后发现结果和连点器是一样的,然后官方就发通知了,然后就没有然后了(
主要是让条件成立。
阅读代码发现,可以通过service来达到目标地址。所以:
auth 233 service 23333333333333333333 login
然后就可以cat flag.txt(也可以先ls -al看看是什么文件)
虽然最后也没过,但是搞了一上午很自闭,贴下代码(
Re:从零开始的pwn学习.jpg
阅读代码,发现要绕过三层判断条件。第一个可以用数组,第二个也可以用数组,第三个就不能了。
然后发现可以科学计数法,然后就没有然后了
所以说动态类型不好啦((
整个页面也只有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