Assembly attacklab phase2缓冲区溢出

Assembly attacklab phase2缓冲区溢出,assembly,buffer-overflow,Assembly,Buffer Overflow,我必须做一个攻击实验室。我需要在缓冲区溢出的情况下运行touch2()。我必须将代码作为攻击字符串的一部分注入,以便使程序指向函数touch2()的地址 当我查看getbuf时,我看到它有0x18(24)个缓冲区 然后我使用hex2raw创建并运行phase2.raw文件,但没有利用漏洞 Cookie: 0x6eb933c2 No exploit. Getbuf returned 0x1 Normal return 为什么没有发生缓冲区溢出?使用调试器单步执行程序时会发生什么情况?更重要的是

我必须做一个攻击实验室。我需要在缓冲区溢出的情况下运行touch2()。我必须将代码作为攻击字符串的一部分注入,以便使程序指向函数touch2()的地址

当我查看getbuf时,我看到它有0x18(24)个缓冲区

然后我使用hex2raw创建并运行phase2.raw文件,但没有利用漏洞

Cookie: 0x6eb933c2
No exploit.  Getbuf returned 0x1
Normal return

为什么没有发生缓冲区溢出?

使用调试器单步执行程序时会发生什么情况?更重要的是,堆栈是否位于固定位置(即禁用ASLR)?@MargaretBloom当我使用gdb运行它时,使用ASLR。touch2()的原始地址是0x0000000001e0a,但是如果您通过gdb检查它,它将更改为0x555e0a。但是如果您单步退出
getbuf
,会发生什么?行刑的地点在你期望的地方吗?我这样问是因为使用ASRL时堆栈的位置是随机的(除其他外)。@MargaretBloom我一直通过gdb运行它,但%rsp的位置没有改变,这是因为gdb在调试时禁用ASRL。如果在运行程序时有ASRL,则该方法无法工作。使用ASRL利用堆栈溢出至少需要一点ROP(二进制文件还具有CFE特性),这并不容易。仔细检查老师的指示。您没有提供足够的上下文来回答。使用调试器单步执行程序时会发生什么情况?更重要的是,堆栈是否位于固定位置(即禁用ASLR)?@MargaretBloom当我使用gdb运行它时,使用ASLR。touch2()的原始地址是0x0000000001e0a,但是如果您通过gdb检查它,它将更改为0x555e0a。但是如果您单步退出
getbuf
,会发生什么?行刑的地点在你期望的地方吗?我这样问是因为使用ASRL时堆栈的位置是随机的(除其他外)。@MargaretBloom我一直通过gdb运行它,但%rsp的位置没有改变,这是因为gdb在调试时禁用ASRL。如果在运行程序时有ASRL,则该方法无法工作。使用ASRL利用堆栈溢出至少需要一点ROP(二进制文件还具有CFE特性),这并不容易。仔细检查老师的指示。你没有提供足够的上下文来回答。
48 c7 c7 c2 33 b9 6e 48 # bytecode of exploit code, padding 0x18
b8 0a 5e 55 55 55 55 00 
00 50 c3 00 00 00 00 00 
38 11 64 55 00 00 00 00 # #address of rsp - 0x38
Cookie: 0x6eb933c2
No exploit.  Getbuf returned 0x1
Normal return