应该算比较简单好利用的一个应用了。shellcode通过环境块等传递,就可以比较精确的找到shellcode的位置。这样只需要改写一个函数指针内容,让其指向shellcode就可以了。(2)、可以设置对一些可用于传递的shellcode域的读写断点,发现如果上面两条
f指令执行完后有如leaebxebp0xxxpushebxcalldwordptr0xxxxxxxxx这样的代码,并且那ebx指向可传递shellcode的域,就能方便的利用,这样两个指针就可以分别选取0xxxxxxxxx和一个具有jmpebx功能的地址。注意可能会要考虑前面两条指令或者那链表操作时候可能发生的异常。(3)、利用p1、p2自身信息定位。能够覆盖p1、p2一般p1、p2前面会有一段空间能够控制,如果覆盖的长度可以控制。可以考虑保留p2的高位,改写其低位让起指向shellcode。这个要注意这时shllcode的前面4字节会被调用函数入口地址覆盖,所以不是所有会调用的函数入口都可以用。
中国网管联盟
(4)、利用SEH指针。其实那双向链表经常是abp1p2ab的形式,所以把SEH链首fs0,位置一般在ds7ffxxxxx同一系统比较固定覆盖,然后利用p2原来的值。这个有很多问题,跳到p1后,p1不是可控制代码,还有系统的SEH处理程序会检测fs0首指针,如果不是指向堆栈位置,拒绝执行。主要是这个思路看能不能有别的办法。这个又考虑了覆盖fs0首指针的低字节,这样异常结构链表位置就发生了变化,如果指向的另一块堆栈位置能够控制,就可以利用伪造异常链表的办法获得控制。其实单字节的溢出覆盖ebp低字节的利用原理也是差不多。而堆栈里面,往往会有动态BUFF拷贝过去的数据可以控制,所以这个要求也是容易办到。现在确定的是这个指针的位置不是固定的,有一定的变化范围。可能是0x7ffArray3000、0x7ffArrayb000这样的值,但变化不是多大。(5)、改写PEB指针,跳转到ret0xxxxx这样的指令处,通过改变堆栈指针的办法,利用堆栈里面的可控制数据得到控制。三、实际应用例子。asp的分块编码堆溢出,其实这个漏洞不应该叫分块编码漏洞,因为漏洞原因不在于分块编码。上面(2)、(3)基本上都是可行的,但因为asp的特殊之处,又使得上面的bbsbitsCNcom(2)(3)对于这个漏洞不好使用。、1、对于(2),由于asp的那段溢出没安装好异常处理程序,所以在那链表结构的处理过程中一般会发生异常,从而程序结束。如果精心构造覆盖p1、p2和用于链表处理的标记、长度的数据,可以不会发生异常,但处理完后马上又被别的不容易控制的数据覆盖,再次导致r