第一次亲密接触MSF
第一次亲密接触MSF
Metasploit Framework介绍
Metasploit是一款开源安全漏洞检测工具,附带数百个已知的软件漏洞,并保持频繁更新。被安全社区冠以“可以黑掉整个宇宙”之名的强大渗透测试框架。
专业术语
渗透攻击(Exploit),指由攻击者或渗透测试者利用一个系统、应用或服务中的安全漏洞,所进行的攻击行为。 攻击载荷(Payload),是我们期望目标系统在被渗透攻击之后去执行的代码。 Shellcode,是在渗透攻击是作为攻击载荷运行的一组机器指令,通常用汇编语言编写。 模块(Module),指Metasploit框架中所使用的一段软件代码组件,可用于发起渗透攻击或执行某些辅助攻击动作。 监听器(Listener),是Metasploit中用来等待网络连接的组件。
模块
模块分类
auxiliary encoders exploits nops payloads post
模块是通过Metasploit框架所装载、集成并对外提供的最核心的渗透测试功能实现代码。分为辅助模块(Aux)、渗透攻击模块(Exploits)、后渗透攻击模块(Post)、攻击载荷模块(payloads)、编码器模块(Encoders)、空指令模块(Nops)。这些模块拥有非常清晰的结构和一个预定义好的接口,并可以组合支持信息收集、渗透攻击与后渗透攻击拓展。
辅助模块--auxiliary
执行信息收集、枚举、指纹探测、扫描等功能的辅助模块(没有payload的exploit模块)
在渗透信息搜集环节提供了大量的辅助模块支持,包括针对各种网络服务的扫描与查点、构建虚假服务收集登录密码、口令猜测等模块。此外,辅助模块中还包括一些无须加载
攻击载荷,同时往往不是取得目标系统远程控制权的渗透攻击,例如:拒绝服务攻击。
编码器模块--encoders
对payload进行加密,躲避AV检查的模块 攻击载荷与空指令模块组装完成一个指令序列后,在这段指令被渗透攻击模块加入邪恶数据缓冲区交由目标系统运行之前,Metasploit框架还需要完成一道非常重要的工序--
--编码。 编码模块的第一个使命是确保攻击载荷中不会出现渗透攻击过程中应加以避免的”坏字符“。 编码器第二个使命是对攻击载荷进行”免杀“处理,即逃避反病毒软件、IDS入侵检测系统和IPS入侵防御系统的检测与阻断。
渗透攻击模块--exploits
利用发现的安全漏洞或配置弱点对远程目标系统进行攻击,以植入和运行攻击载荷,从而获得对目标系统访问控制权的代码组件。metasploit框架中渗透攻击模块可以按照所
利用的安全漏洞所在的位置分为主动渗透攻击与被动渗透攻击两大类。 主动渗透攻击:所利用的安全漏洞位于网络服务端软件与服务端软件承载的上层应用程序之中,由于这些服务通常是在主机上开启一些监听端口并等待客户端连接,通过连接目
标系统网络服务,注入一些特殊构造的包含“邪恶”攻击数据的网络请求内容,触发安全漏洞,并使得远程服务进行执行“邪恶”数据中包含的攻击载荷,从而获取目标系统的控制
会话。针对网络服务端的主动渗透攻击属于传统的渗透攻击。还有web应用程序渗透攻击、SCADA工业控制系统服务渗透攻击。
空指令模块--nops
提高payload稳定性及维持大小 空指令(NOP)是一些对程序运行状态不会造成任何实质影响的空操作或无关操作指令,最典型的空指令就是空操作,在X86 CPU体系结构平台上的操作码是ox90. 在渗透攻击构造邪恶数据缓冲区时,常常要在真正要执行的Shellcode之前添加一段空指令区,这样当触发渗透攻击后跳转执行ShellCode时,有一个较大的安全着陆区, 从而避免受到内存地址随机化、返回地址计算偏差等原因造成的ShellCode执行失败,提高渗透攻击的可靠性。
攻击载荷模块--payloads
攻击载荷是在渗透攻击成功后促使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接。在传统的渗透代码开发中,攻击载荷只是一段功
能简单的ShellCode代码,以汇编语言编制并转换为目标系统CPU体系结构支持的机器代码,在渗透攻击触发漏洞后,将程序执行流程劫持并跳转入这段机器代码中执行,从而
完成ShellCode中实现的单一功能。 metasploit攻击载荷模块分为独立(Single)、传输器(Stager)、传输体(Stage)三种类型。 独立攻击载荷是完全自包含的,可直接独立地植入目标系统进行执行,比如“windows/shell_bind_tcp"是适用于Windows操作系统平台,能够将Shell控制会话绑定在指定
TCP端口上的攻击载荷。在一些比较特殊情况下,可能会对攻击载荷的大小、运行条件有所限制,比如特定安全漏洞利用时可填充邪恶攻击缓冲区的可用空间很小、windows 7
等新型操作系统所引入的NX(堆栈不可执行)、DEP(数据执行保护)等安全防御机制,在这些场景情况下,Metasploit提供了传输器和传输体配对分阶段植入的技术,由渗透
攻击模块首先植入代码精悍短小且非常可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行。
后渗透模块--post
主要支持在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各种各样的后渗透攻击动作,比如获取敏感信息,进一步括展,实施跳板攻击等。
基本使用
Metasploit三种用户接口(MSF终端、MSF命令行、Armitage)
Armitage:图形界面
Metasploit框架中的armitage组件是一个完全交互式的图形化用户接口。
msfcli 使用接口,现在已经更新至 msfconsole -x
MSF终端以一种用户友好的模式来提供交互方式,用于访问软件所有的功能特性,而msfcli则主要考虑脚本处理和其他命令行工具的互操作性。最新版本:msfcli被整合进ms
fconsole的参数里。
例如: 老指令:
msfcli multi/samba/usermap_scriptPAYLOAD=cmd/unix/bind_netcat RHOST=192.168.200.129E
新指令:
msfconsole -x "use exploit/multi/samba/usermap_script; set RHOST 192.168.200.129; set PAYLOAD cmd/unix/bind_netcat;[set LHOST IP;] r
un"
msfconsole 使用接口
最流行的用户接口
几乎可以使用全部 msf 功能
控制台命令支持 TAB 自动补全
支持外部命令的执行(系统命令等)
启动前的准备
使用前先升级:msfupdate
启动msf
在启动msf时使用的参数选项
通用选项:
-E, --environment ENVIRONMENT 设置Rails环境,默认为RAIL_ENV环境变量或'生产' 数据库选项:
-M, --migration-path DIRECTORY 指定包含其他数据库迁移的目录
-n, --no-database 禁用数据库支持
-y, --yaml PATH 指定一个包含数据库设置的YAML文件 框架选项:
-c FILE 加载指定的配置文件
-v, -V, --version 显示版本 模块选项:
--defer-module-loads 除非明确询问,否则推迟模块加载
-m, --module-path DIRECTORY 加载一个额外的模块路径 控制台选项:
-a, --ask 在退出Metasploit之前询问或接受'退出-y'
-H, --history-file FILE 将命令历史记录保存到指定的文件
-L, --real-readline 使用系统Readline库而不是RbReadline
-o, --output FILE 输出到指定的文件
-p, --plugin PLUGIN 在启动时加载插件
-q, --quiet 不要在启动时显示 banner 信息
-r, --resource FILE 执行指定的资源文件( - 用于stdin)
-x, --execute-command COMMAND 执行指定的控制台命令(使用;用于倍数)
-h, --help 显示此消息
MSF控制台命令
常用命令
banner 每次显示不同的小贴士
color 高亮显示模块名字
connect 连接指定ip指定端口上的服务(connect -h可以获取详细参数)
show show 显示给定类型的模块或所有模块(auxiliary / exploits / payloads / encoders / nops)
search 搜索指定关键字
---search name:mysql / platform:aix / type:aux / author:aaron / cve:2011 / 可多条件同时搜索
use 使用模块
show 在使用模块的情况下show显示(options / payload / targets / advanced / evasion / missing)
info 显示有关一个或多个模块的信息
back 返回从当前上下文返回
Check 检查模块能不能被利用,就是检查目标系统有没有这个漏洞(大部分模块不能执行这个命令)
exit 退出msf
set 设置参数
unset 取消设置的参数
setg 设置全局参数,所有模块有这个参数就已经被设置(只在本次启动msf使用有效)
unsetg 取消全局设置
save 保存当前设置的参数
Run 执行模块
exploit 执行模块
jobs 查看所有后台任务
kill 杀掉进程
load 加载其他插件
unload 卸载载入的插件
loadpath 加载某个目录的插件(一般用于使用自己编写模块)
Sessions 查看会话、切换会话
route 通过指定session路由流量
例子:route add 10.1.1.0 255.255.255.0 4 resource 配置流程
例子:msfconsole -r a.rc a.rc里面的内容就是使用模块的配置
MSF数据库命令
没有进入msf前可以执行的关于数据库的命令
msfdb init 初始化数据库
msfdb reinit 删掉以前初始化的数据库,然后重新初始化数据库
msfdb delete 删掉现在的数据库
msfdb start 启动数据库
msfdb stop 关掉数据库
注意: MSF数据库有问题 可以重新初始化数据库 msfdb reinit 没必要重新安装MSF 另外msf自带数据库为postgresql
进入msf后可以执行的关于数据库的命令
db_status 查看连接数据库的状态
db_rebuild_cache 重建数据库缓存(重建的是msf各种模块的信息,一般用在初始化数据库后)
db_nmap 集成nmap工具,可以在msf里使用nmap,命令格式和使用nmap一样,结果保存到数据库
db_disconnect 断开与当前数据库的连接
db_connect 连接其它数据库
kali自带数据库的位置:--/usr/share/metasploit-framework/config/database.yml db_import 数据库的导入
例子:db_import /root/bak.xml 注意:
配合namp使用,生成xml文件,也可以导入到msf数据库
例子:nmap -A 192.168.12.3 -oX nmap.xml
db_import /root/namp.xml
db_export 数据库的导出
例子:db_export -f xml /root/bak.xml
hosts 查看数据库中所有主机信息
例子:hosts -c address,os_flavor
hosts -S Linux
host 查看指定ip的信息
例子:host 1.1.1.1 services 查看所有主机开放端口情况
例子:services -p 80
services -c info,name -p 1-1000
creds 查看所有破解的服务信息
vulns 查看所有测试出来的漏洞信息
loot 查看所有获取的hash值 注意:我们在启动msf时,会自动启动后台数据库,如果你在使用db_status命令发现数据库没有连接。
数据库是用来存储我们测试过程中的结果,没有数据库也能使用,但是肯定体验感极差!!!
执行下面的语句启动msf数据库:
service postgresql start
msfdb start
netstat -pantu | grep 5432
核心命令
============= 命令 描述
------- -----------
? 帮助菜单
banner 显示一个很棒的metasploit横幅
cd 更改当前的工作目录
color 切换高亮显示颜色
connect 连接与主机通信
exit 退出退出控制台
get 获取特定于上下文的变量的值
getg 获取全局变量的值
grep Grep另一个命令的输出
help 帮助菜单
history 历史显示命令历史
irb 进入irb脚本模式
load 加载一个框架插件
quit 退出控制台
route 路由通过会话路由流量
save 保存保存活动的数据存储
sessions 会话转储会话列表并显示有关会话的信息
set 将特定于上下文的变量设置为一个值
setg 将全局变量设置为一个值
sleep 睡眠在指定的秒数内不执行任何操作
spool 将控制台输出写入文件以及屏幕
threads 线程查看和操作后台线程
unload 卸载卸载框架插件
unset 取消设置取消设置一个或多个特定于上下文的变量
unsetg 取消设置取消设置一个或多个全局变量
version 版本显示框架和控制台库版本号 模块命令
=============== 命令 描述
------- -----------
advanced 高级显示一个或多个模块的高级选项
back 返回从当前上下文返回
edit 编辑使用首选编辑器编辑当前模块或文件
info 显示有关一个或多个模块的信息
loadpath 加载路径搜索并加载路径中的模块
options 选项显示全局选项或一个或多个模块
popm 将最新的模块从堆栈弹出并使其处于活动状态
previous 将之前加载的模块设置为当前模块
pushm 将活动或模块列表推入模块堆栈
reload_all 重新加载所有定义的模块路径中的所有模块
reload_lib 从指定路径加载库文件
search 搜索搜索模块名称和说明
show 显示给定类型的模块或所有模块
use 使用按名称选择模块 工作命令
============ 命令 描述
------- -----------
handler 处理程序作为作业启动负载处理程序
jobs 作业显示和管理作业
kill 杀死一份工作
rename_job 重命名作业 资源脚本命令
======================== 命令 描述
------- -----------
makerc 保存从开始到文件输入的命令
resource 运行存储在文件中的命令 数据库后端命令
========================= 命令 描述
------- -----------
db_connect 连接到现有的数据库
db_disconnect 断开当前数据库实例
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(文件类型将被自动检测)
db_nmap 执行nmap并自动记录输出
db_rebuild_cache 重建数据库存储的模块缓存
db_status 显示当前的数据库状态
hosts 列出数据库中的所有主机
loot 列出数据库中的所有战利品
notes 列出数据库中的所有注释
services 列出数据库中的所有服务
vulns 列出数据库中的所有漏洞
workspace 在数据库工作区之间切换 凭证后端命令
============================ 命令 描述
------- -----------
creds 列出数据库中的所有凭据(密码)
第一次亲密接触MSF的更多相关文章
- 第四章 跨平台图像显示库——SDL 第一节 与SDL第一次亲密接触
http://blog.csdn.net/visioncat/article/details/1596576 GCC for Win32 开发环境介绍(5) 第四章 跨平台图像显示库——SDL 第一节 ...
- 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- 【阿里云产品公测】与云引擎ACE第一次亲密接触
阿里云用户:林哥神话 公测当然是第一次了.这个第一次亲密接触,但话又说回来对ACE我一直都不是那感兴趣的,但是看到阿里介绍还是那般神奇,再加上200无代金券来更加给力.最后就申请了这次公测. 平时一直 ...
- Linux就是这个范儿之第一次亲密接触(3)
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.4 返璞归真的命令行 有一种说法,现代计算机不是靠电力驱动,而是靠“鼠标”.多少应用程序的界面需 ...
- 我和Python的第一次亲密接触 - 零基础入门学习Python001
我和Python的第一次亲密接触 让编程改变世界 Change the world by program 小甲鱼经常说,学习一门编程语言就是要深入其中,要把编程语言想象为你的女朋友你的情人,这样你学习 ...
- [OS] 多线程--第一次亲密接触CreateThread与_beginthreadex本质区别
转自:http://blog.csdn.net/morewindows/article/details/7421759 本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_be ...
- Linux认知之旅【01 与Linux第一次亲密接触】!
一.搜索LINUX,了解它的前世今生! linux很厉害,应用在很多方面,我知道有超算.IOT.树莓派. 而且好多开发人员都在用这个系统.linux作为服务器使用,常年不用重启,不宕机,很少受病毒影响 ...
- Linux就是这个范儿之第一次亲密接触(2)
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.2 不一样的图形操作 几乎所有Linux的新用户都会认为Linux的图形界面是相当的绚丽又多彩. ...
- 与Jquery Mobile的第一次亲密接触
Jquery Mobile闻名已久,今天终于有亲密接触的机会. 通过动手写的demo,对它有了一个基本的认识: 自带的UI组件用起来简洁,方便:对旧版本的浏览器或移动设备能做到很好的优雅降级,而不影响 ...
随机推荐
- 3D点云数据分析:pointNet++论文分析及阅读笔记
PointNet的缺点: PointNet不捕获由度量空间点引起的局部结构,限制了它识别细粒度图案和泛化到复杂场景的能力. 利用度量空间距离,我们的网络能够通过增加上下文尺度来学习局部特征. 点集通常 ...
- CentOS 6.8 部署django项目二
CentOS 6.8 部署django项目一 1.项目部署后发现部分页面的样式丢失,是因为在nginx中配置的static路径中未包含. 解决:在settinfs.py中添加: STATIC_ROOT ...
- argv[1] 路径问题
在看<学习opencv>一书时遇到一个小问题:函数只是通过argv传递参数来读取图片并显示,但是却一直弹出画布,没有图像. 如下:test.c # include<stdio.h&g ...
- Linux驱动开发必看详解神秘内核(完全转载)
Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html IT168 技术文档]在开始步入L ...
- xpath路径前可用方法测试
$x("string-length(//h3[@class='t'])") 8 $x("string(//h3[@class='t'])") "XPa ...
- CentOS6.5运行yum报错:No module named yum
公司测试机环境不知道给我卸了什么包,导致yum运行报错状况: 报错情况: There was a problem importing one of the Python modulesrequired ...
- Android Studio安装apk失败
可能的情况 手机上已经安装了应用或者应用卸载不彻底 解决办法: adb uninstall yourpackagename 如果uninstall失败,可以考虑 clean一下Android Stud ...
- zabbix3.0.4关于java服务端程序内存溢出的处理
关于java服务端程序内存溢出的处理 java服务端程序内存溢出会产生jvm.log文件,此时程序会挂掉,无法正常处理业务,需要重启服务 思路: 当存在jvm.log这个文件的时候则触发clean_j ...
- Js中带有小数的值相加产生的问题
项目中遇到的问题,0.1+0.2为0.30000000000000004,与想象中不一样, 解决办法: function addNum (num1, num2) { var sq1,sq2,m; tr ...
- 常见的js算法
参考地址:链接