Wonderland

Write UP

题目是tryhackmeWonderland,使用tryhackme是因为它有学习路线图、更适合新手的靶机以及经济实惠(某鱼有卷)

连接靶机

下载.ovpn文件,启动机器,在自己的机器中使用sudo命令配合openvpn连接环境,然后ping一下靶机地址,确定是否联通

确定ping通

收集信息

使用nmap对靶机进行扫描,获取有用信息,发现开启了22端口(ssh服务)和80端口(http服务)

  • 端口22,默认 SSH(“安全外壳”)协议的端口。
  • 端口80,默认 HTTP 端口。这意味着该机器运行一个网站。

因为ssh服务登录需要凭据,但是我们没有,所以先查看http服务页面,获取有用信息。下面是打开的页面,发现没有什么有用信息(后来发现follow the white rabbit是一个提示),然后查看源码也没有发现。

扫描目录

下一步就尝试扫描目录,我使用了dirsearch工具进行扫描,访问对应目录(301状态码是永久重定向),发现img和r目录下都有信息

扫描结果

img目录

隐写破解

我下载了img目录下的三个图片,并使用stegseek对三个图像进行了隐写破解(只对JPEG,BMP,WAV,AU文件有效),发现white_rabbit_1.jpg有隐写信息,提取其中的信息(--crack选项)。看了很久都看不懂是啥意思。

white_rabbit_1.jpg

提取信息

获取ssh凭据

r目录

最后看了wp和这个图知道了是不断进入目录,使用dirsearch对/r目录继续爆破,发现了a目录,以此类推(/r/a/b/b/i/t)。发现了下面的页面,查看源码获得有利信息。

ssh凭据

SSH登录

发现没有登录页面,所以利用这个信息登录ssh,发现可行。进来发现了root.txt,使用ls -lh发现只有root才有权限查看,但是另外一个文件可以进行操作。

登录成功

walrus_and_the_carpenter.py

发现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目录下的文件)

setuid函数

  • 调用了date命令并且执行返回下一个小时的时间(等不了等不了)

date没有指定绝对路径(/bin/date),使用的时候会检查环境变量,执行优先出现的date命令路径

  • 再获取参数,输出常量

我们利用python库劫持的想法,实现提权。

  1. 添加环境:export PATH=/home/rabbit:$PATH

    /home/rabbit目录下:

    • vim .bashrc

    • 在头部添加export PATH=/home/rabbit:$PATH(这样就可以先检测到/home/rabbit目录下的date)

    • 保存退出执行source .bashrc(使新环境配置启动)

  2. 修改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

  3. 给date执行的权限

    chmod +x date

  4. 执行teaParty文件

在hatter目录下发现了password.txt,是hatter的明文密码(如果前面不想利用密钥免密连接,可以在date文件中修改命令,执行命令操作获取密码登录)

纵向提权

操作一波后,继续看wp,利用枚举漏洞脚本扫机器(需要可执行权限)

利用scp上传到hatter目录,然后执行发现perl配置错误(脚本使用说明

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命令的缺少了安全防范。

posted @ 2023-11-12 14:45  ntrack  阅读(89)  评论(0)    收藏  举报