涉及到的知识点:

捆绑

PE分离

思路源于渗透测试当中图片马原理。今天要说的不是修改头来伪装成图片,而是使用cmd的copy命令来进行文件上传。然后对文件进行反向解密出PE的一个过程

首先弄一张正常图片1.png 再准备好你要投放的PE文件 server.exe

C:\>copy test.png /b + server.exe /b payload.png

这里注意一下先后顺序 这个顺序影响你剥离PE文件时候的一些操作  如果说你先写的server.exe 那么就是从头开始剥离 我们这样写  就是从图片尾部开始剥离 推荐在后

另外  注意一下/b参数  使用二进制 /a参数是 AscII文本 

C:\>copy /?

将一份或多份文件复制到另一个位置。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]

     [+ source [/A | /B] [+ ...]] [destination [/A | /B]]

  source       指定要复制的文件。

  /A           表示一个 ASCII 文本文件。

  /B           表示一个二进位文件。

  /D           允许解密要创建的目标文件

  destination  为新文件指定目录和/或文件名。

  /V           验证新文件写入是否正确。

  /N           复制带有非 8dot3 名称的文件时,

               尽可能使用短文件名。

  /Y           不使用确认是否要覆盖现有目标文件

               的提示。

  /-Y          使用确认是否要覆盖现有目标文件

               的提示。

  /Z           用可重新启动模式复制已联网的文件。

/L           如果源是符号链接,请将链接复制

               到目标而不是源链接指向的实际文件。

命令行开关 /Y 可以在 COPYCMD 环境变量中预先设定。

这可能会被命令行上的 /-Y 替代。除非 COPY

如此 可以生成一个payload.png 

此时我们就可以当成图片上传,并且该图片可以正常查看 如图:

如果你的图不能访问  那基本上是通不过上传检测的 即便是在PE头部加上十六进制的图片头也不行  当然 也可能是我操作不对  这点请师傅们指点一二

完成了图片构造 那就完成了一半 此时我也完成了图片的上传

在这里  我很庆幸 图片没有经过二次处理。另外 当我们要取回图片的时候  注意以下操作 一定一定得是原图下载

这里我们> 点击下载原图 <  可以看到  下载之后的图和原图是一模一样大小

如此便完成了 存储。 那么我们如何效验这个文件呢?我们可以使用C32Asm来查看这个PNG图片 以16进制打开

上述框起来的 是PNG图片尾端 几乎不会 变,至于我箭头指向,则是PE头。这一点想必大家都清楚。

最后的一步 则是分离出来  原理很简单。十六进制读入  字符串开始分割到变量再存储为PE文件  即可完成全部操作

你可以根据你的需求 使用PHP 或者C++ 或者其他乱七八糟的来完成这最后一步

本站也可以。看图:https://image.3001.net/images/20200218/1582018731_5e4bb0abb3e52.png

其实吧  这样做的好处就是。AV检测到你下载图片(很多YK都会选择把shellcdoe存为图片 再下载 再加载) 一般来说  来自可信网站的 基本上都是可信的 不容易引起怀疑。同样的一个图片  你是信从freebuf来的  还是信从caop0rn来的? 另外,能只留一撮毛 绝不多吐一口水

当然 只是举个例子。杠精勿扰 我眼不瞎

*本文作者:hijacking,转自FreeBuf