Vulnhub-W1R3S 1.0.1 & 详述渗透测试思路

0x00 Introduction

偶然在 b 站上发现个大佬:红队笔记,第一个视频就是讲解的 Vulnhub-W1R3S 靶场。听完之后,不禁感慨,这绝对是我到目前为止看过的最好的教学视频,全程干货,一点废话都没有,而且逻辑清晰,细节满满。于是跟着打了这个靶场,感觉豁然开朗,记录下来以便日后复习。

0x01 nmap 扫描与分析

首先扫描靶机所在网段:

sudo nmap -sn 192.168.46.0/24   
// 扫描模式为主机发现(Ping 扫描)。不进行端口扫描,只检查主机是否在线。
  • 渗透过程中要养成使用普通用户的习惯,特定操作需要 root 权限时再利用 sudo 提升权限,避免误操作或者给恶意代码和反杀留下机会。
  • 遇到一些莫名奇妙的问题时,要想到是不是没给 sudo 权限导致的。

根据靶机上线前后 nmap 扫描结果的变化,确认靶机 ip 地址:

接下来对这个 ip 进行端口扫描

sudo nmap -sT --min-rate 10000 -p- 192.168.46.139
// -sT 表示进行TCP扫描,准确率更高。
// 经验表明 10000 就是合适的扫描速度。
// -p- 表示对所有端口(1-65535)进行扫描。

扫描结果表明,开放了 21, 22, 80, 3306 这四个端口,接下来进行这几个端口的详细信息扫描。这一步很重要,可以确定攻击面和渗透的优先级。

sudo nmap -sT -sV -sC -O -p21,22,80,3306 192.168.46.139
// -sV 表示探测开放服务的版本。
// -sC 使用默认的脚本。
// -O 表示探测操作系统版本。
// -p 表示待扫描的端口
  • 精确地使用参数,分阶段地扫描,会大大提升 nmap 的扫描效率和隐蔽性。

分析以上扫描结果:

  1. 21 是 ftp 文件传输协议的端口,有可能存在匿名登录和信息泄露。
  2. 22 是 ssh 远程登录端口,一般优先级排后。
  3. 80 是 http 协议端口,是最有可能的突破口。
  4. 3306 是 MySQL 默认端口,可能存在弱密码,或者配合渗透测试其它环节完成利用。

紧接着进行 UDP 扫描。虽然 UDP 端口暴露的攻击面比较小,但在信息搜集阶段就应该搜集得越全面越好。当 TCP 端口没有找到突破口的时候,说不定 UDP 也是一条路。

sudo nmap -sU --top-ports 20 192.168.46.139
// 仅检查前 20 个最常用的 UDP 端口。

发现这 20 个端口的状态都是开放/被过滤状态,没有明确开放的:

然后我们再使用 nmap 中自带的脚本 vuln 进行漏洞脚本扫描

sudo nmap -script=vuln -p21,22,80,3306 192.168.46.139

发现一个 DOS 攻击漏洞,但是一般不会利用这个漏洞,可以忽略。同时还发现了一个 CMS 为Wordpress 的登录页面。

虽然 UDP 扫描和漏洞脚本扫描对于这台靶机没有扫描出什么有用信息,但是在信息收集阶段值得尝试。

0x02 FTP渗透

扫描结果表明,ftp 可以匿名登录,用户名输入 anonymous,密码为空:

提示用二进制模式传输文件,所以这里要养成一个习惯,进入 ftp 后首先输入binary切换到二进制模式,否则下载的可执行文件可能是损坏的。

发现三个目录:

首先进入 content 目录,发现三个 .txt 文件:

使用以下命令直接一次性下载多个文件:

mget *.txt

但是每下载一个文件,就需要一个交互式的操作:

如果下载的文件很多的话,就会很麻烦。这里可以输入 prompt 关闭交互模式。

相同操作把其它两个目录的文件也下载下来,并查看。

01.txt:

没什么有用信息,但是也有所收获。之前一直疑惑为什么总看到类似 W1R3S 的写法,现在知道了这种形式叫做 leetspeak,最初是用来解决用户名重复的问题的。对于渗透测试人员,看到 new 这个词,就知道它可能建设得还不完善,此时应该更有信心了。

02.txt:

这是两段加密文本。Kali 中自带一个 hash-identifier:

识别出这是 MD5 加密。找个在线网站解密:

看下一个密文,根据经验判断这是 base64 加密:base64 的字符组成包括 0-9, a-z, A-Z, +, / ,==只在文末出现,最多2个,起补位作用。

kali 中直接进行 base64 解密:

echo 'SXQgaXMgZWFzeSwgYnV0IG5vdCB0aGF0IGVhc3kuLg==' | base64 -d

03.txt:

搜索 ASCII Art Generator ,即可生成这种形式的文字:

emploee-names.txt:

看到这些信息,要基于角色去思考这些人的账号权限有什么,能看到什么信息,这也是渗透测试的重要思路。比方说经理的权限说不定会很高,网页设计者可能在 web 开发中有一些自己的习惯,HR是我们社工的主要对象等等。

worktodo.txt:

I don’t think this is the way to root;we have a lot of work to do, stop playing around…

FTP 能看到的就这么多了。

0x03 Web渗透

浏览器访问 http://192.168.46.139:

是 Apache 的默认页,没什么价值,但现实中不排除存在一些信息泄露。

接下来进行目录爆破

sudo gobuster dir -u http://192.168.46.139 --wordlist /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

挨个试试。首先访问 http://192.168.46.139/wordpress ,发现网页自动跳转到 localhost:

在之前的靶场练习中,我们学过在/etc/hosts文件中手动添加域名和 ip 地址的映射关系,这里也这样操作。但是手动添加映射后,访问 localhost 依然无法连接。我们再添加一个 xxshh.com指向靶机地址以做验证,发现访问成功。原因是 kali 不允许 localhost 指向非本机 ip。目前这条路走不通了。

0x04 CMS渗透

访问 http://192.168.46.139/administrator :

是一个 CMS 安装页面,而且暴露了该 CMS 是 Cuppa。整个页面只有一个 next 按钮可以点。这里要有一个心理预期,要思考下一步操作会不会对服务器做不可逆的修改或者被管理员发现,谨慎操作。

点击 next,看到一个安装的配置页面:

发现一个错误拼写,这在实战中是可以利用的:

因为这种错误具有独特性,实战中在纠结是否进行下一步时,通过搜索这个错误拼写可能找到类似的场景,就会知道下一步操作会带来什么结果。

填写信息后点击 next:

安装失败,此时已经没有其它可用信息了。但是所幸我们已经知道这个 CMS 是 Cuppa 了,接下来的思路就是搜索 Cuppa 是否有公开漏洞可以利用。

searchsploit 是一个命令行工具,用于快速搜索 Exploit Database (https://www.exploit-db.com/) 中的漏洞和利用代码。

searchsploit cuppa 

发现有一个远程文件包含漏洞,我们把这个 25971.txt 下载下来看看怎么利用 :

searchsploit cuppa -m 25971.txt  # m:mirror

查看这个文件,仔细阅读漏洞相关信息及利用:

首先尝试本地文件包含:

http://192.168.46.139/cuppa/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd

发现路径不对:

接下来就要猜路径了,/alerts 肯定要有,已知安装页面的路径是 /administrator,那么猜测:

http://192.168.46.139/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../../../../etc/passwd

发现有反应,但是并没有读取到 passwd 文件:

此时要去思考后端的处理逻辑,urlConfig 这个参数有可能不是 GET 形式,而且 exp 中还提到了 base64 我们还没有用到。

尝试着搜索源码,如果能找到,就可以做代码审计验证我们的猜测了。

/alerts/alertConfigField中搜索相关代码,发现是用 POST 方式处理参数的:

访问 http://192.168.46.139/administrator/alerts/alertConfigField.php ,用 BurpSuite 抓包,修改请求方式,成功读取 passwd 文件:

0x05 密码爆破

每条用户数据的第二条都是 x ,证明密码以 hash 的形式存在了 etc/shadow 中,读取:

新建一个名为 hash 的文件,将有 hash 值的三个用户信息复制进去:

用之前打靶了解到的 john 破解哈希密码:

john hash

很快就破解出了后两个用户,root一直破解不出来:

0x06 ssh登录及提权

一般 www-data 是功能性账号,我们优先探索 w1r3s :

sudo ssh w1r3s@192.168.46.139

登录成功:

第一个 ALL 表示 w1r3s 可以在任何主机上执行命令(适用于所有主机)。第二个 ALL 表示 w1r3s 可以以任何用户身份执行命令。最后的 ALL 表示没有限制,w1r3s 可以执行所有命令。这说明 w1r3s 拥有和 root 一样的权限,以 sudo 的权限运行/bin/bash,提权成功!

0x07 补充

虽然已经拿到了 flag,但我们还是继续探索其它两个端口,毕竟这篇文章的主要目的是详述渗透测试的思路。

首先尝试 mysql 登录。

在一开始没有用户信息时,尝试以 root 身份无密码登录:

mysql -h 192.168.46.139 -u root -p

失败。以 www-data 和 w1r3s 身份登录,也都失败了。于是放弃这个端口。

接下来尝试 22 端口。一般 ssh 暴力破解的可能性不大,并不推荐。但在实际渗透过程中,如果其它方法行不通,也可以尝试一下。

结合 ftp 泄露的信息和可能的用户名构造个字典:

用 hydra 破解密码:

hydra -L user.txt -P /usr/share/wordlists/rockyou.txt ssh://192.168.46.139 -t 4
//rockyou.txt在英语环境中做密码破解效率还是很高的
//-t:线程数

0x08 Conclusion

作为一个网安领域的新人,目前学习了也有几个月了,能明显感觉到自己的进步,但也知道自己水平差得还很远。看完视频,打完这个靶场,我对渗透测试的思路更加明确了。近期任务就是多打 vulnhub,争取早日独立打靶成功。