攻击过程: 前些日子,一个朋友刚做完一个网站,让我给他做下安全检测.简单看了一下,发现网站里存在ASP和PHP两种脚本,后来知道是因为空间商把FSO调用必了,所以我那个朋友又用了PHP脚本的上传程序做会员上传用,呵呵,正因为他的这个
PHP上传程序让我有了进入这个服务器的机会,感谢ing....
利用上传漏洞,传了个PHP木马上去.为了证明此服务器的ASP木马防护能力,后来写了个测试FSO的FSO.asp用PHP木马
传上去,打开页面提示说:无效的progid...由经验得知80%是改了progid值,于是我马上用PHP木马的写权限把fso.asp
的set fso=server.createobject("scripting.filesystemobject")这一句删了,在asp体外加了一句<object
runat=server id=fso scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object>.
写入成功后,再打开fso.asp,哈哈!该服务器的所有盘基本情况都很清楚了.
看来执行ASP木马也没有问题了.ASP安全是做了,但做的不彻底,而且单凭PHP马就足以给此服务器臻命的打击.服务器里D盘G盘近千个网站虽在I盘作了备分,但一点用也没有!完全有可读写运行的权限,想怎么处理你也没脾气!而且还可以执行webshell.如果提升权限进入你的服务器格了盘.再作下垃圾数据处理,想还原也还原不了喽.对于同胞我虽然不可能作出这种下流事,但林子大了什么鸟都有!再或者有异族的侵入.唉....攻击就这么简单,一个极普通的小站加一个老没就能控制整个服务器!唉!
防护方式
第一式:脚本监控
实施环境:windows操作系统
实施方法,安装对脚本监控较强的防毒软件!如:kaspersky(卡巴斯基).题外话:我的脚本常常被他kill...有时只能把他的监控监时关掉!
个人意见:实施起来比较容易,装一个好的防毒软件就可以了.263主机就用了此法!但未秘太管用,不是什么马都可以查杀的,而且当我把程序加一下密,防毒软件也认不出来.仅可作为初级防线!
第二式:
实施环境:windows操作系统,IIS模式下
实施方法:通过使FSO(filesystemobject)组件调用失效可使ASP木马跑不起来!
此式又可分为两招:
第一招:修改注册表中程序标识值(PorgID)
出招:单击"开始-->>运行",在运行对话框中输入"regedit",然后在注册表编辑器中找到"HKEY_CLASSES_ROOT\Scripting.FileSystemObject"改为"HKEY_CLASSES_ROOT\Scripting.FileSystemObjectcn90"
说明:此招只是把通常调用FSO的语句"set 对象名=server.createobject("Scripting.filesystemobject")"改为:set 对象名=server.createobject("scripting.filesystemobjectcn90")",使得不知默认的ProgID改为何值的人无法调用FSO组件,从而达到使ASP木马跑不起来的目的.最后再提醒一点,通常有人认为把scripting.filesystemobject修改为scripting.filesystemobjectcn90是改(右边的)字符串值,那是没用的.字符串的值,你就当是说明好了,改不改都无所谓.主要是要改左边的项值(文件夹重命名).
个人意见:此招看上去管用,但若有精通一些的人采用html的<object>标注通过FSO的类标识<clsid)在网页里调用组件,改了半天的progID等于白改了!其实网上流传着改clsid值的方法来完善此招,但是我通过经验告诉大家!这是行不通的,CLSID默认的字符串值为:{0D43FE01-F093-11CF-8940-00A0C9054228},有文章说改为{0D43FE01-F093-11CF-8940-00A0C9054229}或改为其它的尾数来实现CLSID调用时出错.我在多个操作系统上度行,此举无效.至于为什么,我对微软的CLSID设置还不到非常精通的地步,但据我所知CLSID是微软分配的必需唯一的数值,当FSO的scrrun.dll组件被调用时,其实是先到注册表寻找指示,依赖CLSID可能会引起值冲突或FSO干脆就无法调用了.
第二招:禁用FSO组件
出招:单击"开始--->>运行",在运行对话框中输入"regsvr32 /u %systemroot%\system32\scrrun.dll",点击确定就可以了!
说明:利用微软自带的regsvr32工具来注销FSO组件,实在是方便,如想再启用起来,只需在运行对话框中输入"regsvr32 %systemroot%\system32\scrrun.dll"即可.
个人意见:此招方便有效,一般系统管理员很少通过FSO进行管理.对于需要FSO组件不多的情况,建议直接注销此组件!
第三式:防PHP木马之内部函数的作用.
实施环境:支持并运行PHP的各类操作系统
实施方法:通过对PHP的核心配置文件PHP.ini的修改,禁用一些功能强大的内部函数!好了,我们开始行动吧!
第一步:打开php.ini文件(windows默认路径为"%systemroot%\php.ini",linux默认路径在"etc/php.ini").
第二步:找到"safe_mode=off"改为"safe_mode=on"(已经打开的省略此步)
第三步:找到"disable_functions="改为:"disable_functions=phpinfo,system,exec,passthru,shell_exec,popen,is_dir".
第四步:找到"display_errors=on"改为"display_errors=off"
第五步:保存退出.
说明:php安全模式(safe_mode)打开后,"disable_functions="后跟的全部都是被禁用的PHP内部函数."phpinfo"这个函数并不是为防止PHP木马而禁用的.但它能返回所有的PHP基本信息,建议关闭以绝后
患,"system,exec,passthru,shell_exec,popen," 这些属于命令执行类函数,关闭他们可以防止PHP木马执行webshell;"is_dir"这个函数的关闭,可以让既使有everyone可读的权限,也无法将服务器目录及文件名返回到浏览器
.但此时PHP的错误提示会告诉你是因为哪些函数出错造的.所以我们还要关掉错误提示,就是我们的第四步,这样下来
那些一般的工具黑客就会以为没有权限而放弃!
个人意见:我发现网络广为转贴的一篇防PHP木马文章里把关闭的特定函数设
为"disable_functions=passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir,fopen,fread,f
close,fwrite,file_exists,closedir,is_dir,readdir,opendir,fileperms.copy,unlink,delfile",首先我对
delfile也被列为被禁用的PHP函数打了一个超大的问号.再一个,PHP本身就是以提供了大量的函数,实现某功能比较
容易而受到了很多PHP编程者欢迎.如果禁掉这么多函数,以文本数据库运行的留言本,论坛等等都无法正常使用运行.
木马是禁止了,PHP的能力也损失了,怕是很多客户也只能离这个虚拟主机而去了.
所以我其实连is_dir都不舍得关掉.我更喜欢只关才phpinfo,system,exec,passthru,shell-exec,popen,然后配以正确的权限设置比较有效.
第四式:目录权限验证防跨站入侵
实施环境:windows操作系统NTFS格式,linux类操作系统
实施方法:通过对目录的访问者权限的控制,使不同级别的用户在访问时只能依法(权限)办事.此式针对方流的windwos和linux两大类操作分别出招!
第一招:apache(windwos)服务器模式的目录访问权限控制
出招:
1.把所有分区的安全选项里的授权组或用户里除了administrators和system全都删除.
2.针对每个虚拟主机用户目录再单加一个ev-eryone读,写,和列出目录权限.
说明:把上面的方法归于apache服务器类,并不说只能应用于appche,而是在IIS下有另一种权限配置方案比这个更好,可以说在windows操作系统下,如果不用IIS,采用其它web服务器模式的情况还是要用此法的!按此方式设置权限,由于相应的虚拟主机来宾用户只在授权的目录内拥有权限,在上一级根本就没授权,所以就会看不到别人的目录,当然就无法进到别人的目录乱来,从而无法形成跨站入侵了!除非那个人对你的网站的目录设置情况非常的了解.但我想这种人就是内部的了,家贼难防.在这里我们不去考虑这些个别因素.不过,我发现好多的虚拟主机商把网站的目录以网站的名称去命令.为了便于记忆和管理可以理解.但无形中又多了一种安全因素,其实只要在设目录时在你要设的目录名后随机加几个字符,那么就没人能猜到你每个目录的名字了.举手之劳.何乐而不为呢?
个人意见:如果谈到apache模式下防脚本木马一般就是指防PHP木马了.因为拿apache去和ASP结合的人,我基本上没见到,除了兼容性的问题,主要是近年的高版本apache支持ASP我从没成功配置过,也没见过别人成功(通过端口映射而使apache和IIS共存的情况除外).而作为一个安全的服务器,权限是一定要配置的,但要根据不同服务器的实际情况,要很多种方式结合起来才能真正达到安全有效.
其实针对apache服务器,可以在httpd.conf里加一句"php_admin_value open_basedir '你的网站目录",但这个方工通过我的实际经验个人认为企业内部用或个人用不行,实在不适合虚拟主机的用户,没多大作用的方式,我只提一下,有兴趣的朋友自己研究吧!
第二招:IIS服务器模式的目录访问权限控制
出招:首先建立一个guests组用户,然后对应网站的目录加入刚设的Guests组用户读取和运行的权限.在IIS里对相应的目录安全性进行编辑.把默认的匿名用户改为你对应的Guests用户.
点确定后会提示你再输入一次密码.正确输入后就OK了.
说明:如果你的IIS除了ASP,还支持了PHP,那么对你许可使用PHP的客户在PHP程序目录里也要根据对应的用户给予读和运行的权限.%systemroot%目录给予只读权限,不给权限就不能运行PHP.所以建议在安装
PHP时不要装在默认目录用默认名,以防被猜出路径,增加不安全隐患!
个人意见:此方式对于每个用户给予单独的授权,未经授权的地方就不能访问.所以用此方式能比较好的控制每个用户活动的地方.此方式也是我在windows服务器里比较喜欢的一种设置方式!
特别提示:由于在ASP程序里,有好多人使用ACCESS类型数据库,而上面的权限配置出于目录继承的原因,而使用这种数据库的朋友ASP程序就无法正常运行了.如果是管理网站不是很多的内部服务器,可以为数据库文件单开一个写权限即可.但对于虚拟主机来说,如此做根本就不现实.所以在给予网站目录权限的时候就要把写的权限加上.
第三招:linux类服务器模式的目录访问权限控制
出招:使用chmod命令让所有的系统内目录访问权限为711(例: chmod 711 chameleon,)
说明:由于能管理和配置linux系统的管理员一般都是比较专业的,我这里就不对整个linux目录权限作更多的讲述,设为711权限后,PHP木马将无法读写及浏览到目录内的所有文件,以此达到防止跨站攻击的目录.
个人意见:仅仅设为711权限对于服务器安全是不够的,还需综合多种安全设置结合起来!比如在防PHP木马上还要对php.ini作些设置.
PHP上传程序让我有了进入这个服务器的机会,感谢ing....
利用上传漏洞,传了个PHP木马上去.为了证明此服务器的ASP木马防护能力,后来写了个测试FSO的FSO.asp用PHP木马
传上去,打开页面提示说:无效的progid...由经验得知80%是改了progid值,于是我马上用PHP木马的写权限把fso.asp
的set fso=server.createobject("scripting.filesystemobject")这一句删了,在asp体外加了一句<object
runat=server id=fso scope=page classid="clsid:0D43FE01-F093-11CF-8940-00A0C9054228"></object>.
写入成功后,再打开fso.asp,哈哈!该服务器的所有盘基本情况都很清楚了.
看来执行ASP木马也没有问题了.ASP安全是做了,但做的不彻底,而且单凭PHP马就足以给此服务器臻命的打击.服务器里D盘G盘近千个网站虽在I盘作了备分,但一点用也没有!完全有可读写运行的权限,想怎么处理你也没脾气!而且还可以执行webshell.如果提升权限进入你的服务器格了盘.再作下垃圾数据处理,想还原也还原不了喽.对于同胞我虽然不可能作出这种下流事,但林子大了什么鸟都有!再或者有异族的侵入.唉....攻击就这么简单,一个极普通的小站加一个老没就能控制整个服务器!唉!
防护方式
第一式:脚本监控
实施环境:windows操作系统
实施方法,安装对脚本监控较强的防毒软件!如:kaspersky(卡巴斯基).题外话:我的脚本常常被他kill...有时只能把他的监控监时关掉!
个人意见:实施起来比较容易,装一个好的防毒软件就可以了.263主机就用了此法!但未秘太管用,不是什么马都可以查杀的,而且当我把程序加一下密,防毒软件也认不出来.仅可作为初级防线!
第二式:
实施环境:windows操作系统,IIS模式下
实施方法:通过使FSO(filesystemobject)组件调用失效可使ASP木马跑不起来!
此式又可分为两招:
第一招:修改注册表中程序标识值(PorgID)
出招:单击"开始-->>运行",在运行对话框中输入"regedit",然后在注册表编辑器中找到"HKEY_CLASSES_ROOT\Scripting.FileSystemObject"改为"HKEY_CLASSES_ROOT\Scripting.FileSystemObjectcn90"
说明:此招只是把通常调用FSO的语句"set 对象名=server.createobject("Scripting.filesystemobject")"改为:set 对象名=server.createobject("scripting.filesystemobjectcn90")",使得不知默认的ProgID改为何值的人无法调用FSO组件,从而达到使ASP木马跑不起来的目的.最后再提醒一点,通常有人认为把scripting.filesystemobject修改为scripting.filesystemobjectcn90是改(右边的)字符串值,那是没用的.字符串的值,你就当是说明好了,改不改都无所谓.主要是要改左边的项值(文件夹重命名).
个人意见:此招看上去管用,但若有精通一些的人采用html的<object>标注通过FSO的类标识<clsid)在网页里调用组件,改了半天的progID等于白改了!其实网上流传着改clsid值的方法来完善此招,但是我通过经验告诉大家!这是行不通的,CLSID默认的字符串值为:{0D43FE01-F093-11CF-8940-00A0C9054228},有文章说改为{0D43FE01-F093-11CF-8940-00A0C9054229}或改为其它的尾数来实现CLSID调用时出错.我在多个操作系统上度行,此举无效.至于为什么,我对微软的CLSID设置还不到非常精通的地步,但据我所知CLSID是微软分配的必需唯一的数值,当FSO的scrrun.dll组件被调用时,其实是先到注册表寻找指示,依赖CLSID可能会引起值冲突或FSO干脆就无法调用了.
第二招:禁用FSO组件
出招:单击"开始--->>运行",在运行对话框中输入"regsvr32 /u %systemroot%\system32\scrrun.dll",点击确定就可以了!
说明:利用微软自带的regsvr32工具来注销FSO组件,实在是方便,如想再启用起来,只需在运行对话框中输入"regsvr32 %systemroot%\system32\scrrun.dll"即可.
个人意见:此招方便有效,一般系统管理员很少通过FSO进行管理.对于需要FSO组件不多的情况,建议直接注销此组件!
第三式:防PHP木马之内部函数的作用.
实施环境:支持并运行PHP的各类操作系统
实施方法:通过对PHP的核心配置文件PHP.ini的修改,禁用一些功能强大的内部函数!好了,我们开始行动吧!
第一步:打开php.ini文件(windows默认路径为"%systemroot%\php.ini",linux默认路径在"etc/php.ini").
第二步:找到"safe_mode=off"改为"safe_mode=on"(已经打开的省略此步)
第三步:找到"disable_functions="改为:"disable_functions=phpinfo,system,exec,passthru,shell_exec,popen,is_dir".
第四步:找到"display_errors=on"改为"display_errors=off"
第五步:保存退出.
说明:php安全模式(safe_mode)打开后,"disable_functions="后跟的全部都是被禁用的PHP内部函数."phpinfo"这个函数并不是为防止PHP木马而禁用的.但它能返回所有的PHP基本信息,建议关闭以绝后
患,"system,exec,passthru,shell_exec,popen," 这些属于命令执行类函数,关闭他们可以防止PHP木马执行webshell;"is_dir"这个函数的关闭,可以让既使有everyone可读的权限,也无法将服务器目录及文件名返回到浏览器
.但此时PHP的错误提示会告诉你是因为哪些函数出错造的.所以我们还要关掉错误提示,就是我们的第四步,这样下来
那些一般的工具黑客就会以为没有权限而放弃!
个人意见:我发现网络广为转贴的一篇防PHP木马文章里把关闭的特定函数设
为"disable_functions=passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir,fopen,fread,f
close,fwrite,file_exists,closedir,is_dir,readdir,opendir,fileperms.copy,unlink,delfile",首先我对
delfile也被列为被禁用的PHP函数打了一个超大的问号.再一个,PHP本身就是以提供了大量的函数,实现某功能比较
容易而受到了很多PHP编程者欢迎.如果禁掉这么多函数,以文本数据库运行的留言本,论坛等等都无法正常使用运行.
木马是禁止了,PHP的能力也损失了,怕是很多客户也只能离这个虚拟主机而去了.
所以我其实连is_dir都不舍得关掉.我更喜欢只关才phpinfo,system,exec,passthru,shell-exec,popen,然后配以正确的权限设置比较有效.
第四式:目录权限验证防跨站入侵
实施环境:windows操作系统NTFS格式,linux类操作系统
实施方法:通过对目录的访问者权限的控制,使不同级别的用户在访问时只能依法(权限)办事.此式针对方流的windwos和linux两大类操作分别出招!
第一招:apache(windwos)服务器模式的目录访问权限控制
出招:
1.把所有分区的安全选项里的授权组或用户里除了administrators和system全都删除.
2.针对每个虚拟主机用户目录再单加一个ev-eryone读,写,和列出目录权限.
说明:把上面的方法归于apache服务器类,并不说只能应用于appche,而是在IIS下有另一种权限配置方案比这个更好,可以说在windows操作系统下,如果不用IIS,采用其它web服务器模式的情况还是要用此法的!按此方式设置权限,由于相应的虚拟主机来宾用户只在授权的目录内拥有权限,在上一级根本就没授权,所以就会看不到别人的目录,当然就无法进到别人的目录乱来,从而无法形成跨站入侵了!除非那个人对你的网站的目录设置情况非常的了解.但我想这种人就是内部的了,家贼难防.在这里我们不去考虑这些个别因素.不过,我发现好多的虚拟主机商把网站的目录以网站的名称去命令.为了便于记忆和管理可以理解.但无形中又多了一种安全因素,其实只要在设目录时在你要设的目录名后随机加几个字符,那么就没人能猜到你每个目录的名字了.举手之劳.何乐而不为呢?
个人意见:如果谈到apache模式下防脚本木马一般就是指防PHP木马了.因为拿apache去和ASP结合的人,我基本上没见到,除了兼容性的问题,主要是近年的高版本apache支持ASP我从没成功配置过,也没见过别人成功(通过端口映射而使apache和IIS共存的情况除外).而作为一个安全的服务器,权限是一定要配置的,但要根据不同服务器的实际情况,要很多种方式结合起来才能真正达到安全有效.
其实针对apache服务器,可以在httpd.conf里加一句"php_admin_value open_basedir '你的网站目录",但这个方工通过我的实际经验个人认为企业内部用或个人用不行,实在不适合虚拟主机的用户,没多大作用的方式,我只提一下,有兴趣的朋友自己研究吧!
第二招:IIS服务器模式的目录访问权限控制
出招:首先建立一个guests组用户,然后对应网站的目录加入刚设的Guests组用户读取和运行的权限.在IIS里对相应的目录安全性进行编辑.把默认的匿名用户改为你对应的Guests用户.
点确定后会提示你再输入一次密码.正确输入后就OK了.
说明:如果你的IIS除了ASP,还支持了PHP,那么对你许可使用PHP的客户在PHP程序目录里也要根据对应的用户给予读和运行的权限.%systemroot%目录给予只读权限,不给权限就不能运行PHP.所以建议在安装
PHP时不要装在默认目录用默认名,以防被猜出路径,增加不安全隐患!
个人意见:此方式对于每个用户给予单独的授权,未经授权的地方就不能访问.所以用此方式能比较好的控制每个用户活动的地方.此方式也是我在windows服务器里比较喜欢的一种设置方式!
特别提示:由于在ASP程序里,有好多人使用ACCESS类型数据库,而上面的权限配置出于目录继承的原因,而使用这种数据库的朋友ASP程序就无法正常运行了.如果是管理网站不是很多的内部服务器,可以为数据库文件单开一个写权限即可.但对于虚拟主机来说,如此做根本就不现实.所以在给予网站目录权限的时候就要把写的权限加上.
第三招:linux类服务器模式的目录访问权限控制
出招:使用chmod命令让所有的系统内目录访问权限为711(例: chmod 711 chameleon,)
说明:由于能管理和配置linux系统的管理员一般都是比较专业的,我这里就不对整个linux目录权限作更多的讲述,设为711权限后,PHP木马将无法读写及浏览到目录内的所有文件,以此达到防止跨站攻击的目录.
个人意见:仅仅设为711权限对于服务器安全是不够的,还需综合多种安全设置结合起来!比如在防PHP木马上还要对php.ini作些设置.