
这段代码中while有一个无法退出的循环,不能通过ROP获取flag,只能在代码中执行open函数。
我们希望构造这样的代码来拿到flag:
int fd = open("flag", READONLY);
read(fd, buf, 100);
print(buf);
在程序中寻找可以利用的修改rax、rdi、rsi、rdx的语句(64位程序通过寄存器传参,rax用于系统调用):

具体能利用的地方在:
0x4008a1 : pop rsi ; pop r15 ; ret
0x4008a3 : pop rdi ; ret
0x4006fe : pop rdx ; ret
0x4006fc : pop rax ; ret
0x4008ae : add byte ptr [rax], al ; ret
本文探讨如何通过在64位程序中巧妙利用pop指令修改rax、rdi、rsi、rdx寄存器,实现对'flag'文件的读取,避开ROP攻击限制。着重解析0x4008a1-0x4008ae的代码片段,以技术细节展示如何在特定环境下获取flag。




被折叠的 条评论
为什么被折叠?



