potato复现
potato全系列提权的特点,都是通过ntlm-relay以取得高权限用户的权限。
hot potato
作为最早的potato,其特点是通过本地llmnr,nbns欺骗,将wpad服务器解析到本地上获取本机高权限用户的ntlm,然后relay到本机smb上,以获取本机smb的高权限,由于smb中含有c$
,c$\admin
这类地址从而达到高权限用户执行指令的效果。
发起smb请求
如何发起smb请求,安利cloude师傅推荐的这篇文章中
发起smb请求需要远程主机自己发起,或是本机提权时自己操作
potato用的方式是在wpad解析后,通过在本机80端口上开启一个web服务,在wpad请求本机pac文件时进行ntlm协商导致泄露ntlm。
在llmnr学习中我使用llmnr进行smb共享的欺骗,实际上反复尝试都未曾获得过smb的请求包,但mdns能办到,mdns欺骗后能获取smb请求包,也就是说,从几年前windows引入mdns后,mdns就基本完全替代了llmnr的作用。
wpad作用
wpad是Web代理自动发现协议的简称,实际意义为在firefox等浏览器中,开启自动寻找代理服务器,则主机会发送llmnr,nbns,mdns发现局域网中的wpad服务器,发现后再从wpad服务器的80端口获取pac文件,即一些代理设置,以此配置自己的代理服务器。
本地欺骗不再过多赘述,主要注意其实用mdns完成解析就可以了。欺骗到本机后在本地127.0.0.1开一个web服务写上pac文件,配置成将所有流量重定向到本地127.0.0.1:80上。
这里注意80端口的占用问题,由于像iis,apache之类的进程导致80端口被pid4的system进程占用,则无法进行端口绑定。
hot potato的方案是通过wpad连接本地服务器下载pac文件时进行的ntlm认证获取用户ntlm,这个问题已经在MS16-077得到解决,即
150423.jpg
(更改了PAC文件下载的默认行为,以便当WinHTTP请求PAC文件时,不会自动发送客户端的域凭据来响应NTLM或协商身份验证质询。无论在WINHTTP_AUTOPROXY_OPTIONS中指定的fAutoLogonIfChallenged标志的值如何,都会发生这种情况。若要更改此新的默认行为,请创建以下两个注册表项)
即windows更新补丁后wpad不再进行质询,potato的升级方案则是在wpad代理中将流量代理至本机一个网址,再创建一个web服务以401状态码和'WWW-Authenticate':'NTLM'
要求用户进行认证
ghost potato
在ms16077的解决方案中,微软也禁止了本机到本机的smb通信,即设置了一个验证,收到challenge后即将challenge和作为验证的一个参数存入了isass缓存中(质询过程),在验证过程中会去判断isass缓存中是否有这些而判断是否为一台主机,ghost potato的绕过方法是经过300s的缓存时间后再进行验证过程(poc间隔为315s)。作为一个hot potato的升级绕过方式存在。
juicy potato
juicy potato利用ntlm-relay的过程为通过远程调用本机特定com组件,会有高权限的用户要求认证,
dcom
个人认为一个关键在于如何将将远程通讯转到本机上。在dcom的通讯中,会先通过本机一个随机端口和对方135端口进行通讯和认证,认证完毕后,再通过指定的端口进行交互。传统的dcom交互函数在解析到本机地址后会直接交给内核处理而不会产生数据包交互,更不会有认证过程了。我们当然可以将域内跳板机做为中转(关闭rpc对135端口的占用,监听135端口,截获对方的连接并转发至对方135端口),但要达到本地提权的效果就需要实现远程连接到本机端口上。