输入systeminfo //查看目标机器上安装了哪些补丁
wmic qfe get Caption,Description,HotFixID,InstalledOn //查看目标机器上安装了哪些补丁
然而这些补丁的输出结果是不能被直接利用的。我们需要需寻找提权的EXP,将已安装的补丁编号与提权的EXP编号进行对比。
寻找漏洞这里我们使用cmd寻找目标机器是否包含KB3143141、KB976902漏洞,如果返回寻找到则不存在漏洞。
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB3143141" /C:"KB976902"
在网上寻找或者自行编写脚本进行利用直到提权
利用Metasploit中的post/windows/gether/enum_patches模块,可以根据漏洞编号快速找出系统中缺失的补丁
通过PowerShell的Sherlock脚本可以快速查找可能用于本地权限提升的漏洞。
系统服务权限配置错误有如下两种可能:
可信任服务路径漏洞利用了windows文件路径解析的特性,并涉及服务路径的文件/文件夹权限。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是說,如果一個服务的可执行文件的路径没有被双引号起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在两种可能性
因为windows服务通常都是以system权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行。
例如,有一个文件路径“C\progran Files\Some Folder\Service.exe"。对于该路径中的每一个空格,windows都会寻找尝试并执行与空格前面的名字相匹配的程序。操作系统会对该文件路径中空格的所有可能情况进行尝试,直到找到一个能匹配的程序。在本例中,windows会依次尝试确定和执行以下程序。
因此,如果一个被“适当”命名的可执行程序被上传到受影响的目录中,服务一旦重启,该程序就会以system权限运行
1.首先,检测目标机器中是否存在该漏洞。使用wmic查询命令,列出目标机器中所有没有被引号引起来的服务的路径
wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
结果返回:
D:\softwarePath\Nessus\nessus-service.exe D:\softwarePath\vmware16\vmware-authd.exe
2.如果存在没有被引号引起来的服务路径,接下来检测是否对目标文件夹的写权限。
这里使用windows的内置工具icacls,使用来检测该路径是否有读写权限
icacls D:\softwarePath\Nessus\nessus-service.exe
Everyone:用户对这个文件夹有完全控制权限,也就是说,所有用户都具有修改这个文件夹的权限。
(M):修改
(F): 完全控制
(CI):从属容器将继承访问控制项。
(OI): 从属文件将继承访问控制项。
"Everyone:(OI)(CI)(F)"的意思是,该文件夹,用户有读、写、删除其下文件、删除其子目录的权限。
3.确认存在此漏洞后,要把上传程序重新命名并放置在存在此漏洞且可写的目录下,执行如下命令,尝试重启服务。
sc stop service_name
sc start service_name
4.也可以使用msf中的windows service Trusted Path Privilege Escalation模块进行渗透测试。
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而会使用脚本化批量部署的方法。在这一过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中的一些还可能包含本地管理员账号和密码等信息。
msf集成了该漏洞的利用模块,/post/windows/gather/enum_unattend
可以使用如下命令查看计算机的计划任务
schtasks /query /fo LIST /V
如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序来覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序。
empire内置了powerUp的部分模块
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有与控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读写权限的活动目录的域返回内共享。整个SYSVOL目录在所有的域控制器中是自动同步和共享的,所有域策略均存放在C:\Windows\SYSVOL\DOMAIN\Policies\目录中。
在一般的域环境中,所有机器都是校本化批量部署的,数据量通常很大。为了方便地对所有的机器进行操作,网络管理员往往会使用域策略进行统一的配置和管理。大多数组织在创建域环境后,会要求加入域的计算机使用域用户密码进行登录验证。为了保证本地管理员密码的安全性,这些组织的网络管理员往往会修改本地管理员密码。
尽管如此,安全问题依旧存在。通过组策略统一修改的密码,虽然强度有所提升,但是所有机器的本地管理员密码是相同的。攻击者获得了一台机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理密码。
常见的组策略首选项如下:
如果计算机的操作系统版本是windows Vista或更高,在权限不够的情况下,访问系统磁盘的跟目录(例如C:)、windows目录、Program Files目录,以及读、写系统登录数据库的程序等操作,都需要经过UAC的认证才能进行。
假设通过一系列前期渗透测试,已经获得了目标机器的meterpreter Shell。当前权限为普通用户权限,现在尝试获取系统的system权限。
首先,运行exploit/windows/local/bypassuac模块,获得一个新的meterpreter。然后,执行“getsystem"命令。再次查看权限,发现已经绕过UAC,获得了system权限。
——————————————————————————————————————
在使用bypassuac模块进行提权时,当前用户必须在管理员组中,且UAC必须为默认设置。
当bypassuac模块运行时,会在目标机器上创建多个文件,这些文件会被杀毒软件识别。但因为exploit/windows/local/bypassuac_injection模块直接运行内存反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。
1.使用exploit/windows/local/ask模块,创建一个可执行文件,目标机器会运行一个发起提升权限请求的程序,提升用户是否要继续运行,如果用户选择继续运行程序,就会返回一个最高权限的meterpreter Shell
2.输入“run”命令后,目标机器上会弹出UAC对话框。
3.单击“是”按钮,会返回一个新的meterpreter Shell
4.执行“getuid”命令,查看权限。如果是普通用户权限,就执行"getsystem"命令。再次查看权限,发现已经是system权限了。
注意:想要使用RunAs模块提权,当前用户必须在管理员组中或者知道管理员的密码,对UAC的设置没有要求。在使用RunAs模块时,需要使用EXE::Custom选项创建一个可执行文件(需要进行免杀处理)
Invoke-PsUACme模块使用来自UACME项目的DLL绕过UAC。
在企业网络环境中,防止绕过UAC的最好方法就是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。
在家庭网络环境中,建议使用非管理员权限进行日常办公和娱乐等活动。使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会想在windwos Vista中一样,总是弹出警告。)
令牌(token)是指系统中的临时密钥,相当于账号和密码,用于决定是否运行当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或者其他凭证的情况下访问网络和系统资源。这些令牌将持续存在域系统中(除非系统重新启动)
令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(access token)代表访问控制操作主体的系统对象。密保令牌(Security Token)也叫作认证令牌或者硬件令牌,是一种用于实现计算机身份校验的物理设备。例如U盾。会话令牌(Session Token)是交互会话中唯一的身份标识符。
伪造令牌攻击的核心是Kerberos协议。Kerberos是一种网络认证协议,其设计目标就是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。Kerberos协议的工作机制客户端请求证书过程如下:
1.假设已经获取到了目标机器的meterpreter shell。首先输入"use incognito" 命令,然后输入"list-tokens-u"命令,列出可用的令牌。如列出:WIN-612313\Administrator
2.从输出的信息中可以看出,分配的有效令牌为“WIN-612313\Administrator”。“WIN-612313”是目标机器的主机名,“Administrator”是登录的用户名。
3.接下来,在incognito中调用impersonate_token,假冒Administrator用户进行渗透测试。在meterpreter shell中执行"shell"命令并输入"whoami",假冒的令牌WIN-612313\Administrator已经获得了系统管理员权限了。
PS:
这里有两种类型的令牌:一种是Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);另一种是Impersonation Tokens模拟令牌,它支持非交互式的会话。令牌的数量其实取决于meterpreter shell的访问级别。假设已经获得了一个系统管理员的授权令牌,如果攻击者可以伪造这个令牌,便可以拥有它的权限。
在meterpreter shell中输入主机名\用户名的时候,需要输入两个反斜杠(\\)
如果目标系统中存在有效的令牌,可以通过Rotten Potato程序快速模拟用户令牌来实现权限的提升。
1.首先输入"use incognito"命令,然后输入"list_tokens-u"命令,列出可用的令牌。
2.执行如下命令,将rottenpotato.exe上传到目标服务器上(rottenpotato在github上下载)
execute -HC -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"
3.执行后输入getuid就可以看到权限为 "NT AUTHORITY\SYSTEM"了
1.假设网络中设置了域管理进程。在meterpreter 会话窗口中输入“PS”命令,查看系统进程。找到域管理进程,并使用migrate命令迁移到该进程。在meterpreter控制台输入“shell”,进入命令行界面。输入如下命令,把lendme用户添加到域管理员组中。
net user lendme lendme123 /ad /domain
#添加一个名为lendme的用户,并设置密码为lendme123
2.查看域管理员组,可以看到域管理员已经添加成功了
net group "domain adminis" /domain
3.同样,在meterpreter中可以使用incognito来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来添加域管理员。
在活动的meterpreter会话中执行如下命令,在域控主机上添加一个账户
add_user lendme lendme123 -h 1.1.1.2
执行如下命令,将该账户加到域管理员组中
add_group_user "Domain Admins" lendme -h 1.1.1.2
Empire具有令牌窃取的功能
本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到DNS服务器恢复正常为止。从windows Vista版本开始支持LLMNR。LLMNR支持IPv6。
NetBIOS是一种网络协议,一般用于在由几十台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在windows NT以后版本的所有操作系统中均可使用NetBIOS。但是,NetBIOS不支持IPv6。
NetBIOS提供三种服务如下:
Net-NTLM Hash 与 NTLM Hash不同。
NTLM Hash是指windows操作系统的Security Account Manager 中保存的用户密码散列值。NTLM Hash通常保存在windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
Net-NTML Hash是指在网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net-NTML Hash。使用Responder抓取的通常就是Net-NTML Hash。攻击者无法使用该散列值进行哈希传递,只能在使用Hashcat等工具得到明文后进行横向移动攻击。Net-NTLM hash是网络环境下NTLM认证的hash,该hash不能进行哈希传递,但是可以用于ntlm中继攻击。
假设目标网络上的DNS服务器因发生故障而无法提供服务时,会退回LLMNR和NBT-NS进行计算机名解析。下面使用Responder工具进行渗透测试。
Responder是监听LLMNR和NBT-NS协议的工具之一,能够抓取网络中所有的LLMNR和NBT-NS请求并进行响应,获取最初的账户凭证。
Responder可以利用内置SMB认证服务器,MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器、DNS认证服务器、WPAD代理服务器、以及FTP、POP3、LMAP、SMTP等服务器,收集目标网络中计算机的凭证,还可以通过Multi-Relay功能在目标系统中执行命令。
Responder是使用python语言编写的。可以在github上下载
1.设置监听模式
进入目标网络后,如果没有获得任何目标系统的相关信息和重要凭证,可以开启Responder的监听模式。Responder只会对网络的流量进行分析,不会主动响应任何请求。
使用Responder查看网络是如何在没有主动定位任何主机的情况下运行的,"ON"代表针对该服务器数据包的监听,“OFF"代表关闭监听。由此可以分析出网络中存在的地址段、机器名等。
2.渗透测试
在使用Responder对网络进行分析之后,可以利用SMB协议获取目标网络中计算机的Net-NTLM Hash。如果用户输入了错误的计算机名,在DNS服务器上进行的名称查询操作将会失败,名称解析请求将会被退回,使用NBT-NS和LLMNR进行解析。
在渗透测试中,使用Responder并启动回应请求功能,Responder会自动回应客户端的请求并声明主机就是被输入了错误计算机名的哪台机器,然后尝试建立SMB连接。客户端会发送主机的Net-NTLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash。