一、渗透设备
kali、vsphere(两台网络连接都为NAT模式,两台在同一个网段中)
二、任务描述
黑盒渗透:在渗透拿到授权之后,什么信息都没有,需要找出风险点;
何为渗透,在定义好目标之后,朝着目标前进,中间碰到阻碍要么攻击掉要么绕过(详尽的信息收集(打点、踩点))
三、步骤
1)扫描
1、nmap -sP
探测指定网络中有哪些主机在线(存活),它通过发送ARP请求或ICMP Echo请求来快速判断一个IP地址是否有活跃的设备。
2、nmap -sS
nmap -sS
执行的是 TCP SYN 扫描,通常被称为 “半开放扫描” 或 “ stealth scan”(隐秘扫描) 。它主要用于快速、相对隐蔽地探测目标主机上哪些TCP端口是开放的。
工作原理(核心)
-sS
扫描的巧妙之处在于,它不会完成三次握手:
-
Nmap(客户端)向目标服务器的指定端口发送一个
SYN
包。 -
如果目标端口开放,目标服务器会回复一个
SYN/ACK
包。 -
Nmap收到
SYN/ACK
后,不会发送ACK
包来确认,而是直接发送一个RST
包来重置连接
为什么这样做?
-
速度更快: 只完成握手过程的一半,节省了数据包往返的时间。
-
更加隐蔽: 因为连接从未完全建立,许多简单的应用程序日志不会记录这种连接尝试(尽管专业的防火墙和IDS/IPS系统仍然可以检测到)。它不会像全连接扫描(
-sT
)那样在目标服务上产生完整的连接日志,因此得名“隐秘扫描”。
3、nmap -A
nmap -A
执行的是 “激进扫描” 或 “全面侦察扫描” 。它不仅仅扫描端口,还会综合多种技术来识别操作系统、服务版本、脚本扫描,甚至尝试进行 traceroute,旨在一次性获取关于目标的最全面信息。
它包含了什么?
1、操作系统检测 (-O
)
-
作用: 探测目标主机的操作系统类型和版本(如 Windows 10、Linux Kernel 5.4、Ubuntu 20.04 等)。
-
原理: 通过分析目标对一系列精心设计的TCP、UDP和ICMP探测包的响应特征(如TCP/IP协议栈指纹),与Nmap内置的数据库进行比对,从而得出判断。
2、版本检测 (-sV
)
-
作用: 不仅告诉你端口是开放的,还告诉你端口上运行的是什么软件及其具体版本号(如
OpenSSH 8.4p1
,Apache httpd 2.4.41
,Microsoft IIS 10.0
)。 -
原理: 与端口上的服务进行真正的通信,分析其响应标语(Banner)和行为特征。例如,向80端口发送一个HTTP请求,分析返回的Server头字段。
3、脚本扫描 (-sC
)
-
作用: 使用Nmap脚本引擎(NSE)运行一系列默认的脚本。这些脚本可以完成各种任务,如:
-
发现: 查找网络共享、SNMP信息等。
-
漏洞: 检测已知的常见漏洞。
-
安全检查: 检查简单的配置错误(如匿名FTP登录)。
-
-
原理: 在版本检测的基础上,用专门的Lua脚本与服务进行更深入的交互,提取有价值的信息。
4、Traceroute (--traceroute
)
-
作用: 显示从你的主机到目标主机之间的网络路径(经过哪些路由器)。
-
原理: 通过设置数据包的TTL(生存时间)字段,追踪数据包到达目标所经过的每一跳。
简单来说:-A ≈ -O -sV -sC --traceroute
注意: 由于 -A
包含了操作系统检测 (-O
),而 -O
需要原始套接字权限,因此通常需要使用 sudo
。
2)攻击
msfconsole
它是什么?
-
Metasploit Framework (MSF): 一个开源的、强大的渗透测试和安全审计平台,由Rapid7公司维护。它提供了大量现成的漏洞利用代码、辅助工具和 payloads。
-
msfconsole: 是访问和控制这个框架的核心命令行界面。它提供了一个统一的、功能丰富的环境,让用户能够高效地使用Metasploit的所有功能。
核心功能与工作原理
msfconsole
的核心是模块化的。它包含了不同类型的模块,你可以像搭积木一样组合它们来完成一次完整的渗透测试。
领域 | 说明 |
---|---|
渗透测试 | 主要用途。安全专业人员模拟黑客攻击,评估系统安全性。 |
漏洞研究与验证 | 安全研究员用它来验证新发现的漏洞(PoC)。 |
安全教学 | 在可控环境中教授网络安全和 Ethical Hacking 的核心概念。 |
红色团队演练 | 作为红队工具包的一部分,进行更复杂的模拟攻击。 |
重要警告:
msfconsole
是一个专业的网络安全工具,绝非给“脚本小子”用来进行非法活动的玩具。未经授权使用 Metasploit 对任何系统进行扫描或攻击都是违法的犯罪行为。务必仅在你自己拥有或已获得明确书面授权的环境中使用它。
进入msf6
1)search Drupal
在 Metasploit 庞大的模块库中,快速搜索所有与XXXXX内容管理系统相关的漏洞利用、辅助扫描和后渗透模块,帮助你发现和利用目标系统的已知弱点。
执行完这步操作会出现一个表格化的结果
如何阅读这个表格:
-
Name: 模块的完整路径和名称。
auxiliary/
是辅助模块,exploit/
是漏洞利用模块,post/
是后渗透模块。 -
Disclosure Date: 漏洞被公开的日期。日期越近,目标系统可能还未打补丁。
-
Rank: 模块的可靠性评级。
excellent
通常意味着高稳定性和高成功率。 -
Check:
Yes
表示该模块支持安全检查功能,可以在真正攻击前先验证目标是否存在此漏洞,避免“盲打”和不必要的日志记录。 -
Description: 模块的简短描述,说明了它利用的是什么漏洞或执行什么功能
2)use 1
快速选择并加载当前搜索结果列表中的第X个模块,以便后续进行配置和利用。
show options(它通常在 use
了一个模块之后立即执行)
show options
的作用是:显示当前已加载模块的所有可配置参数及其当前状态,告诉你需要设置哪些信息才能让这个模块正常工作。
-
Name: 参数的名称。
-
Current Setting: 该参数的当前值。如果为空(如
RHOSTS
,LHOST
),说明你必须手动设置它。 -
Required: 该参数是否是必须的。
yes
表示必须设置,no
表示可选。 -
Description: 参数的简要描述。
3)set RHOSTS 192.168.X.X
show options
4)run
run
的作用是:执行当前已经配置好的模块。根据模块类型的不同,它可能是发起一次攻击(Exploit),运行一次扫描(Auxiliary),或是执行一个后渗透动作(Post)。
3)权限提升
1、初始 Meterpreter 操作
输入以下命令获取基础 shell:
shell
作用:从Meterpreter会话中启动一个非交互式的、极其简单的命令行Shell
2、升级为完整功能 shell
执行 Python 命令生成交互式终端:
python -c 'import pty;pty.spawn("/bin/bash")'
-
作用:利用Python生成一个交互式的TTY Shell,大幅改善用户体验和功能。
-
命令分解:
-
python -c
:告诉Python解释器执行后面单引号内的字符串代码。 -
import pty
:导入Python的pty
(伪终端)模块。这个模块可以用来启动一个虚拟的终端。 -
pty.spawn("/bin/bash")
:使用pty
模块生成一个新的/bin/bash
进程。这个新的Bash进程会认为自己是在一个真实的终端中运行的,因此它会启用所有交互式功能,例如命令历史、作业控制、行编辑(Tab补全)等。
-
成功执行后提示符将显示为类似 www-data@DC-1:/var/www$
的格式。
3、提权信息收集
查找具有 SUID 权限的可执行文件:
find / -perm -4000 2>/dev/null
-
作用:在整个文件系统中搜索所有设置了SUID权限位的可执行文件。这是Linux/Unix系统中一种常见的提权方法。
-
命令分解:
-
find /
:从根目录开始搜索整个文件系统。 -
-perm -4000
:查找权限模式包含(-
表示包含)八进制数4000
的文件。4000
正是SUID权限位的标志。 -
2>/dev/null
:将命令执行过程中的所有错误信息(标准错误流,文件描述符为2)重定向到Linux的“垃圾箱”/dev/null
。这样做是为了屏蔽大量“Permission denied”等错误提示,使输出结果更清晰,只显示我们有权限查看的文件。
-
该命令会列出所有具备 SUID 权限的程序路径。渗透测试者需要在这些结果中寻找那些不常见、版本较老或有已知漏洞的程序,作为下一步攻击的目标。
4、尝试利用 find
命令本身提权
cd /tmp(这是一个所有用户都有读写权限的临时目录,是进行此类测试的常见位置。)
mkdir 123
find 123 -exec '/bin/sh' \;
-
find 123 -exec '/bin/sh' \;
:-
find 123
:在当前目录(/tmp
)下查找名为123
的文件或目录。它肯定会找到我们刚创建的那个。 -
-exec ... \;
:find
命令的参数,表示对找到的每一个结果,执行...
指定的命令。\;
是结束符。 -
'/bin/sh'
:要执行的命令。这里我们让它执行/bin/sh
,即启动一个Shell。
-
4)继续寻找其他的 flag
如图所示,命令提示符已经从 www-data@DC-1:/tmp$
变成了简单的 #
。在 Linux 中,#
就是 root 用户的特权提示符。权限已从普通的 www-data
用户提升到了 root 用户。
敏感信息收集,特别是寻找Web应用程序的配置文件和其他可能包含敏感数据(如flag、数据库密码)的文件。
1)cd /var/www
-
详细讲解:
-
在标准的LAMP(Linux, Apache, MySQL, PHP)或LEMP(Linux, Nginx, MySQL, PHP)环境中,
/var/www/
是Apache或Nginx服务器默认的网站根目录。 -
所有通过Web浏览器访问的网站文件(如HTML、PHP、图片、CSS等)通常都存放在这个目录或其子目录下。
-
切换到这里是进行Web应用渗透测试的第一步,从这里开始可以分析网站的整体结构。
-
2)ls
-
典型的输出可能包括:
-
html/
或public_html/
:主网站目录。 -
sites/
:一个包含多个站点配置的目录(常见于Drupal等CMS)。 -
直接的
flag1.txt
文件。 -
其他自定义的目录或文件。
-
-
这个命令帮助攻击者绘制出网站的初步地图,决定下一步的探查方向。
3)cat flag1.txt
-
详细讲解:
-
在CTF挑战中,flag是一段特殊的字符串(如
FLAG{Th1s_1s_4_Fl4g}
),是通关的目标。 -
cat
(concatenate) 命令本用于连接和显示文件。这里它直接显示第一个flag的内容。 -
找到并提交这个flag通常代表完成了“初始访问”或“基础信息收集”阶段的目标。
-
4)cd sites
-
在Drupal中,
/var/www/sites/
目录用于存放所有与站点相关的配置、模块、主题和文件。/var/www/sites/default/
是默认站点的核心配置目录。
5)cd default
-
详细讲解:
-
这是Drupal默认站点的核心配置目录。这里存放着最关键的文件。
-
6)ls
-
详细讲解:
-
攻击者再次使用
ls
来查看这个关键目录里有什么。 -
最重要的目标文件通常会立刻出现:
settings.php
。 -
其他可能存在的文件包括:
-
files/
:存放用户上传文件的目录。 -
modules/
:站点特定的模块。 -
themes/
:站点特定的主题。
-
-
7)cat settings.php
详细讲解:
-
文件重要性:在Drupal中,
settings.php
是核心配置文件。它包含了数据库连接信息、站点安全盐(Hash Salt)等所有让网站正常运行所必需的最高机密。 -
预期收获:攻击者执行此命令的目的是寻找以下信息:
-
数据库连接凭据:
-
-
第二个flag:CTF挑战中也经常将flag放在这个配置文件中作为一部分。
-
其他配置:了解网站结构,为后续攻击做准备。
-
到此为止,我已经从网站的配置文件里找到了第二个flag(flag2
)和数据库的用户名密码。
思路,直接脱库,构造可登录账密(1.直接连接并导出整个数据库(脱库);2. 利用数据库中的信息,构造一个可以登录网站后台的管理员账户(或者修改现有管理员密码),从而获得网站的最高管理权限。)
5)数据库攻破
侦察数据库
1、进入shell命令行
2、mysql -udbuser -pR0ck3t
-
作用:登录MySQL数据库。
-
详解:
-
mysql
:调用MySQL客户端程序。 -
-udbuser
:使用用户名dbuser
进行连接。 -
-pR0ck3t
:使用密码R0ck3t
进行连接(-p
和密码之间没有空格)。
-
-
结果:如果账密正确,命令行提示符会变为
mysql>
,表示成功进入数据库管理系统。
3、show databases;
-
作用:列出当前MySQL服务器上所有的数据库。
-
详解:攻击者需要查看有哪些数据库,以识别出哪个是网站使用的数据库(通常根据名字判断,如
drupaldb
)。
4、use drupaldb;
-
作用:选择要操作的数据库。
-
详解:切换到名为
drupaldb
的数据库。后续的所有命令(如查询、更新)都将在这个数据库上执行。
5、show tables;
-
作用:列出当前数据库中的所有表。
-
详解:攻击者需要找到存储用户信息的表。在Drupal等CMS中,这个表通常就叫
users
。
6、select * from users \G
-
作用:查看
users
表中的所有数据。 -
详解:
-
select * from users
:标准的SQL查询语句,意思是“从users表中选择所有字段(*
)”。 -
\G
:这是MySQL客户端的命令,不是SQL语句。它将查询结果的显示方式从“行模式”改为“垂直模式”。 -
为什么用
\G
:因为users
表的pass
(密码哈希)字段非常长,用传统行模式会换行,难以阅读。垂直模式让每个字段单独一行显示,清晰可读。*************************** 1. row ***************************
-
-
uid: 1 name: admin pass: $S$ExAmPlEHaShFrOmThEDaTaBaSe123456789 ...
生成攻击载荷
1、再次回到shell命令行
2、ls
-
作用:列出当前目录的文件和文件夹。
-
详解:攻击者现在位于网站的根目录(如
/var/www/html
)。他需要确认当前目录包含Drupal的核心文件,特别是包含用于生成密码哈希的脚本。
3、php scripts/password-hash.sh 123
-
作用:为新密码生成Drupal认可的加密哈希值。这是最关键的一步。
-
详解:
-
php
:调用PHP解释器。 -
scripts/password-hash.sh
:这是Drupal框架自带的一个命令行工具,专门用于为给定的明文密码生成对应的加密哈希值。 -
123
:是攻击者想要设置的新密码(一个非常弱、容易记住的密码)。password: 123
-
-
hash: $S$F1fB6LgqJGNMW4412gG4gC5W7B5uUOq6v6b5b5b5b5b5b5b5b5b5b5
实施攻击
1、mysql -udbuser -pR0ck3t
-
作用:再次登录MySQL数据库。准备执行最终的更新操作。
2、show databases;
3、use drupaldb;
-
作用:再次确认操作目标数据库。确保在正确的数据库上执行危险操作。
4、update users set pass="密文" where name="admin";
-
作用:执行最终的攻击操作——修改管理员密码。
-
详解:
-
update users
:更新users
表。 -
set pass="..."
:将pass
字段的值设置为上一步生成的新哈希字符串。 -
where name="admin"
:这是一个条件子句,指定只更新name
字段为"admin"
的那一条记录。如果没有这个条件,将会重置所有用户的密码,这是非常危险的。
-
-
最终结果:执行成功后,数据库会返回提示:
Query OK, 1 row affected
。这表示admin
用户的密码已被成功重置为123
。
6)获取最终凭证
拿到root权限
1、cd /root
2、ls
3、cat thefinalflag.txt
这三条简单的命令代表了一次渗透测试的终极胜利和终点。
-
cd /root
:验证权限。成功进入此目录是获得root权限的象征。 -
ls
:寻找目标。定位最终要获取的凭证文件。 -
cat thefinalflag.txt
:获取战利品。读取最终flag,标志着完全彻底地控制了目标系统。
在现实世界中,这相当于攻击者已经:
-
完全掌控了服务器:可以安装软件、修改系统配置、查看所有用户的文件、窃取所有数据。
-
实现了权限持久化:可以在系统中埋藏后门,确保以后随时可以回来。
-
可以作为跳板:以此服务器为基地,向网络内部的其他机器发起新的攻击(横向移动)。
因此,这条命令序列是整个渗透过程的高潮,表明系统已被完全攻陷。对于防御方来说,一旦发现攻击者到达此阶段,意味着事态已经非常严重,需要立即进行应急响应。
四、总结
1、最经典 & 最常被扫描的端口
端口号 | 协议 | 服务名称 | 说明 |
---|---|---|---|
20, 21 | TCP | FTP | 文件传输协议。20用于数据传输,21用于控制连接。注意:FTP默认不加密。 |
22 | TCP | SSH | 安全外壳协议。用于加密的远程登录、文件传输(SCP/SFTP)和管理。是Telnet的安全替代品。 |
23 | TCP | Telnet | 远程登录协议。明文传输,非常不安全,现已基本被SSH取代。 |
25 | TCP | SMTP | 简单邮件传输协议。用于发送电子邮件。 |
53 | TCP/UDP | DNS | 域名系统。将域名解析为IP地址。TCP用于区域传输,UDP用于常规查询。 |
67, 68 | UDP | DHCP | 动态主机配置协议。67是服务器端,68是客户端,用于自动分配IP地址。 |
80 | TCP | HTTP | 超文本传输协议。用于未加密的网页传输。 |
110 | TCP | POP3 | 邮局协议版本3。用于从邮件服务器下载电子邮件到本地客户端。 |
123 | UDP | NTP | 网络时间协议。用于同步网络内计算机的时间。 |
139, 445 | TCP | SMB | 服务器消息块。用于Windows文件和打印机共享。139是NetBIOS over TCP,445是直接SMB。 |
143 | TCP | IMAP | 互联网消息访问协议。用于在邮件服务器上管理电子邮件(邮件留在服务器上)。 |
443 | TCP | HTTPS | HTTP Secure。用于加密的网页传输(HTTP over SSL/TLS)。 |
993 | TCP | IMAPS | IMAP over SSL。加密的IMAP。 |
995 | TCP | POP3S | POP3 over SSL。加密的POP3。 |
3306 | TCP | MySQL | MySQL数据库默认端口。 |
3389 | TCP | RDP | 远程桌面协议。用于远程连接Windows图形化界面。 |
5432 | TCP | PostgreSQL | PostgreSQL数据库默认端口。 |
6379 | TCP | Redis | Redis 内存数据库默认端口,如果配置不当会有未授权访问漏洞。 |
27017 | TCP | MongoDB | MongoDB NoSQL数据库默认端口。 |
2、端口敲门(Port Knocking)
是一种隐蔽式安全技术,它通过在一系列预先定义好的封闭端口上发送特定序列的数据包,来“敲开”真正需要访问的服务端口(如SSH)。在敲门序列正确之前,服务端口对外界是完全隐藏(关闭或过滤)的。
1. 核心思想
想象一栋建筑有一个秘密俱乐部。俱乐部的大门(服务端口,如22/SSH)平时看起来是锁死且不起眼的(端口显示为closed
或filtered
)。只有先在附近几个特定的、不相关的门(敲门端口,如序列1000, 2000, 3000
)上按正确顺序敲击(发送数据包),俱乐部的大门才会悄然打开一段时间,允许你进入。
2. 工作原理
-
初始状态:
-
服务器上的关键服务(如SSH)实际在运行并监听,但防火墙(如
iptables
)规则主动丢弃(DROP) 所有发往该服务端口的包。因此,外部扫描器(如Nmap)会看到该端口是filtered
(被过滤)** 或closed
(关闭)**,无法得知服务是否存在。
-
-
敲门过程:
-
授权用户使用一个客户端工具(或简单的
telnet
/nmap
命令),按照预设的秘密序列,依次向服务器的一系列敲门端口发送数据包(例如TCP SYN包到端口1000
, 然后2000
, 然后3000
)。 -
服务器上运行着一个 “敲门守护进程”(knockd),它持续监控防火墙日志,寻找这个特定的序列。
-
-
权限授予:
-
一旦
knockd
检测到正确的敲门序列,它会动态地修改防火墙规则,将你的源IP地址临时加入到允许访问目标服务(如SSH)的白名单中。
-
-
访问服务:
-
现在,你可以在短暂的时间窗口内(例如10秒),像正常一样连接SSH服务了。
-
-
自动关闭:
-
超时后,或者在你连接之后,
knockd
会自动再次修改防火墙规则,将你的IP从白名单中移除,重新隐藏服务端口。
-
3、nmap -A 192.168.X.X -p- 中-p-的作用
-p-
:
作用: 告诉Nmap扫描所有TCP端口(从端口1到端口65535)。
对比: 默认情况下,Nmap只扫描最常见的1000个端口。-p-
确保了不会有任何端口被遗漏,常用于发现那些运行在非常见端口上的隐蔽服务。
4、重点关注文件与端口分析、网页交互与漏洞探测、框架识别与利用
1、在nmap -A
扫描结果中,install
文件通常包含关键配置信息或漏洞入口,需优先检查其内容。如果看到site站点,判断出网页是集成CMS框架,不是程序员手写代码。
2、若发现80端口开放,对应的网址可直接访问。
访问网页后,系统性地点击所有可交互元素(如按钮、链接、表单)。用户名密码登录处可尝试以下方法:
- 输入常见弱密码组合(如
admin/admin.
)。若页面报错或无解析,证明.没被解析,可能无法执行攻击;若特殊字符.被解析,可插入攻击语句。 - 测试XSS注入点
3、页面底部若显示power by XXXX
,表明使用了特定框架(如WordPress、Django)。此时应:
- 访问框架官网,核对最新版本号。
- 确认是否为集成CMS框架(如Joomla),而非自定义开发代码,此类框架通常存在公开漏洞利用方式(到漏洞库进行查找)。