IT运维管理,创造商业价值!
中国IT运维网首页 | 资讯中心 | 运维管理 | 信息安全 | CIO视界 | 云计算 | 最佳案例 | 运维资源 | 专题策划 | 知识库 | 论坛

利用结构异常绕过溢出保护攻击(1)

2006年04月17日
/

像溢出攻击,虽然已经是发展了那么多年了,但其shellcode编写也差不多是那么一个模式。写出汇编,编译,得到二进制代码,修改汇编,编译,再得到二进制代码,最后用\xaa\xbb的形式把二进制代码写到攻击程序里面。这在unix等下面一般shellcode要求比较简单,那还勉强过得去,但如果应用限制,shellcode代码不能包含一些特殊字符那又是一个麻烦的调试、修改过程。还有溢出攻击的溢出点、怎么跳到shellcode,虽然unix下面已经比较多的办法了,但感觉也没怎么统一的考虑过,很多人也没有去理解溢出攻击。还有溢出过程形参被覆盖后不能返回的情况,也没怎么仔细考虑。

个人的理解溢出攻击只是通过外部条进改变了程序原来流程,而考虑改变程序流程的办法就不只是溢出了,溢出攻击只是一个比较容易让程序流程改变并且按我们意愿运行的比较方便的办法,还有一些边界条进,函数指针等都可能引起程序流程改变。像缓冲溢出覆盖形式参数不能返回的问题,我们攻击是改变的程序流程,这个流程方向不能返回了,那到底有别的流程没有?就可以考虑程序流程的别的线。这点unix下面有信号机制,WINDOWS下面也有异常结构处理,这些都是程序运行的另一个隐蔽的流程。想到这了就可以有解决办法了。其实UNIX等下面发展的比较好的一些保护缓冲溢出的办法很多也相应有了一些破解思路。像堆栈里面加上随机数等的办法,就是检测溢出后不让其返回到溢出代码,这与形参被覆盖不能返回不就是一样的吗。这在windows下面就很好的可以绕过了,UNIX没有具体看代码,还没有实现细节。

下面程序有溢出,但因为检测了变量j,发现有溢出就提示后退出,用于模拟一些溢出保护或者因形参被覆盖不能返回的情况。对于这个程序我们一般的溢出攻击就不能成功。

/*   利用异常结构绕过溢出保护攻击的有问题的例子程序except.c。   vc6.0下编译。   yuange@nsfocus.com

*/#include <windows.h>#include <winsock.h>#include <stdio.h>

int main(int argc, char **argv){  int  j;  char *str;  char buff1[0x0f80];  char buff2[0x1000];  struct sockaddr_in   s_in;  struct sockaddr      addr;  SOCKET               fd ,fd1;  u_short              port; 
int                  result,i,recvbytes;  WSADATA              wsaData;

result = WSAStartup(MAKEWORD(1, 1), &wsaData);  if (result != 0) {  printf("\n SOCKET err!\n ");  exit(1);  }  j=0;  str=argv[0];  if(argc>1) port=atoi(argv[1]);  else port=1080;  fd = socket(AF_INET, SOCK_STREAM,0);  s_in.sin_family = AF_INET;  s_in.sin_port = htons(port);  s_in.sin_addr.s_addr = 0;

bind(fd,&s_in,sizeof(s_in));  listen(fd,10);

i=sizeof(addr);  fd1=accept(fd,&addr,&i);

recvbytes=recv(fd1,buff2,0x1000,0);  if(recvbytes>0){  buff2[recvbytes]=0;  buff2[0x1000-1]=0;            printf("\n recv 0x%x bytes \n",recvbytes);            strcpy(buff1,buff2);  printf("\n the program %s recv :\n %s \n ",argv[0],buff2);  }  closesocket(fd1);  closesocket(fd);  WSACleanup( );

if(j!=0){/*溢出后会覆盖j,被检测到,这就相当于一些溢出保护*/          printf("\n the program %s buffover err !",argv[0]);/*这儿溢出后可能因为argv[0]被覆盖,而发生异常,具体环境这代码可能在前面。这就相当于形参被破坏。*/         exit(1);  }

}


下面是攻击程序:

共2页: 1 [2] 下一页
发表评论请到:http://bbs.cnitom.com

相关阅读

图文热点

Power架构产品创新 IBM推动其本土化发展
Power架构产品创新 IBM推动其本土化发展自从1990年,IBM推出基于RISC系统的新产品线RS/6000(现称eServer p系列)之后,...
WAF:高校Web应用安全守护者
WAF:高校Web应用安全守护者最近几年高校网站被攻击的事件时有发生,造成了不良影响,因此越来越多的高校开始...

本类热点