1. 名词解释
渗透测试常用专业术语
1. POC,EXP,Payload与Shellcode等
POC:全称"Proof of Concept",中文"概念验证",常指验证某个概念或理论是否可行的过程或实验(代码)。
EXP:全称"Exploit",指的是利用软件、硬件或网络系统中的漏洞来执行未经授权的操作或攻击的技术或代码。
Payload:中文"有效载荷",在计算机安全和网络攻击中指的是在漏洞被成功利用后,执行的特定代码或命令。Payload 是 EXP(Exploit)的关键部分,因为它决定了攻击的具体效果,如获取未授权访问、窃取数据、执行恶意操作等。
Shellcode:简单翻译"Shell 代码",是Payload的一种,由于建立正向/反向shell而得名。
后门/webshell :后门 是指在系统中预留的秘密入口,允许攻击者绕过正常的认证机制访问系统。后门可以存在于操作系统、应用程序或硬件设备中,通常由恶意攻击者或有意植入,以便日后秘密访问和控制系统。WebShell 是一种通过Web服务器提供的远程控制工具,通常以脚本的形式存在。它允许攻击者通过Web浏览器远程执行命令、操作文件系统和控制受感染的服务器。是后门的一种。
木马/病毒 :木马(Trojan Horse) 和 病毒(Virus) 是两种常见的恶意软件类型,它们的主要目的是通过不同的方法入侵和破坏计算机系统,窃取数据,或执行其他恶意活动。木马 是一种伪装成合法程序或文件的恶意软件,目的是欺骗用户下载和运行它。一旦运行,木马会在后台执行恶意活动,如窃取敏感信息、创建后门、远程控制计算机等。病毒 是一种能够自我复制并传播的恶意软件。病毒通常通过感染文件、程序或系统引导区进行传播,并在宿主文件执行时触发恶意行为,如破坏数据、影响系统性能等。
反弹 :反弹,是在网络安全领域常见的一种攻击技术,通常与木马、Shellcode 或 WebShell 等恶意软件结合使用。其目的是绕过防火墙或其他网络安全设备,建立从受害者机器到攻击者机器的反向连接,从而使攻击者能够远程控制受害者的系统。这种技术也称为 反向Shell(Reverse Shell)。
回显(Echo) 是在计算机网络攻击和渗透测试中常用的技术,主要用于验证攻击是否成功以及收集目标系统的信息。通过回显,攻击者可以确认执行的命令或注入的代码的结果,从而判断进一步的攻击策略。以下是回显在不同场景下的具体应用和防御措施。
跳板(Pivoting) 是网络渗透测试和攻击中常用的一种技术,攻击者通过已经攻陷的主机作为中转站,进一步攻击同一网络中的其他目标。跳板技术帮助攻击者绕过网络隔离和防火墙限制,扩大攻击范围,获取更多的信息和资源。
黑白盒测试 :黑盒测试和白盒测试是软件测试中常见的两种方法,它们分别关注于不同的测试视角和方法。了解这两种测试的特点、适用场景和技术,可以帮助测试人员选择最合适的测试策略,从而提高软件的质量和安全性。黑盒测试 是一种软件测试方法,测试人员不需要了解软件的内部结构和实现细节,而是基于软件的功能和需求进行测试。测试人员关注输入和输出,而不关心内部的处理过程。白盒测试是一种软件测试方法,测试人员需要了解软件的内部结构和实现细节,基于代码逻辑进行测试。测试人员关注程序的控制流和数据流。
|------|-----------|---------------|
| 知识需求 | 不需要了解内部实现 | 需要了解内部实现和代码结构 |
|-----|-----------|----------|
| 关注点 | 功能行为和需求规格 | 代码逻辑和控制流 |
|------|-------------|----------|
| 测试对象 | 整体系统、子系统、模块 | 函数、方法、模块 |
|------|------------|------------|
| 主要目的 | 验证功能是否符合需求 | 验证代码实现的正确性 |
|------|-----------|---------|
| 设计依据 | 需求文档和功能规格 | 代码结构和逻辑 |
|-----|----------|----------|
| 覆盖率 | 主要关注功能覆盖 | 主要关注代码覆盖 |
|------|----------------------|---------------------|
| 常见技术 | 等价类划分、边界值分析、决策表、状态转换 | 语句覆盖、分支覆盖、路径覆盖、条件覆盖 |
暴力破解(Brute Force Attack) 是一种尝试所有可能的密码组合或密钥,直到找到正确的密码或密钥的攻击方法。这种方法的核心思想是通过穷举所有可能性来获取目标系统的访问权限。虽然暴力破解方法简单直接,但由于计算量庞大,它通常需要大量的时间和计算资源。
社会工程学(Social Engineering) 是一种利用心理操控、欺骗和操控技巧来获取敏感信息、访问权限或进行其他恶意活动的攻击技术。社会工程学攻击的核心是通过利用人类的心理漏洞和社会行为,而不是依赖技术漏洞来实现攻击目标。
撞库(Credential Stuffing) 是一种网络攻击技术,攻击者利用从其他数据泄露事件中获得的用户名和密码组合,尝试在不同的网站或服务上进行登录,以获取未经授权的访问。撞库攻击基于两个主要假设:用户在多个网站上使用相同的用户名和密码组合,以及这些组合可能在泄露的数据中已经存在。
ATT&CK(Adversarial Tactics, Techniques, and Common Knowledge) 是由MITRE公司开发和维护的一个全面的知识库,记录了各种网络攻击者在攻击过程中使用的战术、技术和方法。ATT&CK框架为安全专业人士提供了一种标准化的方法来理解、分析和防御网络攻击。
2. 几点注意
POC是用来证明漏洞存在的,EXP是用来利用漏洞的,两者不是一类,或者说,POC通常是无害的,EXP通常是有害的,有了POC,才有EXP。
Payload有很多种,它可以是Shellcode,也可以直接是一段系统命令,同一个Payload可以用于多个漏洞,但每个漏洞都有自己的EXP,也就是说不存在通用的EXP。
Shellcode也有很多种,包括正向的,反向的,甚至
2. 操作系统
1.Windows&Linux常见命令
1.Linux命令
2.cmd命令
3.powershell
Powershell攻击指南黑客后渗透之道系列------基础篇
Powershell攻击指南黑客后渗透之道系列------进阶利用
Powershell攻击指南黑客后渗透之道系列------实战篇
2.文件权限&服务权限&用户权限
1. 文件权限
文件权限控制对计算机文件的访问和操作,包括读取、写入和执行权限。文件权限在操作系统中定义了用户和组对文件或目录的访问级别。
文件权限的基本概念
- 读取权限(Read):允许用户查看文件内容,但不能修改。对目录而言,读取权限允许用户列出目录中的文件和子目录。
- 写入权限(Write):允许用户修改文件内容。对目录而言,写入权限允许用户创建、删除或重命名目录中的文件和子目录。
- 执行权限(Execute):允许用户执行文件。如果文件是程序或脚本,执行权限允许用户运行该文件。对目录而言,执行权限允许用户进入目录并访问目录中的文件。
权限表示方式
-
Unix/Linux 系统 :文件权限通常通过三种方式表示(例如
rwxr-xr--
):- Owner(用户):文件的所有者权限。
- Group(组):文件所在组的权限。
- Others(其他用户):所有其他用户的权限。
权限通常以字符(
r
、w
、x
)表示,或者以数字(0-7
)表示(例如755
)。 -
Windows 系统:使用访问控制列表(ACL)来管理文件权限,可以设置用户或组的权限,如完全控制、读取、写入等。
权限配置示例
-
Linux:
chmod 755 filename
:设置文件权限为所有者可读写执行,组用户和其他用户可读执行。chown user:group filename
:更改文件所有者和所属组。
-
Windows:
- 右键点击文件或文件夹,选择"属性",在"安全"标签中配置用户和组的权限。
2. 服务权限
服务权限控制操作系统服务或应用程序服务的访问和管理。这些权限决定了服务在系统上的行为、启动、停止及配置等。
服务权限的基本概念
- 启动权限:决定了用户或组是否可以启动某项服务。
- 停止权限:决定了用户或组是否可以停止某项服务。
- 配置权限:决定了用户或组是否可以修改服务的配置设置。
- 控制权限:包括重新启动、暂停、恢复等服务控制操作。
权限配置示例
-
Windows 系统:
- 使用
Services.msc
工具可以查看和管理系统服务的权限。 - 使用
sc sdshow [service_name]
命令查看服务的安全描述符。
- 使用
-
Linux 系统:
- 使用
systemctl
工具来管理服务(例如systemctl start service_name
)。 - 服务的权限通常由
/etc/systemd/system/
目录下的服务配置文件管理。
- 使用
3. 用户权限
用户权限决定了操作系统中的用户可以进行哪些操作和访问哪些资源。这些权限包括对文件、服务、网络和系统资源的访问控制。
用户权限的基本概念
- 本地用户权限:控制用户在本地计算机上的操作权限。
- 组权限:通过将用户分配到不同的用户组来管理权限,组权限通常适用于所有组成员。
- 系统权限:控制用户在操作系统级别的管理权限,如安装软件、修改系统设置等。
权限配置示例
-
Windows 系统:
- 使用"计算机管理"工具中的"本地用户和组"部分来管理用户账户和组。
- 使用"组策略"管理系统级别的用户权限(例如
gpedit.msc
)。
-
Linux 系统:
- 使用
useradd
和usermod
命令来创建和修改用户账户。 - 使用
passwd
命令来设置或更改用户密码。 - 使用
sudo
命令配置用户权限,通过/etc/sudoers
文件管理。
- 使用
权限管理的最佳实践
-
最小权限原则:
- 仅授予用户和服务执行其职责所需的最低权限,减少潜在的安全风险。
-
定期审计:
- 定期检查和审计文件权限、服务权限和用户权限,确保它们符合安全策略和要求。
-
分离权限:
- 将不同的权限分配给不同的用户和组,避免将所有权限集中在单一用户或组中。
-
强密码和多因素认证:
- 强化用户和服务账户的安全性,通过强密码和多因素认证减少未经授权访问的风险。
-
日志记录和监控:
- 记录和监控文件访问、服务操作和用户活动,及时发现和响应异常行为。
-
最小化服务和用户账户:
- 删除不必要的服务和用户账户,减少攻击面。
3. 系统用户&用户组&服务用户等分类
1. 系统用户(System Users)
系统用户是指在计算机系统中创建的用户账户,它们用于执行系统操作、运行应用程序和进行管理任务。系统用户通常包括以下几类:
本地用户
- 定义:本地用户是指在本地计算机上创建和管理的用户账户。这些账户只在本地计算机上有效。
- 特点:每个本地用户都有自己的权限和设置,与其他计算机上的用户账户独立。
- 管理 :在Windows系统中,可以通过"计算机管理"工具中的"本地用户和组"来管理;在Linux系统中,使用
useradd
、usermod
、passwd
等命令。
网络用户
- 定义:网络用户是指在网络环境中创建的用户账户,通常用于访问网络服务和资源。
- 特点:网络用户账户通常由域控制器(在Windows域环境中)或网络目录服务(如LDAP)管理。
- 管理:在Windows域环境中,通过"Active Directory用户和计算机"工具进行管理;在Linux系统中,网络用户可以通过LDAP或其他目录服务进行管理。
系统管理员(超级用户)
- 定义:系统管理员或超级用户具有对系统的完全控制权限,可以执行所有操作,包括创建和删除用户、安装软件、配置系统等。
- 特点:在Windows系统中通常是"Administrator"账户,在Linux系统中通常是"root"账户。
- 管理:超级用户权限应谨慎授予,通常只在必要时使用。
2. 用户组(User Groups)
用户组是将多个用户账户组织在一起的集合,用于简化权限管理和资源共享。用户组的主要特点包括:
基本用户组
- 定义:基本用户组是系统中用于分配权限的标准组,如管理员组、普通用户组等。
- 特点:用户组可以被分配特定权限和访问控制,这些权限将自动应用到组内所有成员。
- 管理:在Windows系统中,基本用户组包括"Administrators"、"Users"、"Guests"等;在Linux系统中,常见用户组包括"wheel"、"sudo"等。
自定义用户组
- 定义:自定义用户组是系统管理员根据特定需求创建的组,用于组织用户并分配特定权限。
- 特点:可以根据业务需求创建不同的自定义组,例如"开发团队"、"财务部门"等。
- 管理 :在Windows系统中,可以通过"计算机管理"中的"本地用户和组"进行创建和管理;在Linux系统中,可以使用
groupadd
、usermod
等命令管理自定义用户组。
3. 服务用户(Service Accounts)
服务用户是专门用于运行系统服务或应用程序的账户。这些账户通常用于运行后台进程和服务,并有特定的权限和配置。
本地服务账户
- 定义:本地服务账户用于在本地计算机上运行服务,不具有网络访问权限。
- 特点 :在Windows系统中,通常是"Local Service"账户;在Linux系统中,通常是系统用户,如
nobody
。 - 管理:本地服务账户权限应限制在服务运行所需的最小权限范围内。
网络服务账户
- 定义:网络服务账户用于运行需要访问网络资源的服务。
- 特点 :在Windows系统中,通常是"Network Service"账户;在Linux系统中,可以是专门创建的用户账户(如
apache
、mysql
)。 - 管理:网络服务账户应具有网络访问权限,但不应过多暴露系统资源的权限。
特定服务账户
- 定义:特定服务账户是为特定应用程序或服务创建的账户,通常具有访问特定资源的权限。
- 特点 :例如,数据库服务账户(如SQL Server的"sqlserver"账户)、Web服务器账户(如Apache的
apache
用户)。 - 管理:应严格控制特定服务账户的权限,确保它们仅能访问必要的资源。
权限管理示例
Windows系统
-
用户账户管理:
- 创建用户:使用"计算机管理"工具中的"本地用户和组"来创建和管理用户账户。
- 分配组:将用户添加到特定用户组中以便统一管理权限。
-
服务账户管理:
- 配置服务 :使用"服务"工具(
services.msc
)配置服务的登录账户。 - 权限分配:确保服务账户仅具有执行其功能所需的最低权限。
- 配置服务 :使用"服务"工具(
Linux系统
-
用户和组管理:
- 创建用户 :使用
useradd
命令创建用户账户。 - 创建用户组 :使用
groupadd
命令创建用户组。 - 分配权限 :使用
chmod
和chown
命令管理文件和目录权限。
- 创建用户 :使用
-
服务用户管理:
- 配置服务:在服务的启动脚本或配置文件中指定运行用户。
- 权限分配:为服务用户分配仅需要的权限,避免过度授权。
总结
- 系统用户包括本地用户、网络用户和系统管理员,用于执行系统操作和管理任务。
- 用户组用于将多个用户组织在一起,以便统一管理权限和资源访问。
- 服务用户是专门为运行服务或应用程序创建的账户,需要根据服务的要求配置相应的权限。
4.自带防火墙出站&入站规则策略协议
1. 自带防火墙概述
自带防火墙是操作系统或应用程序自带的防火墙,通常包括:
- Windows Defender 防火墙(Windows 系统)
- iptables / nftables(Linux 系统)
- pf(FreeBSD / macOS 系统)
这些防火墙通常提供基本的网络保护功能,并允许用户配置详细的规则来控制流量。
2. 出站规则(Outbound Rules)
出站规则控制从计算机发出的流量。其主要目标是管理应用程序如何与外部网络通信,防止未授权的应用程序进行网络活动。
策略
- 允许:允许指定的应用程序或流量通过网络发送数据。
- 阻止:阻止指定的应用程序或流量通过网络发送数据。
- 限制:限制特定应用程序或流量的带宽、时间或其他特性。
常见协议
- TCP(传输控制协议):用于可靠的、连接导向的数据传输。常见端口包括HTTP(80)、HTTPS(443)、SMTP(25)等。
- UDP(用户数据报协议):用于无连接的数据传输,适用于实时应用程序。常见端口包括DNS(53)、DHCP(67/68)等。
- ICMP(互联网控制消息协议):用于网络设备之间的诊断和错误报告。常见用途包括ping命令。
配置示例
-
Windows Defender 防火墙:
- 打开"Windows Defender 防火墙",选择"高级设置"。
- 在"出站规则"中创建新规则,指定应用程序路径、端口、协议等。
- 例如:允许
C:\Program Files\MyApp\app.exe
通过TCP端口443发送流量。
-
Linux iptables:
- 使用
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
来允许通过TCP端口443的出站流量。 - 使用
iptables -A OUTPUT -p tcp --dport 80 -j DROP
来阻止通过TCP端口80的出站流量。
- 使用
3. 入站规则(Inbound Rules)
入站规则控制进入计算机的流量。其主要目标是保护系统免受外部网络的未授权访问。
策略
- 允许:允许指定的流量或应用程序进入计算机。
- 阻止:阻止指定的流量或应用程序进入计算机。
- 限制:限制特定流量的带宽、时间或其他特性。
常见协议
- TCP(传输控制协议):用于连接导向的数据传输。常见服务包括Web服务器、邮件服务器等。
- UDP(用户数据报协议):用于无连接的数据传输。常见服务包括DNS、VoIP等。
- ICMP(互联网控制消息协议):用于网络诊断和错误报告。
配置示例
-
Windows Defender 防火墙:
- 打开"Windows Defender 防火墙",选择"高级设置"。
- 在"入站规则"中创建新规则,指定应用程序路径、端口、协议等。
- 例如:允许来自外部的TCP端口80(HTTP)流量。
-
Linux iptables:
- 使用
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
来允许通过TCP端口22(SSH)的入站流量。 - 使用
iptables -A INPUT -p tcp --dport 3306 -j DROP
来阻止通过TCP端口3306(MySQL)的入站流量。
- 使用
4. 策略和协议详细配置
Windows Defender 防火墙
-
创建规则:
- 规则类型:程序、端口、预定义、自定义。
- 动作:允许、阻止、记录(仅记录)。
- 配置条件:IP地址、端口号、程序路径、协议类型。
-
例子:
- 允许来自指定IP地址的HTTP流量:创建一个入站规则,允许来自
192.168.1.100
的TCP端口80流量。 - 阻止所有外部访问:创建一个入站规则,阻止所有入站流量。
- 允许来自指定IP地址的HTTP流量:创建一个入站规则,允许来自
Linux iptables
-
基本命令:
- 允许流量 :
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
(允许SSH) - 阻止流量 :
iptables -A INPUT -p tcp --dport 23 -j DROP
(阻止Telnet)
- 允许流量 :
-
配置文件:
- 规则通常存储在
/etc/iptables/rules.v4
或/etc/sysconfig/iptables
中,具体位置和格式取决于发行版和配置工具。
- 规则通常存储在
Linux nftables
-
基本命令:
- 允许流量 :
nft add rule ip filter input tcp dport 22 accept
(允许SSH) - 阻止流量 :
nft add rule ip filter input tcp dport 23 drop
(阻止Telnet)
- 允许流量 :
-
配置文件:
- 规则通常存储在
/etc/nftables.conf
中。
- 规则通常存储在
总结
出站规则 和入站规则分别控制从计算机发出的流量和进入计算机的流量。有效的防火墙策略涉及根据实际需求配置适当的规则和协议,以确保系统的安全性和功能性。配置防火墙时,应考虑:
- 所需的访问:仅允许必需的流量,阻止不必要或可疑的流量。
- 最小权限原则:限制应用程序和服务的权限,以减少潜在风险。
- 定期审查:定期检查和更新规则,以适应变化的网络环境和安全需求。