avatar

nctf wp

Nctf wp

RE

打开exe文件后,放进dbg以及ida中,进行检索
upload successful
upload successful
进行操作后找到主函数,来进行分析操作
upload successful
可以看一下主函数的功能,进行分析
upload successful
可以看出来v25,v27,v28,v29,v30,v31在数据内存中的字符串检索
upload successful

1
2
3
4
5
6
7
8
v26 = 'gube'
v24 = 'uC\TN swodniW\tf'
v25 = 'DeA\noisreVtnerr'
v27 = 0
v28 = '2346woW\ERAWTFOS'
v29 = 'W\tfosorciM\edoN'
v30 = 'tnerruC\TNswodni'
v31 = 'gubeDeA\noisreV'

先是得到这些字符串但是不知道是干什么的往后面看,看看有什么用
看到后面有一句是
upload successful
可以看到v6=v21的内容,返回来看,上面函数定义的时候是引用的类型的
upload successful
定义了指针类型的v6和一个数组的v21,c语言中的地址指向是引用,相当于起了个别名

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
do
{
switch ( v21[v9] )
{
case 1:
--v1;
v12 -= '\a';
--v11;
break;
case 2:
++v1;
v12 += '\a';
++v11;
break;
case 3:
--v2;
--v8;
--v10;
break;
default:
if ( v21[v9] != 4 )
exit(0);
++v2;
++v8;
++v10;
break;
}
if ( *(_DWORD *)&asc_140003350[4 * (v12 + v8)] == 1 )
{
sub_140001020("You lost", v10, v11);
exit(0);
}
if ( v11 > 6 || v10 > 6 )
{
puts("illegal access");
exit(0);
}
++v9;
}
while ( v9 < 26 );
if ( *(_DWORD *)&asc_140003350[4 * (v2 + 7i64 * v1)] != 99 )
_exit(0);
puts("You win!");
sub_140001020("flag{", v13, v14);

代码中我们来分析功能

以可看到上面的switch case 进行的操作是对v2 v8 v10 v11 v12进行的改值的操作,我们又看到了asc的函数,应该不难分析这里是汇编的一个操作,后面有是个值,我们进去查看:

upload successful
看到里面有值,我们进行记录:

1
2
3
4
5
6
7
8
9
10
8 1 0Eh 0Bh 7
10h 1 0Bh 0Fh 0Fh
1 1 9 1 1
1 1 1 1 0Bh
1 0Ch 0Ch 8 0Eh
1 8 1 8 1
1 0Ch 9 0Eh 1
0Dh 8 0Bh 1 1
1 1 1 1 9
0Ah 9 9 63h

int一个占用4个字节,所以可以得出来以上的字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  if ( *(_DWORD *)&asc_140003350[4 * (v12 + v8)] == 1 )
{
sub_140001020("You lost", v10, v11);
exit(0);
}
if ( v11 > 6 || v10 > 6 )
{
puts("illegal access");
exit(0);
}
++v9;
}
while ( v9 < 26 );
if ( *(_DWORD *)&asc_140003350[4 * (v2 + 7i64 * v1)] != 99 )
_exit(0);
puts("You win!");
sub_140001020("flag{", v13, v14);

我们可以得出来4×(v12+v8)的位置不能等于1 4×(v2+7×v1)位置等于99

upload successful可以看出来最后面的位置,的63h在10进制的位置等于99,所以就是48的位置
根据switch里面的case可以得到我们输入的东西为‘1 2 3 4’我们去看规律:

1
2
3
4
1:是v1-- v12-7 
2: 是v1++ v12+7
3: 是v2-- v8--
4: 是v2++ v8++

我们v1 v2 v12 v8的初值为0,v2+7×v1=12,不难分析出来v1等于1,v2等于5

不可以为1 6 10 11 13 14 15 16 17 18 20 25 27 29 30 34 38 39 40 41 42 43

可以为0 2 3 4 5 7 8 9 12 19 21 22 23 24 26 28 31 32 33 35 36 37 44 45 46 47 48

得出来v1 v2序列244444

2 44 1 444 2222 33 1333 22 4424444
检查一下得出来了flag:
upload successful

cacosmia

首先我们打开以后我们发现了一个cap一个文件我们直接放进wirshark中进行分析
upload successful
我们去看一下查看wifi那一套套路:

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
31
32
33
34
35
36
#查看essid
root@kali:~/Desktop# aircrack-ng cacosmia.cap
Opening cacosmia.cap
Read 4276 packets.
# BSSID ESSID Encryption
1 1A:D7:17:98:D0:51 mamawoxiangwantiequan WPA (1 handshake)
Choosing first network as target.
Aircrack-ng 1.3
Passphrase not in dictionary
Please specify a 151/235 keys tested w).
Time left: 0 seconds 64.26%
Quitting aircrack-ng...
#爆破密码
root@kali:~/Desktop# aircrack-ng cacosmia.cap -w /usr/share/wordlists/fern-wifi/common.txt
Opening cacosmia.cap
Read 4276 packets.
[00:00:00] 16/688 keys tested (1029.20 k/s)
Time left: 0 seconds 2.33%
KEY FOUND! [ 12345678 ]

Master Key : B4 2C 77 C0 A8 F4 E6 E9 9F 85 1B ED 7B 3F 5A 91
3C AA D4 42 B9 6D 5C D2 A1 90 E3 F9 75 B3 6D 9F
Transient Key : 8B D7 4A 1F 2A 0D B7 40 C1 3B BC C9 13 60 46 E5
49 4E 9B 9A AF BD E3 89 33 5A 73 C8 95 AC 53 94
AF 92 D1 D9 ED E4 B2 AF 40 C1 03 D8 98 2D 8A 90
00 58 39 CF C2 9E B9 80 A2 D5 86 57 9A 00 00 00
EAPOL HMAC : D8 97 A1 FD CF F2 87 89 6A 19 EF 14 44 33 E0 3C
#用essid和密码解密流量包
root@kali:~/Desktop# airdecap-ng cacosmia.cap -e mamawoxiangwantiequan -p 12345678
Total number of packets read 4276
Total number of WEP data packets 0
Total number of WPA data packets 685
Number of plaintext data packets 0
Number of decrypted WEP packets 0
Number of corrupted WEP packets 0
Number of decrypted WPA packets 538

我们把解密之后的流量包放进wirshark
upload successful
我们去追踪tcp流向分析
upload successful
发现里面有一个png图片我们把这里面的信息放进winhex中去掉放进去的http首部信息
upload successful
得到一个图片
upload successful
找到了一个加密的压缩包,在原来的数据里面的cookie里面是一个base64加密过来的
upload successful
告诉我们密码是一个网站自己ping过的一个网站,我们首先会想到ICMP,UDP,TCP,DNS等协议我们在里面进行DNS的检索
upload successful
密码得到打开压缩包
upload successful

Author: L0x1c
Link: https://l0x1c.github.io/2019/11/22/2019-11-22/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶