pwn1
针对Alarm clock进行处理
- 修改程序的16进制数值
- Hook函数
将alarm函数替换掉
在linux下使用命令 sed -i s/alarm/isnan/g ./pwn1
检查保护机制
checksec --file ./pwn1
NX 数据保护权限 可写的不可执行
查看编译
file ./pwn1
./pwn1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=5243dd9fb1db881e7845015ab0b1d643857ba43b, stripped
动态编译
确定使用return to library
- 确定libc的基地址,通过puts函数打印.got.plt地址中的值,输出实际地址 libc_base = address – offset
- 调用libc中的system函数 构造getshell
- 一个Rop是无法完成的,所以需要两个rop,第一个rop泄露基地址,第二个rop构造getshell
使用ipython Tab键自动补全
from pwn import *
p = ELF(‘./pwn’)
hex(p.symbols(‘puts’))
hex(p.got[‘__libc_start_main‘]) #获取.got.plt 地址