涉及到的知识点:
捆绑
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.COM