32

CCST-CTF 2019 部分 Writeup

 4 years ago
source link: https://www.tuicool.com/articles/ymQZj23
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

终于咱也入了CTF坑23333 不多说,先上wp。

Misc

刘翔

比较明显的栅栏密码,看第一个f到l,所以6个一组。

刘翔跨栏可还行。

爆破一下?

发现有密码,无脑先修复一下,发现没用。拖进aapr,然后惊喜的发现我裂开了(指默认暴力和字典都不行)。之后打开发现说明密码为5位数字,

e6B7zm3.png!web

然后就完事儿了。

base64?

base64果然不行(

不过看到给出了字母表,于是百度了下base64的原字母表,写个py脚本映射就好。

红石电路

丢尽MultiMC,然后发现是简单的门电路。甚至还好心的给了不同门的实现。

从结果端逆推,拿着红石块放到红石线上做标记(可以点亮红石),然后就推出来了(

我觉得可以做个强模(逃

drcom

丢进InnoExtract,发现里面是个.c和其编译后执行文件。

QJvqyuJ.png!web

strings找到的密码也不对,然后就没思路了。

我 裂 开 了。

仔细阅读发现,答案在EULA里……而且整句话也不含flag,这就更隐蔽了。

这里注意提交要带上最后的句号。真狠啊。

按照Misc解题自动机(?),先丢进ps建两个图层,把混合模式从上到下滚动一遍。然后丢进BeyondCompare,调节容差看对比。可惜的是两种都没结果。

然后丢进010Editor文件比对,终于发现有点不同。于是将两段内容复制出来,发现xor后就是flag。

RE

BabyRE

3Ynu63R.png!web

搜索字符串,找xref到引用处。

i6BrYri.png!web

写个脚本异或就完事了。

疯狂点击

这题做了两次,开始是队友做的,连点器点出来了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

主要是让条件成立。

JRf2qur.png!webAbyaiaU.png!web

阅读代码发现,可以通过service来达到目标地址。所以:

auth 233  service 23333333333333333333  login

然后就可以cat flag.txt(也可以先ls -al看看是什么文件)

easyprintf

虽然最后也没过,但是搞了一上午很自闭,贴下代码(

https://pastebin.com/30wqb7yC

Re:从零开始的pwn学习.jpg

Web

php代码审计

阅读代码,发现要绕过三层判断条件。第一个可以用数组,第二个也可以用数组,第三个就不能了。

然后发现可以科学计数法,然后就没有然后了

aIv2MzM.png!web

所以说动态类型不好啦((

这个加密见过吗

整个页面也只有favicon.png作为线索了。而且这张图还让我的postman裂开了。

bEvmmey.png!web

丢进010editor,结合我裂开的postman,果然是因为ihdr的crc校验裂开了。首先想到修复宽高,python一跑发现是高度不对,改成0x0462就完事……诶等等图里面竟然是一个链接

打开发现一大堆颜文字,还好原先见过,这其实是aaencode(参见: 论如何正确的收一个新年解谜红包 ),原理简单说就是字符串构造和eval。最简单的方法,就是开个网页F12丢console然后

uENZVzn.png!web

就没有然后了。

玩的还是很开心哒~这次CTF,有幸和@某昨和凡神组队,两位队友都贼强。虽然赛前都说没接触过,但是赛程A题都超快的w。说实话,刚开始 队友光速做掉了web压力还是很大的Orz。最后,也很开心能拿到rank1。

mIvARre.png!web

另1/3的wp可以看@某昨的博客: http://www.yesterday17.cn/2019/09/28/ctf1/

如果还有什么特别印象深刻的……

“什么东西会背叛你呢?金钱会,女人会,但是pwn不会,不会就是不会,怎么学都不会”.jpg


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK