通过这个漏洞进行缓冲区漏洞测试 pass存在缓冲区漏洞 对寄存器中内容作出精确的修改 修改的寄存器EIP ESP EDP EIP 是重点关注的eip eip
eip里面存放的是cpu下一次要执行的指令地址 执行里面的代码
发现eip 足够大 修改EIP的内容成为esp的地址
同时将esp里面的内容修改成为代码 然后cpu读取eip的地址 就会执行esp里面的代码内容 可以通过脚本来找到shellcode的代码空间
寻找可以存放shellcode的内存空间 尝试在esp里面存放shellcode的代码
修改esp里面的内容 假设esp里面可以存放3500个字符 看看到底有多少个c字符可以到达esp寄存器里面 判断esp寄存大小能不能存放shellcode的的大小
通常一般小巧的shellcode也需要300个字节左右
估计思路
坏字符 :z在做模糊测试 不同的协议 不同的应用程序 不同的类型的漏洞在做模糊测试找到他的漏洞 尝试对他攻击的过程中 因为程序和协议的不同有一些个字符是在缓冲区里面不能使用的 这些字符因为程序 和应用程序不同也就不同 有的协议可能过滤0a 或者过滤0b 或者遇到0c就崩溃 所以 这些字符我们成为坏字符 是不能出现在缓冲区内存空间里面的 另外也有一些字符在缓冲区里面是有特殊的定义的 这些字符的出现困可能代表着一种用途 所以 向esp注入shellcode的必须要将这些坏的字符找出来 避免shellcode里面出现坏字符 导致shellcode 不能正常工作
所以 挑出来
已知的
查看 计算机寄存器里面存放的是ascll码 16进制数表示 不同的编码表示不同的字符 而ascll编码在计算机中一个字符有一个字节来表示 一个字节用二进制表示0000 0000 最大1111 1111
之间有多少种可能字符 有二进制字符计算一下 2的8次方+2的0次方 一共是255中可能的字符加全0 256中可能都是字符 通过脚本将这256个字符全部打到esp寄存器里面 看那些字符被过滤 出现问题 回头写shellcode 避免出现这些字符
没有出现切后面字符都没有代表这个字符不能出现在缓冲区里面 另外一种就是没有出现但是后面的字符出现代表被过滤掉啦