借助svcudp进行栈迁移
Mon May 05 2025 08:57:32 GMT+0800
在libc.so.6文件中存在一个被去符号的函数——svcudp_reply,它含有如下gadget:
mov rbp, [rdi+48h] ; 写入rbp的地址
mov rax, [rbp+18h] ; 确保rbp+0x18的位置,是leave ; ret的.text地址的地址-0x28(有点拗口)
lea r13, [rbp+10h]
mov dword ptr [rbp+10h], 0 ; 确保rbp+0x10位置可写
mov rdi, r13
call qword ptr [rax+28h] ; 调用leave ; ret
在IDA中可以通过搜索汇编指令搜索到,推荐搜索以下两条指令,它们的搜索结果是最少的:
mov rbp, [rdi+48h]
lea r13, [rbp+10h]
在rdi可控且写入数据的地址可获得的情况下,可以借助此gadget栈迁移到任意位置。
在只能执行一个函数的情况下,十分适合使用此方法,继续执行ROP调用更多函数。