注:学习笔记来自安全牛课堂。感谢倪群主,感谢苑老师!
前面一节中,最大的问题就是如何找到能写入shellcode的内存地址?
由于ESP只能存入7个字符,所以无法写入shellcode,因此只能在其他几个寄存器中逐个寻找。
但是,这里做实验的机器找到了能存入shellcode的内存地址,如果换个环境,地址就又会发生变化。
所以,得想方法每次都能跳转到EAX寄存器中。并且还要偏移12个字节。一旦没有偏移,覆盖了EAX原有的12个字符,那么就有可能会出错。
开始运行脚本,然后去调试器上看是否成功。
到目前为止,还是比较理想的。之前在windows上的时候,用的是mona脚本,去找系统模块,在系统模块里面找汇编指令。但是,在linux环境中,只能用下面这种方法了。
点击之后,就到了下面这个界面:
由于是ESP和EIP之间的跳转,所以上图得设置一下。同时那里选择第一行的原因我估计是可读可执行。。。
根据这个指令的内存地址。进行跳转。
总体思路如下:
溢出到EIP----精确溢出EIP----将ESP中溢出"偏移12个字符 JMP EAX 并且 \x90\x90"(因为一旦溢出了EIP范围,就会溢出到ESP中,但是现在还无法百分百到达ESP寄存器中)----将EIP中存储数据溢出成“JMP ESP指令”的地址----下面,就差找出坏字符和进行shellcode的编写了。