接下来 一切顺利 就是数据的重定向啦 吧EIP里面内容改成ESP的地址 cpu就会读取ESP里面的代码啦 我们只需要将shellcode的代码存放在ESP中 在cpu就会理论上到这个ESP里面读取内容开始执行后门程序就开始 达到控制目标机器上啦 看似很简单 但是实际情况是非常复杂的 因为每次计算机重启的时候 或者程序运行的过程 进行地址分配的过程中这个esp的地址是变化 有可能一样 有可能不一样
理论上地址是随机的原因就在可能这台计算机处于空闲的状态 较为理想的状态
变通的思路
在内存中找到操作系统固定的这一模块 xp自带的模块 而且还在内存中固定的这一模块 无论重启 或者进行多少次程序 都不变
系统模块里面有大量的指令 就有可能出现JMP ESP的指令 汇编代码
目的是找到系统固定不变的模块 在找到系题掉用JMP ESP 指令地址的地址 因为他的地址是固定不变的()饶了一个湾子
就是在EIp里面存放内存地址固定不变的系统模块里面JMP ESP的指令所在的内存地址在执行esp里面代码部分内容 多调用一部
在内存可能存在好几跳 需要monna这个脚本
输入其他调试默认脚本
首先要关心的就是rebase :表示操作系统重启 重启之后表示操作系统内存地址是否发生变化
发生变化就是true
后面就是内存保护机制 要选的那个模块最好就是没有被操作系统保护的模块 如果受到保护 每一次调用这个地址 都会随机生成地址 没办法确定下一次这个地址在什么地方 就 必须是没有办法利用这个漏洞 os动态调用库必须是true· 我们要必须要选择每一个操作系统自带的库 只有这样才能在不同的机器上 每个机器都有这样的库 那我就可以好利用
下一步就是查找这个模块里面有没有JMP ESP这个命令 如果没有 那我们也就利用不了
把汇编指令转换成为二级制因为这些都是底层 每一个字节都要用\x表示
找不到就得想起他办法做溢出啦
如果说 应用程序收到deb的保护 那么在寻找模块 的基地址存放的内容 必须有 RE 权限的 否则后面的跳转就不会执行
找到这个地址 那么就设置一个端点 程序执行到这个断点 由用户决定程序下一步如何进行判断
目的 为了通过py的脚本向程序法溢出的代码看看溢出的代码跑到内存的地址是不是正常的进行跳转