注:学习笔记来自安全牛课堂。感谢倪群主,感谢苑老师!
上面测试有溢出漏洞,下面就是精确到哪里有溢出了。
下面的脚本得多留意一下。
运行上面的脚本之后,看下面的图:
另外,这里有点奇怪的是,只有发送4379个字符才会溢出,而不是说超过4379就能溢出。和之前的windows差距比较大。windows是只要超过一定的数值,就能溢出了。所以,这里要注意。还有,如何知道是4379个字符是溢出的???(crossfire程序的服务比较奇怪,必须要是一个固定的数值,才会溢出。至于怎么测试到时4379的,没有细说)
我估计,是利用唯一字符法,先找到EIP里面的地址,然后,逐步测试ESP里面的值。由于是四个一组,每次测试都是都是加4,4368+4=4372,4372+4=4376,这里已经到了ESP的前四个字符了。后面再测试4380估计失败了。于是又减少字符量,测试到4379刚好溢出成功。EIP也准确写入四个字符。我估计是这么回事。
由于必须精确字符数量,这就导致了在ESP中只能存7个字符,存7个字符又无法写shellcode。所以,思路是找到一个固定的地址,能存入shellcode的地址。因此,现在的问题就是如何找到这个地址。