原文来自SecIN社区—作者:Zeva

0x00 前言

在实际渗透中,我们用到最多的就是Potato家族的提权。本文着重研究Potato家族的提权原理以及本地提权细节

0x01 原理讲解

1.利用Potato提权的是前提是拥有SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege权限,以下用户拥有SeImpersonatePrivilege权限(而只有更高权限的账户比如SYSTEM才有SeAssignPrimaryTokenPrivilege权限):

本地管理员账户(不包括管理员组普通账户)和本地服务账户

由SCM启动的服务
PS:本机测试时即使在本地策略中授予管理员组普通用户SeImpersonatePrivilege特权,在cmd.exe中whoami /priv也不显示该特权,且无法利用;而SeAssignPrimaryTokenPrivilege特权则可以正常授予普通用户
2.Windows服务的登陆账户

Local System(NT AUTHORITY\SySTEM)

Network Service(NT AUTHORITY\Network Service)

Local Service(NT AUTHORITY\Local Service)
也就是说该提权是

Administrator——>SYSTEM

Service——>SYSTEM
服务账户在windows权限模型中本身就拥有很高的权限
在实际渗透过程中,拿到webshell下,用户权限是IIS或者apache,或通过SQLi执行xp_cmdshell,此时手里的服务账户在进行操作时是低权限账户,而使用该提权手法可以直接获取SYSTEM权限
3.windows token
windows token是描述安全上下文的对象,用户登陆后系统就会生成token,创建新进程或新线程时这个token会不断口碑
Token成员

用户账户的(SID)
用户所属的组的SID
用于标识当前登陆会话的登陆SID
用户或用户组所拥有的权限列表
所有者SID
所有者组的SID
访问控制列表
访问令牌的来源
主令牌/模拟令牌
限制SID的可选列表
模拟等级:
Anonymous: server无法模拟或识别client
Identification: 可识别client的身份和特权,不能模拟
Impersonation: 可在本地系统模拟
Delegation: 可在远程系统上模拟
C:\WINDOWS\system32>whoami /priv

PRIVILEGES INFORMATION
---------------------- Privilege Name Description State
=============================== =========================================== =======
SeAssignPrimaryTokenPrivilege Replace a process level token Enabled
SeImpersonatePrivilege Impersonate a client after authentication Enabled

当用户具有SeImpersonatePrivilege特权,则可以调用CreateProcessWithTokenW以某个Token的权限启动新进程
当用户具有SeAssignPrimaryTokenPrivilege特权,则可以调用CreateProcessAsUserW以hToken权限启动新进程

0x02 历史土豆解析

1.HOT Potato(需要等待windows update)
repo: https://github.com/foxglovesec/Potato
DBNS欺骗,WPAD和Windows update服务
原理:
(1)通过HOST-DNS使UDP端口耗尽——NBNS
(2)通过fake WPAD prxy Server(劫持http)
IE –http://Wpad/Wpaddat 刷新WPAD文件可能需要30-60分钟
(3)HTTP>SMB NTML Relay(302-http://127.0.0.1/GETHASHSxxxx& #8221;-响应401是NTML身份验证请求,当是Windows Update服务请求时候,此命令将以“NT AUTHORITY \ SYSTEM”特权运行)

2.Rotten Potato
repo: https://github.com/foxglovesec/RottenPotato
它是通过DCOM call来使服务向攻击者监听的端口发起连接并进行NTLM认证,需要SelmpersonatePrivilege权限

3.Jucy Potato(Rotten Potato的加强版)
repo: https://github.com/ohpe/juicy-potato
需要Selmpersonate、SeAssignPrimaryToken 两个权限

本地支持RPC或远程服务器支持RPC并能成功登陆
用户支持Selmpersonate或SeAssignPrimaryToken权限
开启DCOM
可用的COM对象
常用:
JuicyPotato -p "whoami /priv"
4.Ghost Potato
repo: https://github.com/Ridter/GhostPotato
利用CVE-2019-1384(Ghost Potato) Bypass MS-08068
原理:
(1)主机A向主机B(访问|\B)进行SMB认证的时候,将pszTargetName设置为cifs/B,然后在type 2拿到主机B发送Challenge之后,在lsass里面缓存(Challenge,cifs/B).

(2)然后主机B在拿到主机A的type 3之后,会去lsass里面有没有缓存(Challenge,cifs/b),如果存在缓存,那么认证失败。

(3)这种情况底下,如果主机B和主机A是不同的主机的话,那Isass里面就不会缓存 (Challenge,cifs/B).如果是同- -台主机的话,那Isass里面肯定有缓存,这个时候就会认证失败。
(4)绕过了缓存的限制,因为lsass中的缓存,在300s后会自动消失,315s后在发送Type3

5.Pipe Potato
攻击者通过pipeserver.exe注册一个名为pipexpipespoolss的恶意的命名管道等待高权限用户来连接以模拟高权限用户权限,然后通过spoolssClient.exe迫使system用户来访问攻击者构建的恶意命名管道,从而模拟system用户运行任意应用程序
原理:
(1)调用CreateN amedPipe()创建一个命名管道
(2)调用ConnectNamedPipe() 接受该命名请求连接
(3)迫使高权限进程连接该命名管道并写入数据
(4)调用ImpersonateNamedPipeClient()派生 一个高权限进程的客户端

衍生版本:
PrintSpoofer
repo:
https://github.com/itm4n/PrintSpoofer
利用spoolsv.exe进程的RPC服务器强制Windows主机向其他计算机进行身份证验证
需要SelmpersonatePrivilege 、SeAssignPrimaryToken权限

6.Sweet Potato(Juicy土豆的重写)
repo: https://github.com/CCob/SweetPotato
COM/WinRM/Spoolsv的集合版,也就是Juicy/PrintSpoofer
从Windows 7到windows10/windows server2019的本地服务到system特权升级

0x03 小结

Potato提权原理简单来说就是如下三条:
(1)诱使 “SYSTEM” 账户通过NTLM向控制的TCP节点进行身份验证
(2)以本地协商 “NT AUTHORITY \ SYSTEM” 账户的安全令牌进行NTLM Relay
(3)模拟刚刚协商的令牌,达到提权的目的

0x04参考链接:

https://www.anquanke.com/post/id/204510
https://www.t00ls.net/articles-56281.html
https://docs.ioin.in/writeup/tools.pwn.ren/_2016_01_17_potato_windows_html/index.html
https://foxglovesecurity.com/2016/01/16/hot-potato/

Potato家族本地提权分析的更多相关文章

  1. iOS冰与火之歌(番外篇) - 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权

    iOS冰与火之歌(番外篇) 基于PEGASUS(Trident三叉戟)的OS X 10.11.6本地提权 蒸米@阿里移动安全 0x00 序 这段时间最火的漏洞当属阿联酋的人权活动人士被apt攻击所使用 ...

  2. CVE-2014-4113本地提权测试

    CVE-2014-4113本地提权漏洞分析 By Netfairy 前言 2014年10月14日, Crowdstrike和FireEye发表了一篇文章, 描述了一个新的针对Windows的提权漏洞. ...

  3. MySQL-based databases CVE -2016-6663 本地提权

    @date: 2016/11/3 @author: dlive 0x01 漏洞原文 翻译水平不高求轻喷 感觉作者在写文章的时候有些地方描述的也不是特别清楚,不过结合poc可以清晰理解漏洞利用过程 0x ...

  4. 【原创】深入分析Ubuntu本地提权漏洞CVE-2017-16995

    *本文首发阿里云先知安全技术社区,原文链接https://xz.aliyun.com/t/2212 前言: 2018年3月中旬,Twitter 用户 @Vitaly Nikolenko 发布消息,称 ...

  5. CVE-2016-1240 Tomcat 服务本地提权漏洞

    catalogue . 漏洞背景 . 影响范围 . 漏洞原理 . 漏洞PoC . 修复方案 1. 漏洞背景 Tomcat是个运行在Apache上的应用服务器,支持运行Servlet/JSP应用程序的容 ...

  6. 小白日记21:kali渗透测试之提权(一)--本地提权

    本地提权 简单地说,本地提权漏洞就是说一个本来非常低权限.受限制的用户,可以提升到系统至高无上的权限.权限提升漏洞通常是一种"辅助"性质的漏洞,当黑客已经通过某种手段进入了目标机器 ...

  7. Linux Kernel ‘perf’ Utility 本地提权漏洞

    漏洞名称: Linux Kernel ‘perf’ Utility 本地提权漏洞 CNNVD编号: CNNVD-201309-050 发布时间: 2013-09-09 更新时间: 2013-09-09 ...

  8. Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞

    漏洞名称: Linux Kernel ‘kvm_set_memory_region()’函数本地提权漏洞 CNNVD编号: CNNVD-201306-343 发布时间: 2013-06-20 更新时间 ...

  9. kali权限提升之本地提权

    kali权限提升之本地提权 系统账号之间权限隔离 操作系统的安全基础 用户空间 内核空间 系统账号: 用户账号登陆时候获取权限令牌 服务账号无需用户登录已在后台启动服务 windows用户全权限划分: ...

随机推荐

  1. Python ( 高级 第二部)

    目录 模块和包 面向对象 部分一: 面向对象程序开发 面向对象封装: 对象的相关操作 面向对象封装: 类的相关操作 实例化的对象/ 定义的类删除公有成员属性和公有成员方法 部分二: 单继承 多继承 菱 ...

  2. Java学习的第五十二天

    1.例9.4对象数组的使用方法 public class Cjava { public static void main(String[]args) { Box b[] = {new Box(10,1 ...

  3. Java学习的第十天

    1.类方法 实例方法 自定义方法 2.今天使用visio不太会使用,方法覆盖不懂. 3.明天将方法剩余部分学完

  4. [Luogu P1268] 树的重量 (巧妙的构造题)

    题面 传送门:https://www.luogu.org/problemnew/show/P1268 Solution 这是一道极其巧妙的构造题 先做一个约定[i,j]表示从i到j的距离 我们可以先从 ...

  5. 浅谈 Tarjan 算法

    目录 简述 作用 Tarjan 算法 原理 出场人物 图示 代码实现 例题 例题一 例题二 例题三 例题四 例题五 总结 简述 对于初学 Tarjan 的你来说,肯定和我一开始学 Tarjan 一样无 ...

  6. canvas生成圆图和微信小程序canvas圆图

    先在HTML中创建 img和canvas并设置id属性 <canvas id="canvas" width="500" height="500& ...

  7. 如何制作一本《现代Javascript教程》EPUB电子书

    制作一本<现代Javascript教程>电子书学习使用 计划学习JavaScript的同学可以看过来,今天就推荐个学习JavaScript的免费教程. 教程文档来源于 https://zh ...

  8. Thinkphp3.2 cms之分类管理

    四.分类管理 <?php namespace Admin\Controller; use Think\Controller; class CateController extends Contr ...

  9. java实现KFC点餐系统

    这篇文章主要为大家详细介绍了java实现KFC点餐系统,模拟肯德基快餐店的收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信 ...

  10. Spider--补充--Re模块_2

    # @ Author : Collin_PXY # Python 正则表达式的应用(二) # 正则表达式之所以让人头疼,很大程度是因为表达式里有大量的符号及它们的组合,还有很多匹配模式,想要记住比较困 ...