一、初识MSF1、什么是MetasploitMetasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework简称MSF。是一个免费、可下载的框架通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工具。当H.D. Moore在2003年发布MSF时计算机安全状况也被永久性地改变了。仿佛一夜之间任何人都可以成为黑客每个人都可以使用攻击工具来攻击那些未打过补丁或者刚刚打过补丁的漏洞。软件厂商再也不能推迟发布针对已公布漏洞的补丁了这是因为MSF团队一直都在努力开发各种攻击工具并将它们贡献给所有MSF用户。MSF的设计初衷是打造成一个攻击工具开发平台然而在目前情况下安全专家以及业余安全爱好者更多地将其当作一种点几下鼠标就可以利用其中附带的攻击工具进行成功攻击的环境。2、MSF安装要求在使用MSF之前我们得确保自己的电脑配置能够达到以下的要求:硬盘空间: 如果你要使用MSF首先确保你电脑配置至少有10GB的储存空间。因为MSF会使用到一些大型文件。在分区的时候确保不是以FAT32类型进行分区。因为FAT32不支持大文件运行。所以建议是以NTFSExt3或者其他类型进行分区。个人建议是你的使用空间最好有40GB内存Kali对内存的建议做了很多解释实际上只要你的内存值等于或者大于2GB就可以使用各个版本的Kali系统了。处理器官方系统解释到只要处理器的处理速度大于或者等于400MHz就可以使用Kali系统。但是我建议最低为500MHz。网络设备你可以使用Cat5接口进行访问。请确保你的网络设备有DHCP如果没有那么请自己为你的kali分配IP。当然你也可以用无线网络但是请为你的无线网卡安装相对应的驱动。软件这里建议使用者安装两套操作系统。一台是Kali系统一台是测试系统。这样做的原因是能够方便安全人员进行攻击测试。虚拟机我们的建议是用虚拟机来运行kali系统。VMware Player可以说是最棒的选择。这个软件是免费的用户只需要注册就能够使用。当然你也可以选择其他的虚拟机但是我的建议就是VMware。Kali Linux:Kali是以Linux系统进行封装的。Kali系统的有点在于这个系统集合了大量的优秀的安全工具同时还能对这些工具进行升级。其中也包含了MSF。Kali系统的下载地址是http://www.kali.org/downloads/ 。如果你安装完了Kali系统你可以打开控制窗口使用以下命令对Kali系统进行升级。升级指令“apt-get update apt-get upgrade”Metasploitable系统也许你遇到过很多linux系统但是却不知道如何使用那些linux漏洞。幸运的是MSF的开发团队也意识到了这个问题。他们制作出了Metasploitable系统。这个系统包含了大大小小的linux漏洞十分适合做为测试系统。既能提高技术同时也能够“自我意淫”一下。现在的Metasploitable已经有了第二套版本下面是下载地址:kail下载地址https://pan.baidu.com/s/1c05BnlIhttp://cdimage.kali.org/kali-weekly/http://sourceforge.net/projects/Metasploitable/files/Metasploitable2/注意:测试系统下载下来后是zip格式的。解压后使用VM打开。如果是VMware的直接打开用VMware打开Metasploitable.vmx文件即可。Metasploitable系统的默认账号和密码是msfadmin:msfadmin如果你想了解更多关于Metasploitable的信息你可以去下面这个网站Metasploitable 2 Exploitability Guide | Metasploit Documentation3、MSF专业术语讲解渗透攻击Exploit渗透攻击是指由攻击者或者渗透测试者利用系统、应用或服务中的安全漏洞所进行的攻击行为。流行的攻击技术包括缓冲区溢出、Web应用程序漏洞攻击以及利用配置错误等。攻击载荷Payload攻击载何是我们期望目标系统在被渗透攻击后而执行的代码。在MSF框架中可以自由的选择、传送和植入。比如反弹式shell是一种从目标主机到攻击主机创建网络连接并提供命令行shell的攻击载荷。bind shell攻击载荷则在目标主机上将命令行shell绑定到一个打开的监听端口攻击者可以连接这些端口来取得shell交互溢出代码Shellcodeshellcode是在渗透攻击时作为攻击载荷运行的一组机器指令。shellcode通常用汇编语言编写。在大多数情况下目标系统执行了shellcode这一组指令后才会提供一个命令行shell或者Meterpreter shell这也是shellcode名称的由来模块Module在MSF中一个模块是指MSF框架中所使用的一段软件代码组件。在某些时候你可能会使用一个渗透攻击模块Exploit module也就是用于实际发起渗透攻击的软件组件。而在其它时候则可能使用一个辅助模块auxiliary module用来扫描一些诸如扫描或系统查点的攻击动作监听器Listener监听器是MSF中用来等待连入网络连接的组件。举例来说在目标主机被渗透攻击之后它可能会通过互联网回连到攻击主机上而监听器组件在攻击主机上等待被渗透攻击的系统来连接并负责处理这些网络连接。二、更新MSF以及目录结构一如何更新MSF1、替换yum源把kail原有更新源#号注释掉rootkali:~# vi /etc/apt/sources.list kali-rolling版本中科大的就够用了个人按需吧 # 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 contrib2、添加数字签名wget archive.kali.org/archive-key.asc //下载签名 apt-key add archive-key.asc //安装签名 注如果添加数字签名还提示无法安装可删除原有msf rootkali:~# apt remove metasploit-framework 注卸载过程中无法获得锁 /var/cache/apt/archives/lock - open (11: 资源暂时不可用) 无法对目录 /var/cache/apt/archives/ 加锁 rootkali:~# sudo rm /var/cache/apt/archives/lock //进行强制解锁 rootkali:~# sudo rm /var/cache/apt/archives/3、安装msf框架rootbogon:~# apt-get update rootkali:~# apt-get install metasploit-framework //安装msf框架 rootkali:~#msfconsole //发现有提示数据库未启动退出msf启动数据库 rootkali:~# systemctl start postgresql //启动数据库 rootkali:~# systemctl enable postgresql //允许开机自启动 rootkali:~# msfdb init //构建数据库缓存 rootkali:~#msfconsole 注意如果更新完msf出现才下问题 rootkaliew:~# msfconsole [*] Bundler failed to load and returned this error: cannot load such file -- bundler/setup [*] You may need to uninstall or upgrade bundler 解决方法 rootkaliew:~# sudo gem install bundler rootkaliew:~# bundle update celluloid 当提示另外一种错误的时候可通过以下方法解决进入metasploit-framework目录bundle install cd /usr/share/metasploit-framework/ bundle install二MSF的目录结构MSF 在BT5下存放目录/opt/MSFMSF Kali下存放目录、/usr/share/metasploit-framework/Modules用户用到的各种模块几乎都在这里 用户使用use这个msf这里时就是用到了这个目录下的模块。这个目录下的文件在msfconsole启动时会被自动加载的如果看到msfconsole启动时有出错信息但又能成功启动可以根据出错信息找解决方法个人写的Module也可以放在这个目录下Auxiliary主要包含渗透测试中一些辅助性的脚本这些脚本功能有扫描嗅探破解注入漏洞挖掘等Encoders各种编码工具 用于躲过入侵检测和过滤系统.Exploits主要包含了传说中的exp、0day、各种漏洞利用的脚本。主要的攻击代码全在这这里边包含的exp的路径的命名规则是 系统/服务/模块在使用exp是可以根据这个命名方法来找也可以用search这条指令来找。比如use exploites/windows(系统)/vnc(服务)/realvnc_client(模块名)NopsNOP (No Operation or Next Operation) sled,由于IDS/IPS会检查数据包中不规则的数据所以在某些场合下(比如针对溢出攻击),某些特殊的滑行字符串(NOPS x90x90...)则会因为被拦截而导致攻击失效所以此时需要修改exploit中的NOPs.nops文件夹下的东西会在payload生成时用到(后面会有介绍)。比如我们打开php的NOPS生成脚本就会发现它只是返回了指定长度的空格而已。Payloads 这个单词翻译过来叫载荷是攻击者发送给系统执行的指令不包含exploits攻击阶段payloads主要是在目标机执行的而exploits是在本地机执行作用于目标机。命名规则是 系统/类型/名称 比如: use payloads/windows/shell/bind_tcpPost:这个目录里放着msf 的exploits执行成功后向目标机发送的一些功能性指令比如提权获取hash等Data这个目录里盛放了Meterpreter、PassiveX、Vnc、DLLs等这些工具和一些用户接口代码Msfweb 和一些其他模块用到的数据文件Data下js文件夹下的Detect这里面存放的是MSF的探针文件。如果看过MSF浏览器攻击脚本的代码就会发现调用了一个js库然后检查当前请求是否符合被攻击环境。如果符合则发送攻击代码否则中断。Memory中主要是一些堆喷射代码。在大部分浏览器漏洞利用过程堆喷射是一个不可或缺的过程(当然不是绝对的)。并且不同的浏览器及版本间堆喷射代码都有所不同。所以这里给出的探针代码和堆喷射代码是不是一个非常好的学习资源呢Plugins这里的模块用户需要使用load 来加载提供数据库连接插件和各种要用到的插件Scripts这个目录下的文件大都是Meterpreter这个模块利用的脚本。比如郭Meterpreter里用到的migrate来转移到其他进程的指令的源代码就在这个目录下这里的rc脚本相当于Windows下的批处理脚本在某些情况下会有一定便捷性。比如Veil在生成免杀payload的同时也会生成一个rc脚本此时使用msfconsole –r xx.rc便可以快速的建立一个和payload对应的handler亦或在攻过程中需要你反复的set exploit,那么就可以使用这个批处理脚本了而这个目录下则是一些给定的rc脚本虽然你可能不习惯这样使用但作为改写自己的rc脚本的资源也不错Tools包含一些有用的脚本和零散的工具三、MSF基本命令1、Msfconsole控制台它是一个一体化集中控制台允许你访问到几乎所有的MSF框架选项。MSF起初看似吓人的但一旦你学习他的语法命令你将会欣赏利用该接口的力量。2、​​​​​​​Msfconsole的好处这是唯一能访问大多数支持在MSF特点。Console-based界面提供了一个框架具有最稳定的MSF的界面充分支持Readline、Tabbing以及其它各类命令支持Msfconsole外部命令执行3、​​​​​​​Msfconsole命令执行命令帮助菜单另一个用法在后面加命令之间有空格search 搜索模块名和描述例如搜索ms08-067模块执行search ms08-067use使用命令成功使用如下图显示back 从当前环境返回Banner命令显示一个MSF的bannercolor 颜色转换connect连接一个主机例如下图所示连接到百度的80端口exit退出MSFinfo 显示一个或多个模块的信息例如ms08-067的模块irb进入irb脚本模式jobs显示和管理作业和windows任务管理器的进程作用一样kill杀死一个作业和结束进程的作用一样。loadpath加载一个模块的路径。quit退出MSF。load加载一个插件。resource运行储存一个文件中的命令。route查看一个会话的路由信息。save保存动作。set给一个变量赋值。show显示给所有类型的模块setg把一个赋值给全局变量例如上述set设置的IP就会用到其他攻击模块的RHOST中。sleep在限定的秒数内什么也不做。unload卸载一个模块。unset解出一个或多个变量unsetg解出一个或多个全局变量。version显示MSF和控制台库版本四、Exploits And Payloads模块1、​​​​​​​Exploits模块命名规则系统/服务/名称例如windows/smb/ms08_067_netapiRHOST目标主机IP地址RPORT目标主机连接端口Payload有效的载荷成功后返回shellLHOST攻击者的IP地址LPORT攻击者的端口2、Payloads模块是在使用一个模块之后再去使用的。命名规则系统/类型/名称例如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或win7NX是应用在CPU的一种可以防止缓冲区溢出的技术。xxx_ord_tcp:有序payload。xxx_tcp_allports:在所有可能的端口。