硬件需求:
存储:
10G存储空间。建议30G存储空间。
内存:
Linux“HOST”最小内存要求
1GB系统内存(RAM)
实际上2GB以上
Kali“GUEST”最小内存要求
至少512兆字节(MB)的RAM(推荐1GB)//更多从不伤害!
实际上1GB或更多,具有相同价值的SWAP文件
Metasploitable“GUEST”最小内存要求
至少256兆字节(MB)的RAM(建议512MB)//更没有伤害!
(可选)每个Windows“GUEST”最低内存要求
至少256兆字节(MB)的RAM(推荐1GB)//更多从不伤害!
实际上1GB或更多,具有相同价值的SWAP文件
处理器处理速度推荐:500MHz
通畅的互联网访问:建议1M/S,以及无阻碍的访问全球网络。
资源:
通过https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/,下载带有漏洞的浏览器以及虚拟的环境。
虚拟机:VMware,VirtualBox和KVM
推荐的发行版:Kali Linux
受害者环境:Metasploitable(默认登录名和密码为msfadmin:msfadmin,部署参考:https://community.rapid7.com/docs/DOC-1875)
Metasploit文件系统():
data: Metasploit使用的可编辑文件
documentation: 提供框架的文档
external: 源代码和第三方库
lib: 框架代码库的“meat”
modules: 实际的MSF模块
plugins: 可以在运行时加载的插件
scripts: Meterpreter和其他脚本
tools: 各种有用的命令行工具
Metasploit Libraries(这个库帮助使用者,无需额外编写基础的代码):
Rex:
大多数任务的基本库
处理套接字,协议,文本转换等
SSL,SMB,HTTP,XOR,Base64,Unicode
Msf::Core:
提供“基本”API
定义Metasploit框架(https://www.offensive-security.com/metasploit-unleashed/introduction/)
Msf :: Base:
提供“友好”API
提供用于框架的简化API
Metasploit框架由模块组成:
Exploits(漏洞):
定义为使用有效载荷的模块
没有有效载荷的漏洞是辅助模块
Payloads, Encoders, Nops(有效载荷,编码器,Nop):
有效载荷由远程运行的代码组成
编码器确保有效载荷使其到达目的地
Nop保持有效载荷大小一致
Primary Module Tree(主模块树):
位于/ usr / share / metasploit-framework / modules /
User-Specified Module Tree(用户指定的模块树):
位于〜/ .msf4 / modules /
这个位置是私人模组的理想选择
Loading Additional Module Trees(加载其他模块树):
Metasploit对象模型:
在Metasploit框架中,所有模块都是Ruby类:
模块从类型特定的类继承
类型特定的类继承自Msf :: Module类
模块之间有一个共享的公共API
有效载荷略有不同:
有效载荷是在运行时从各种组件创建的
用不同的阶段粘在一起
Metasploit Mixins和插件:
快速了解Ruby:
每个类只有一个父。
一个类可能包含了很多模块。
模块可以添加新的方法。
模块可以重载旧的方法。
Metasploit模块继承了Msf :: Module,并包含了mixins来添加功能。
Metasploit Mixins:
Mixins很简单:
Mixins'包括'一个类别到另一个
这是不同的,类似于继承
Mixins可以覆盖类的方法
Mixins可以添加新功能,并允许模块具有不同的“风味”。
协议特定(即:HTTP,SMB)
行为特定(即:暴力)
connect()由TCP mixin实现
connect()然后被FTP,SMB等重载。
Mixins可以改变行为:
扫描器mixin超载run()
扫描仪更改run_host()和run_range()的run()
它根据THREADS设置并行调用它们
BruteForce mixin是类似的
Metasploit插件:
插件可以直接使用API:
他们操纵整个框架
插件插入事件子系统
它们自动执行手动执行繁琐操作的特定任务
插件只适用于msfconsole:
插件可以添加新的控制台命令
它们扩展了Framework的总体功能
示例代码:
class MyParent
def woof
puts “woof!”
end
end
class MyClass > MyParent
end
object = MyClass.new
object.woof() => “woof!”
================================================================
module MyMixin
def woof
puts “hijacked the woof method!”
end
end
class MyBetterClass > MyClass
include MyMixin
end