靶场通关13–westwild
靶机:WestWild: 1.1(VulnHub,作者 Hashim Alshareff)
难度:Intermediate 类型:boot2root(Linux / SMB + 凭据泄漏 + sudo 提权)
攻击机:Kali192.168.236.128靶机:192.168.236.141
一.信息搜集
先用 nmap 做全端口扫描,确认开放服务:
sudonmap-T4-p-192.168.236.141可以看到 22/tcp ssh、80/tcp http、139/tcp netbios-ssn、445/tcp microsoft-ds 处于开放状态。80 端口只是一个几乎没有内容的静态页,真正的入口在 445 的 SMB 服务,先看它有没有共享目录。
在动手之前,先补两个基础概念。
SMB(Server Message Block)是应用层的网络文件共享协议,最初由 IBM 提出、微软将其发扬光大,主要用来在局域网内共享文件、打印机和命名管道。Linux 上由 Samba 实现同名服务,所以 Linux 靶机开放 139/445 并不奇怪。它有两个常用端口:139 走 NetBIOS over TCP,445 直接跑在 TCP 上,现代系统基本以 445 为主。SMB 之所以常被拿来打,是因为它的攻击面很宽:匿名/空口令共享、弱口令爆破、共享目录里的备份和配置文件、以及 MS17-010(永恒之蓝)、SMBGhost 这类协议层漏洞;即便没有漏洞,一个配置不当的共享也经常直接泄漏凭据。本例就属于最朴素的一种——匿名可读共享。
smbclient是 Samba 套件自带的命令行 SMB 客户端,交互方式和 FTP 很像:连上共享之后可以用ls、cd、get、put这些命令浏览和传输文件。常用参数:
-L <host>:列出目标主机的共享列表(List shares)-N:不使用密码,即以空密码/匿名身份连接-U <user>[%password]:指定账号密码,-U anonymous表示匿名用户- 进入共享后:
ls列目录、cd切换目录、get下载文件、put上传文件、!命令执行本地 shell 命令
先列出共享:
smbclient-L//192.168.236.141/-N结果列出print$、wave(注释 WaveDoor)、IPC$。带$后缀的是默认隐藏共享:print$放打印机驱动,IPC$用于进程间通信(命名管道),一般都不是我们要找的;wave是管理员自定义的共享,往往才藏业务数据。直接匿名连上去:
smbclient //192.168.236.141/wave-Nlsget FLAG1.txt get message_from_aveng.txt匿名用户可读,共享里只有两个文件,分别下载到本地。
二.解密 FLAG1,拿到初始凭据
把FLAG1.txt拉到 Kali 桌面上,用 Mousepad 打开(或者直接cat),内容是一整行 Base64:
对 FLAG1 的 Base64 解码:
echo'RmxhZzF7V2VsY29tZV9UMF9USEUtVzNTVC1XMUxELUIwcmRlcn0KdXNlcjp3YXZleApwYXNzd29yZDpkb29yK29wZW4K'|base64-d
除了第一个 flag 之外,还顺手拿到了明文账号密码:
Flag1{Welcome_T0_THE-W3ST-W1LD-B0rder} user:wavex password:door+open三.ssh 登录与主机信息收集
用上面这组凭据直接 ssh 登录:
sshwavex@192.168.236.141# password: door+open登录成功,系统为 Ubuntu 14.04.6 LTS(i686),内核 4.4.0-142-generic,属于比较老的版本。
先找s位权限文件,再看sudo -l,最后再来看定时任务,结果都失败了
再想到之前我们能在/wave目录下看到aveng留下的求助信,提示我们要重置密码,但是我们可以看到passwd,shadow文件都不可写.我们就去
找当前用户可写的文件,重点看有没有被别人“遗忘”的脚本或配置:
find/-writable-typef2>/dev/null
在结果里注意到一个很可疑的路径:/usr/share/av/westsidesecret/ififoregt.sh(同时也能看到~/wave/FLAG1.txt、message_from_aveng.txt,和 SMB 共享里的是同一份)。查看这个脚本:
cat/usr/share/av/westsidesecret/ififoregt.sh脚本内容:
#!/bin/bashfiglet"if i foregt so this my way"echo"user:aveng"echo"password:kaizen+80"作者在这里埋了第二个账号的明文密码(标题里的 “if i foregt” 就是 “if I forget” 的故意拼错)。
四.su 切换用户并提权到 root
用刚拿到的密码切换到aveng:
suaveng# password: kaizen+80切过去之后先看这个用户能 sudo 什么:
sudo-l结果里最关键的一行:
User aveng may run the following commands on WestWild: (ALL : ALL) ALL也就是说aveng可以以 root 身份执行任意命令,等于已经拿到了 root。直接起一个 root shell:
sudo/bin/bashidcd/root&&lscatFLAG2.txt拿到第二个 flag:
Flag2{Weeeeeeeeeeeellco0o0om_T0_WestWild}