下载地址:https://download.vulnhub.com/theplanets/Mercury.ova
1.配置环境
kali:NAT
THE PLANETS: MERCURY:NAT
这里我们把吧唧设置为NAT后并不能正常获取其IP,经过深造后我们在此进行救援模式拯救我们的吧唧
开机长按shift进入这个界面(多试几次)
接着我们在刚刚那个界面按e后出现这个界面,我们利用上下键找到ro quiet,我们将其改成rw single init=/bin/bash
这条命令常用于系统修复,故障排除或执行特定的维护任务(其实没有single也可以,他这里起作用的主要是init=/bin/bash)
按ctrl+x进入系统,我们知道了他的版本号后经过深造我们知道了Ubuntu新版本中修改ip地址的配置文件为/etc/netplan/xxx(xxx是网卡名称),我们搁这儿首先查看网卡名称
然后我们直接重启,上nmap
芜湖,救援成功啦,成功得到吧唧的ip为192.168.139.137
2.主机发现
我们进行更细致的扫描发现他开放了22ssh服务和8080http服务,8080后面这么大一坨的意思是http服务为python3.8写的页面
3.访问服务
我们发现他好像并不让我们访问,因为是python卸掉,所以我们随便构造一个错误,看看有没有debug
直接就是被我逮住了,差点儿就被迷惑住了,既然有,我们就直接开始扫
成功看到了我们的老朋友robots协议
意思进制爬取/的内容,经过一番测试,我们发现这里也不能访问别的东西,又到了熟悉的沉淀时刻了
经过一番沉淀,我们回到刚刚的debug时候,惊奇的发现(擦亮眼睛后)他给出了目录的
我们经过探索和沉淀一番后,看到load a fact页面的URL,顿时脑海灵光一闪
我们直接就是一个人工的点击,感谢他给我科普水星知识的同时,我们也知道了1-8能够正常访问,但是9就没有了,我们合理猜测这是有注入的
直接就是一个引号给他干沉默了,从这个页面我们可以得到一些东西,至少我们可以知道这个url是通过数据库进行查询的
直接就是一个666,继续按照我们常规sql注入的流程进行注表注字段读内容(我是呆杯,注了两个小时半回头一看表名输错了)
我们得到了如下几对儿密码john:johnny1987,laura:lovemykids111,sam:lovemybeer111,webmaster:mercuryisthesizeof0.056Earths,我们尝试登录ssh服务
我们直接就是一发入魂(挨个儿试),老规矩,直接进行一手信息搜集
4.信息搜集
拿到我们第一个flag{userflag8339915c9a454657bd60ee58776f4ccd}
直接就是泰裤辣,拿个小本本记下来,待会儿去登录,先翻翻webmaster
我们发现了一些好东西,先存着(然鹅他并不让我们登mysql),然后我们登录linuxmaster
成功进行登录,经过我长达两小时半的探索和挖掘,我发现这道题不在我的能力范围以内,得,我得去沉淀一下
经过我两年半的沉淀,我了解到了一些知识:sudo默认会启用env_reset将命令行设置的环境变量复原,所以当使用sudo命令时候无法通过命令行来控制环境变量达到提权的目的,但凡事都是有例外的,就比如sudo在配置的时候为用户设置了SETENV选项,那么将会允许sudo使用用户在命令行设置的环境变量。这里我们sudo -l列出所有可以执行的命令和权限时,发现sudo允许用户以root权限来执行一个shell脚本,并为当前用户配置了SETENV,简直就是瞌睡来了遇到枕头了,这个shell脚本的意思就是利用tail(显示文本末尾行的内容)命令显示/var/log/syslog(系统日志文件)最后十行的内容,作为一个weber,我敏锐的嗅觉告诉我,这个shell脚本一定有问题,果不其然,沉淀之后的我就是不一样,一眼就看出(经过高人指点)这个tail不是绝对路径,所以我们可以在这里做下文章
5.滥用变量
这里我们把/bin/bash输出到tail里面去,再修改他为最高权限,这样我们的准备工作就做好了,那我们该如何进行提权呢?别急,听我缓缓道来
这里我们把当前目录添加到了环境变量中去,然后我们查看环境变量(env)或者查看$PATH的值(echo $PATH)的时候都可以看见当前目录在我们的$PATH里面,因为$PATH用于指定系统在哪些目录中搜索可执行程序,其中我们这里就有当前目录,而又因为当前目录我们构造了一个tail为/bin/bash,所以我们执行shell脚本的时候就是执行了/bin/bash(这里有这么多目录,为什么偏偏执行.呢?这里体现了$PATH的左结合短路性质,从左边儿开始找,找到了就不找了)
前面我们又说了因为给linuxmaster配置了SETENV,会保留命令行的环境变量,所以我们在sudo执行脚本的时候就可以设置使用的环境变量是我们刚刚构造好的tail,从而执行了提权。
第二个flag:flag{rootflag69426d9fda579afbffd9c2d47ca31d90}
我沉淀的时候,发现了/bin/bash设置环境变量为/bin/bash无可厚非,但我还看见了其他师傅整了个vim??在高人的指点下,我又学到了新东西,在vim的命令模式下我们键入:!/bin/bash可以得到一个shell,也就意味着,如果我们能以root来执行这个shell,那么我们将提权成功
这里有个网站https://gtfobins.github.io/#,他是一个辅助提权的网站,合理运用我们将可以在上面查到很多意想不到的提权命令
这里他给我们提供了一个方式就是vim -c "!/bin/bash",这个-c参数有点眼熟,在之前打Raven:1吧唧的时候我们进行python修改shell为交互式shell和python提权的时候的时候使用过这个参数,在python -c "import pty;pty.spawn('/bin/bash')"中,-c参数是来执行一行python代码的意思,同理,这里的vim -c "!:/bin/bash"的意思也是执行一个vim命令
这里我们把vim命令拷贝出来(只要拷贝出来,不一定是tmp目录),然后我们利用mv命令将其改名为tail,跟我们刚刚一样,将tmp目录导入环境变量
然后我们再次执行shell脚步,同时像刚刚一样设置使用用户自己设定的环境变量
这样我们就完成了提权
6.漏洞利用
还有一种解法,也是经过高人指点后我才明白的
这里我们使用find命令查找到了一些文件,然后我们看谁比较奇怪,就去google,bing,baidu一下,这里我们使用find命令查找的是具有suid权限且属主为root的文件,这些具有suid的s标志二进制文件都将以root权限运行。运行这个二进制文件时产生的进程所属为root。因此我们就可以滥用,违背某二进制原有的初心,通过一些方法手段拿到root shell,从而我们去搜索公开的漏洞或者使用命令进行suid提权(参考https://www.freebuf.com/articles/web/272617.html)
可以看到他的漏洞编号是CVE-2021-4034,我们直接去github上找脚本一把梭
我们找个脚本
git clone命令的意思是从远程代码仓库复制代码到本地,我们这儿需要把那个cve2021-4043.py整到本地来,随便怎么整下来就是,运行即可得到一个具有root权限的shell,成功提权
总结:学到了一些新的东西,信息搜集,python编写的网站可能有debug模式,sql注入(后来提到root后我登进mysql并没有什么有用的东西),环境变量的滥用,suid文件的检索利用,多多积累啦
新手上路,请多指教