近日开始学起了漏洞挖掘&分析,随着《Exploit 编写系列教程》来学习,首先第一章有关EasyRMtoMPConvert.exe的栈溢出,用mona来产生pattern定位时,发现我的ret_eip在26084偏移处,而教程中ret_eip在26094偏移处,开始没太上心。后面动态调试,探究了一下它的溢出过程,有如下发现
- 左边的地址标签代表分配空间的顺序,依次从底向上分配4914h,8918h字节空间;
- 之后第一次从文件中读取前400h字节到000FF748处,第二次将文件路径与文件内容组合起来复制到000F9128处(以00结尾),第三次再将000F9128处的内容复制到000F6E20处。
- 最后,收回8914h字节的栈空间并retn 4,此时000FF728处的内容已经被第二次000F9128复制覆盖了,所以这才使得我们能够栈溢出。但是,因为此次复制带有文件路径,所以无法确定文件中固定偏移内容会处于000F728处,这也导致了我们的溢出无法随机产生。
思考:当时有想用01010101之类重复单字节内容来覆盖ret eip,以控制eip到shellcode,可是01010101处太远并且与当前栈不在同一段...(各位师傅如有好方法,请不吝赐教~~~)