最近就遇到了这样的怪题目,本地劫持指针到execve()的int 80系统调用的时候,本地会卡住,远程却可以,我的建立的shellcode是这样的:
1 | push 0x68 |
之后调试的时候发现,int调用的时候envp参数有点奇怪,本来应该是0,现在却是The_Pursuit_of_happiness
这个时候才想起来我envp没有清空,也就是少了一条 xor edx,edx指令,之后加上去后本地就能打通。
1 | push 0x68 |
综上所述pwn本地打不通远程打不通的问题原因之一是由于环境变量指针不一样,远程的环境变量指针可能恰好符合这个程序,而本地的不符合,所以要清0。
所以要按照envp=0调用。
1 | execve(path='/bin///sh', argv=['sh'], envp=0) |
说些什么吧!