原文来自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. 01.axios封装

    1. 始vue化项目 https://www.cnblogs.com/xiaonq/p/11027880.html   vue init webpack deaxios # 使用脚手架创建项目 dea ...

  3. P1948 [USACO08JAN]Telephone Lines S

    题意描述 在无向图中求一条从 \(1\) 到 \(N\) 的路径,使得路径上第 \(K+1\) 大的边权最小. 等等,最大的最小...如此熟悉的字眼,难道是 二分答案. 下面进入正题. 算法分析 没错 ...

  4. java联系人管理系统简单设计

    本文实例为大家分享了java联系人管理系统毕业设计,供大家参考,具体内容如下 要求:  请使用XML保存数据,完成一个联系人管理系统.      用户必须经过认证登录后方可以使用系统.      注册 ...

  5. C#两行代码实现三维地球

    一.             为什么要用三维地球? 三维地球是地理信息技术的一个重要发展方向,相比较二维地图技术,三维地球最大的特点是更直观更形象地表达地理信息和空间上的方位.我们可以在三维气象模拟. ...

  6. gitlab - 解决访问 gitlab 网站出现 502 报错信息的问题

    问题背景 访问 gitlab 网站,出现 502 解决方案 先查看运行 gitlab 容器的 id docker ps 运行命令 # 容器里启动服务 docker exec id gitlab-ctl ...

  7. PyTorch-pycharm配置

    接上一篇文章: https://www.cnblogs.com/daisy-fung1314/p/soft-install-note1.html 上一篇安装好了PyTorch,Anaconda,pyc ...

  8. MCscan-Python-jcvi 共线性画图最后一章更新

    经过几轮调试和修改,共线性图终于可以上眼了.如下: 图中红色的为目标基因,蓝色的为reference species目标基因周围15个基因,天蓝色为再往外15个基因,黄色为与reference spe ...

  9. Netlink 内核实现分析 2

    netlink 应用层如何创建socket 应用层通过socket()系统调用创建Netlink套接字,socket系统调用的第一个参数可以是AF_NETLINK或PF_NETLINK(在Linux系 ...

  10. 《GNU_makefile》第五章——为规则书写命令

    1. 使用make的命令行参数-n或--just-print,make会只显示要执行的命令,不执行,这样方便调试makefile. 2.执行命令 每写一行命令,make会fork出一个shell进程来 ...