Shellcode存储的一种方式

文摘   2024-09-23 11:50   陕西  

shellcode存储在证书表中

这里的shellcode存储在证书表中,其实和我们的白加黑是差不多的,我们白加黑其实都是通过白程序+黑dll+shellcode的这种方式,基本上loader会直接在黑dll中编写,除了白加黑的方式,我们也可以将shellcode存储在pe文件的证书表中,当我们将shellcode存储在证书表中之后,我们就可以通过黑dll去读取该白程序中的shellcode并加载它,这样其实就少了一个文件了。

这里我们介绍一款工具,它可以将我们的shellcode嵌入到白程序中。

https://github.com/med0x2e/SigFlip

我们都知道,一般修改文件的话,会导致hash值发生改变,进而签名会直接失效,这个工具就是为了解决这个问题。

这个工具可以修改已经通过 Authenticode 签名的 PE 文件(如 exe, dll, sys 等)而不破坏签名的完整性。这听起来违反常理,因为如前所述,任何对 PE 文件的修改,都会导致其哈希值变化,进而破坏签名验证。然而,SigFlip 通过精妙的方式实现了对 PE 文件的修改,且不会影响 Authenticode 签名。

他的工作原理我们需要去简单解释一下。

SigFlip的核心思想其实就是利用Authenicode签名验证过程中的一个特征,有些字段和部分数据在签名验证时被有意忽略。通过在这些被忽略的字段中嵌入数据,可以修改文件内容,而不影响 Authenticode 签名的验证。

工作原理如下:

利用签名忽略的PE数据部分,在 Authenticode 的签名验证过程中,某些 PE 文件的字段和节并不包含在签名验证的范围内。例如:

PE 文件的 证书表(Certificate Table)。某些特定的填充区域或未使用的部分。这个工具其实就是利用了这些忽略验证的部分,在其中插入数据,以便在不破坏签名的情况下修改其行为。

使用方式如下:

根据作者介绍,我们可以修改PE文件的哈希值从而不破坏其签名或证书的有效性,这使得我们可以绕过基于哈希值的检测。

SigFlip.exe -b "<PE_FILE_PATH>" "<OUTPUT_PE_FILE_PATH (with extension)>"
SigFlip.exe -b "C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" "c:\Users\Administrator\Desktop\ms.exe"

修改成功之后会打印出哈希值,我们可以查看ms.exe签名是否是有效的。

紧接着我们可以将shellcode嵌入进去。其签名有效。

SigFlip.exe -i [exe/dll file path] [shellcode file path] [output_file_path (with extension)] [Encryption Key]

-i:指定注入模式,表示将 shellcode 注入到目标文件中。

[exe/dll file path]:目标 PE 文件的路径,通常是一个 .exe.dll 文件。这个文件是带有有效签名的白文件。

[shellcode file path]:要注入的 shellcode 文件路径,通常是一个包含恶意代码的二进制文件(如 shellcode.bin)。

[output_file_path (with extension)]:注入完成后生成的新 PE 文件的路径和文件名。输出文件会保持目标文件的签名有效,同时带有加密后的 shellcode。

[Encryption Key]:用于加密 shellcode 的密钥,这个密钥稍后需要在加载 shellcode 时解密用。

SigFlip.exe -i "c:\Users\Administrator\Desktop\ms.exe" "c:\Users\Administrator\Desktop\payload.bin" "C:\Users\Administrator\Desktop\ms-payload.exe" "0xDEADBEEF"

最后会生成一个ms-payload.exe新的文件,密钥为0xDEADBEEF。

可以看到签名依旧是有效的。

紧接着我们就可以使用Loader去进行加载了。

Loader.exe "c:\Users\Administrator\Desktop\ms1-payload.exe" "0xDEADBEEF"

成功上线。

那么其实我们是可以去扩展思路的,

比如说我们可以和白加黑进行配合,其实就相当于让某个白程序作为了shellcode的载体。

我们在某个白程序的黑dll这里写:

需要注意的是我这里将360-payload.exe这个程序作为了shellcode的载体,打开这个文件读取到shellcode之后,对其进行解密。

代码大家可以自行发挥。

当我们点击白程序的时候成功上线。

其他的一些方式大家可以自由的去发挥。

其实说的简单的这就是shellcode存储的一种方式。

Relay学安全
这是一个纯分享技术的公众号,只想做安全圈的一股清流,不会发任何广告,不会接受任何广告,只会分享纯技术文章,欢迎各行各业的小伙伴关注。让我们一起提升技术。
 最新文章