MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 SQL 语言是访问数据库最常用的标准化语言。MySQL 软件采用了 GPL(GNU 通用公共许可证),它分为免费版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其免费版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境,MySQL 分为商业版本(MySQL Enterprise Edition 和 MySQL Cluster CGE )和 GPL 版本(MySQL Community Edition)(开发版下载地址:https://dev.mysql.com/downloads/)。 一 MySQL 提权必备条件 服务器安装 MySQL 数据库 利用MySQL提权的前提就是服务器安装了MySQL数据库,且MySQL的服务没有降权,MySQL数据库默认安装是以系统权限继承的,并且需要获取MySQLroot账号密码。 2 判断MySQL服务运行权限 对于MySQL数据库服务运行权限有很多方法,我这里主要介绍三种,一种是通过查看系统账号,也即使用“net user”命令查看系统当前账号,如果出现了MySQL这类用户,以为着系统可能进行了降权,一般情况都不会降权。第二种方法就是看 Mysqld 运行的 Priority 值,如图1所示。通过 aspx 的网页木马来查看 Process 信息,在图中我们可以看到系统权限的 Priority 值为“8 ”,如果Mysqld 的 Priority 值也为 8 则意味着MySQL是以 System 权限运行的。第三种方法是查看端口可否外联,一般情况下是不允许 root 等账号外联,外部直接连接意味着账号可能被截取和嗅探,通过本地客户端直接连接对方服务器,直接查看和操作MySQL数据库,可以通过扫描 3306 端口来判断是否提供对外连接。 查看 Priority 值来判断 Mysqld 服务运行权限 二 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 操作系统,除了上述方法获取 oot 账号密码外,还可以通过查看 ./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”命令即可获取,如图4所示。 查看 binlog 日志 2 获取 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数据库密码手动破解,请查阅下一章。 3 MySQL密码查询 可以通过以下查询语句直接查询 MySQL数据库中的所有用户和密码,如图2所示。 selectuser,passwordfrommysql.user; selectuser,passwordfrommysql.userwhereuser='root'; 4 MySQL 密码加密算法 MySQL 实际上是使用了两次 SHA1 夹杂一次 unhex 的方式对用户密码进行了加密。具体的算法可以用公式表示:password_str = concat('*', sha1(unhex(sha1(password)))),可以通过查询语句进行验证,查询结果如图3所示。 selectpassword('mypassword'),concat('*',sha1(unhex(sha1('mypassword')))); 图3 MySQL数据库加密算法 三 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' |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|