我正在尝试 ROP 漏洞——我正在尝试使用 ROP(而不是 libc 调用)进行 mprotect 系统调用,以尝试使缓冲区可执行。我尝试跟踪服务器进程并运行漏洞利用程序,结果发现错误如下:-
mprotect(0xbffdda10, 65536, PROT_READ|PROT_WRITE|PROT_EXEC) = -1 EINVAL(Invalid argument)
后来,我尝试了一个不同的地址0x08048000
,我可以看到调用有效(strace 输出和 /proc/pid/maps 确认了这一点)。Given a buffer address how could I guess/find the correct page address that I could use to make a call to mprotect.
我想我找到了发生这种情况的原因。ASLR 已启用并且从 0x08048000 开始的页面不会更改地址。但是,与缓冲区对应的页面会更改地址。缓冲区地址可能会泄漏——因此我尝试检查页面开头和缓冲区地址之间的差异是否保持不变,但事实并非如此。