关于从WEB服务器自动下载安装可执行性文件的方法


在介绍方法之前,首先声明我是个纯粹地、不折不扣地、完完全全地ASP菜鸟,如不是客户所迫,我不会有兴趣去折腾这些对我来说毫无意义的东西(或许某些人对这些很感兴趣,那就另当别论了)。当客户要求我做一个从WEB服务器自动下载安装可执行性文件的页面的时候,我第一感觉这不就是个“木马”吗,我立刻居丧到了极点,玩“木马”的都是高手,我这ASP的小菜鸟能搞定吗?抱着试试看的心态,我首先想到的是赶紧的去黑客网站上溜达溜达,找了一大堆网页上的攻击代码,“挡”下来认真地研究了一番(实践证明,我这项“举措”是得当滴),可研究过后虽然对木马攻击原理有了一个大概的了解,可依然不知道该从何处下手。在各大网站上搜索技术文档,询问了身边所有的ASP高手(所谓的),各大王牌网站ASP论坛的斑竹我基本上也骚扰了一遍,最后,打开QQ,但凡是能跟编程扯上关系的,不管熟悉不熟悉也都OUT过去了信息。一天之后,毫无进展,继续居丧。难道哥们儿这次就栽了?难道哥们儿这次阴沟翻船了?难道要遭客户鄙视了?难道老板又要扣奖金了?难道......他奶奶滴!抱着必死的信心在CSDN上发了个贴,上午回帖的基本上跟我一样都是小鸟,下午有个老兄(此人最终成为救命稻草,正所谓,草不在多,一根就行!)回帖说,论坛曾经有人问过这样的问题,也有的解决了,他让我找找,如果找不到了,他再帮我找(好心人哪啊!感动的我眼泪鼻涕差点没滴到键盘上),我找了一遍,这版面里的贴子乌泱乌泱的,找的我眼直花(或许也是我对论坛不熟悉,以前上大学那会,上CSDN论坛也就是逛逛程序人生、灌水版什么的,看看程序员们讨论一下美女,讨论一下工资、发发牢骚什么的)。这不行,把我累死也找不到呀,我又一次厚颜无耻地以跳楼相威胁,恳求那个老兄帮我找。最终,那个如观世音在世般老兄(观世音!男的?女的?郁闷)贴了个地址(救命的仙丹啊!一想到这,我鼻子就发酸)。我前前后后地把帖子看了八遍。得!有门了。经过我不懈的努力,顽强的意志,整合了此前的一些相关资料,扬弃了一些糟粕,萃取了一些木马程序,最终把这玩意儿搞出来了,一盆美味的“萝卜开会”啊。
这会儿底下肯定有人看烦了,有人或许会大喝:孙子,这是哪跟哪呀,你丫跟这扯什么闲淡呢?倒是说不说呀,怎么招,找抽呢?得得得!您息怒!我说还不成吗?人家奥斯卡领奖不也得扯两句闲淡吗,人家那叫“拔份”,小的我不也想拔这个份吗?

从哪开始说呢?得!我说哪儿,您看哪儿吧,最后您再劳神,把他们整合到一起。毕竟小的是个菜鸟,有说的不对的地方,还得请您及时指正,咱谋求共同进步。
首先,想要在客户端直接执行服务器端的程序,必须做一个ActiveX控件(或者有个打包好的CAB文件也行),为的是能够用网页object。看到以前有高手说过,可以写一个没有任何功能的ActiveX控件,小的认为,如果这样的话,客户机的IE安全设置级别高的话,这个ActiveX控件就很难运行。如果想突破安全级别的限制的话,就必须在控件上下功夫。至于能突破安全级别的控件如何编写,小的在后面再介绍。
其实想直接运行安装程序,也可以不要ActiveX控件,只要一个安装文件就行(和匹配的INF文件),但是,如果这样,就必须使客户机的安全级别降到最低,或者把IE中安全选项:下载未签名的ActiveX,改成启用/提示。
假设现在我们有一个控件了(DLoad.ocx),除了你想在客户机上运行的Setup.exe文件我们还需要一个Setup.inf文件。这个inf文件如何编写,请看下面的例子:
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Add.Code]
DLoad.ocx=DLoad.ocx
mfc42.dll=mfc42.dll
msvcrt.dll=msvcrt.dll
olepro32.dll=olepro32.dll
setup.exe=setup.exe
[DLoad.ocx]
file-win32-x86=thiscab
clsid={68ADAF59-76C1-4561-A45A-867F43545237}
FileVersion=1,0,0,1
RegisterServer=yes
[msvcrt.dll]
FileVersion=6,0,8168,0
hook=mfc42installer
[mfc42.dll]
FileVersion=6,0,8168,0
hook=mfc42installer
[olepro32.dll]
FileVersion=5,0,4261,0
hook=mfc42installer
[mfc42installer]
file-win32-x86=VALUE=mfc42.cab
run= %EXTRACT_DIR% \mfc42.exe
[dotnetfx.exe]
file=thiscab
RegisterServer=yes
[Setup Hooks]
hook=setup
[setup]
run=%EXTRACT_DIR%\setup.exe
以上控件是使用Visual C++6.0编写的
这里需要说明的是上述msvcrt.dll、mfc42.dll、olepro32.dll的FileVersion是根
据VC不同的版本而异的,例如在VC5.0sp3中就应该如下
olepro32.dll 5,0,4230,1
mfc42.dll 4,21,0,7303
msvcrt.dll 5,0,0,7303
每个VC版本都有不同的版本号,这里只介绍常见的两种。
这里的clsid是从那得到的呢?是在你生成OCX的目录中.odl文件中得到的,注意,
打开这个文件后,我们可以看到四个clsid,最上面那个带有Version值的才是我们
需要的。这个clsid非常重要,它最终会注册到注册表里,提供版本的验证功能。只
有当程序发现你的注册表里没有这个clsid的时候,它才会自动安装。如果你安装了
一次,再安装一次的话,安装包(CAB)会发现注册表里有了这个clsid,它就不会
重复安装了。在mfc42installer里的mfc42.cab文件是需要下载的,下载地址:
http://activex.microsoft.com/controls/vc/mfc42.cab
另外mfc42installer的下载路径除了VC4.1和更早版本使用
http://activex.microsoft.com/controls/vc/mfc40.cab外,其他版本都使用
http://activex.microsoft.com/controls/vc/mfc42.cab
下载完之后,把这个文件放在你的执行目录下就行了。
在这个inf例子中,包含了DLoad.ocx和setup.exe两个文件的信息。如果只单纯
执行OCX文件,他有关setup.exe的信息剔除就行了。
我们的inf文件编写完成,下面我们就要进行最重要的一步工作,把这些文件打
包成一个CAB文件。可以用VB和VS7.0自带的打包工具。不过我推荐使用WinCAB。这
个工具网上到处都有下载,不过下载安装完成之后,必须把Makecab.exe拷贝到
WinCAB的安装目录下才可运行,Makecab.exe文件在C:\WINNT\system32里。
CAB工具的使用方法:
(1)启动WinCAB,然后执行“Cabinet”菜单的“New”命令或单击快捷工具栏上的
“New cabinet”按钮,准备制作新的CAB压缩包。
(2)单击快捷工具栏上的“Add file(s) to cabinet”按钮,打开“Add file(s)
to cabinet”对话框。
(3)选择欲添加到CAB压缩包中的文件后单击“打开”按钮,将它们添加到WinCAB
的文件列表中。这里只需要添加YourCtl.ocx和YourCtl.inf两个文件。
(4)在WinCAB快捷工具栏的“Cabinet path and name”框中输入或利用“Browse
for path and name”按钮指定CAB压缩包的路径及文件名。
(5)在“Cabinet size”栏中指定CAB压缩包的尺寸。
(6)在“Compression method”框中选择合适的压缩方式。
(7)单击“Save cabinet”按钮,WinCAB即会按照用户的要求进行压缩。
(8)压缩完成后,WinCAB会给出一个“WinCAB Report”的报告框,向广大用户报
告有关文件个数、压缩前后的文件尺寸、压缩率、压缩时间等情况。至此,一个CAB
文件就生成了。

打包完成之后,我们要在网页中调用它了。
<OBJECT classid=clsid:68ADAF59-76C1-4561-A45A-867F43545237
codeBase=http://127.0.0.1/web/setup.cab#version=1,0,0,0>
<PARAM NAME="Setup" VALUE="http://127.0.0.1/web/DLoad.ocx">
</OBJECT>
现在可以马上进行测试,不过要把IE中的安全选项:下载未签名的ActiveX,改成启
用/提示。最好找台没有装3721上网助手(类似软件)的机器上测试。
以上控件的执行有很大局限性,如果安全级别高的话,就很难通过。所以现在介绍
如何突破IE安全级别限制的控件编写。

要包括两个文件

#include "comcat.h"
#include "Objsafe.h"
// 本控件的CLSID,注册表用
const GUID CDECL CLSID_SafeItem =
{ 0x7AE7497B, 0xCAD8, 0x4E66, {

0xA5,0x8B,0xDD,0xE9,0xBC,0xAF,0x6B,0x61 } };
// 创建组件种类
HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (FAILED(hr))
return hr;

// Make sure the HKCR\Component Categories\{..catid...}
// key is registered.
CATEGORYINFO catinfo;
catinfo.catid = catid;
catinfo.lcid = 0x0409 ; // english

// Make sure the provided description is not too long.
// Only copy the first 127 characters if it is.
int len = wcslen(catDescription);
if (len>127)
len = 127;
wcsncpy(catinfo.szDescription, catDescription, len);
// Make sure the description is null terminated.
catinfo.szDescription[len] = ''\0'';

hr = pcr->RegisterCategories(1, &catinfo);
pcr->Release();

return hr;
}
// 注册组件种类
HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
// Register your component categories information.
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;
hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister,

(void**)&pcr);
if (SUCCEEDED(hr))
{
// Register this category as being "implemented" by the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);
}
if (pcr != NULL)
pcr->Release();
return hr;
}
// 卸载组件种类
HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)
{
ICatRegister* pcr = NULL ;
HRESULT hr = S_OK ;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);
if (SUCCEEDED(hr))
{
// Unregister this category as being "implemented" by the class.
CATID rgcatid[1] ;
rgcatid[0] = catid;
hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);
}

if (pcr != NULL)
pcr->Release();

return hr;
}
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
HRESULT hr;

AFX_MANAGE_STATE(_afxModuleAddrThis);

if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);

if (!COleObjectFactoryEx::UpdateRegistryAll(TRUE))
return ResultFromScode(SELFREG_E_CLASS);

// 标记控件初始化安全.
// 创建初始化安全组件种类
hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls

safely initializable from persistent data!";
if (FAILED(hr))
return hr;
// 注册初始化安全
hr = RegisterCLSIDInCategory(CLSID_SafeItem,

CATID_SafeForInitializing);
if (FAILED(hr))
return hr;

// 标记控件脚本安全
// 创建脚本安全组件种类
hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls

safely scriptable!";
if (FAILED(hr))
return hr;
// 注册脚本安全组件种类
hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
return hr;

return NOERROR;
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr;

AFX_MANAGE_STATE(_afxModuleAddrThis);

if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
return ResultFromScode(SELFREG_E_TYPELIB);

if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
return ResultFromScode(SELFREG_E_CLASS);

// 删除控件初始化安全入口.
hr=UnRegisterCLSIDInCategory(CLSID_SafeItem,

CATID_SafeForInitializing);
if (FAILED(hr))
return hr;
// 删除控件脚本安全入口
hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
return hr;

//
return NOERROR;
}

我知道,一旦突破了IE的安全级别设置,也就变成了一个真正的准木马程序了,请
各位在使用的时候,遵守相关法律,遵守职业道德。我们本着学习的态度去钻研这
些,我不希望看到有些人为非作歹,请各位自重!
特此声明:由该所文引发的一切后果,由阅读者承担,本人不承担一切责任。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
伴随着网络的发展,也产生了各种各样的安全问题,服务器被入侵、木马后门及垃圾病毒挂马肆意泛滥,木马无孔不入,DDoS攻击越来越常见,黑客攻击行为几乎每时每刻都在发生。如何及时的、准确的发现违反安全策略的事件,并及时处理,是广大企业用户迫切需要解决的问题。 云顿服务器安全加固系统(eisafe safety system server,简称:eisafe safety) 是云顿科技自主知识产权的安全产品,它是对服务器安全的有效加固、全自动安全加固、一键设置执行处理,从而有效的保护WEB服务器、避免黑客入侵、安全加固一体化解决方案。 云顿服务器安全加固系统是安全加固系统同类产品中的经典之作,该产品拥有业界其它产品无以比拟的高性能、高安全性、高可靠性和易操作性等特性,为用户带来了极佳的安全体验。 系统危险文件加固设置权限 eisafe safety对windows系统核心文件加固权限,去除危险用户访问权限,防止非法用户利用系统文件进行攻击。 系统危险文件夹权限加固 eisafe safety对windows系统核心文件夹进行加固,去除危险文件夹非本地用户访问。 系统危险服务优化 禁止和关闭危险服务启动,并对服务进行优化,提供服务器运行速度。 系统危险组件及注册表加固 关闭和卸载危险组件,防止WEB进行恶意调用,如内核执行DOS、远程提权用户等危险组件。 Ddos防御注册表加固 对DDOS防御进行注册表简单加固,可防止小部分攻击。 每天定时重启-时间5点 每天定时重启服务有效的清理缓存垃圾,维护服务器顺畅运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值