实战1

查看数据库提权

net user 观察,sqlserver账号做了降权处理
image.png
image.png

权限

image.png
看到IIS和SeAssignPrimaryTokenPrivilege很容易联想到土豆家族的提权

效果

先看结果
CS中的getsystem
image.png
失败了
CS中的GetSystem具体原理是什么

https://www.cobaltstrike.com/blog/what-happens-when-i-type-getsystem/

SweetPotato和JuicyPotato效果
image.png
也都是失败了

再来看看Badpotato也就是Csharp版本的pipepotato
image.png
这个成功了
不过利用哥斯拉自带的Badpotato的效果就不一样了
image.png
pipepotato简单的原理就是
createNamedPipe()创建一个命令管道,调用ConnectNamedepipe()等待clinet连接,迫使高权限进程连接命令管道并写入数据,调用ImpersonateNamedPipeClient(),派生一个高权限进程的客户端

其实看到这样原理很容易会联想到MSF的getsystem的原理

Windows服务已启动,导致与命名管道建立连接,该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌,然后用新收集的SYSTEM模拟令牌产生cmd.exe,并且我们有一个SYSTEM特权进程

这里上线的时候直接卡死,故放弃此项实验
image.png
不过Badpotato通杀效果确实好一些

https://github.com/Ascotbe/Kernelhub/blob/master/README.CN.md

实战2

image.png
我们通过不是sa权限的os-shell进去以后,发现是IIS权限
一般猜测是被黑了

  1. Get-Acl -Path HKLM:\SAM\SAM | Format-List

image.png
反弹shell以后进行查看,发现确实有被黑过的痕迹,因为SAM注册表一般默认只有System具备完全控制权,管理员一般不会修改,一般可作为后门使用
这里使用post/windows/gather/hashdump,发现可以读取出Hash,但感觉使用中的MSF有问题
所以只是觉得是一个思路
image.png

实战3

通过读取配置文件
image.png
image.png
image.png
在web配置文件中找到了sa权限的数据库密码,可利用进行提权

原理

在一个红队面试题看到了

前言

俗称的Rotten Potato(烂土豆)提权就是MS16-075

可将windows工作站上的特权从最低级别提升到最高级别,即NT AUTHORITY\SYSTEM 权限

https://github.com/foxglovesec/RottenPotato

是一个本地提权,是针对本地用户的,不能用于域用户

官方漏洞通知:
https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2016/ms16-075

Windows SMB服务器特权提升漏洞(CVE-2016-3225),当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft服务器消息块(SMB)中存在特权提升漏洞,成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。若利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受到影响的系统。

此更新通过更正windows服务器消息快(SMB)服务器处理凭据转发请求的方式来修复此漏洞 微软将其定义为KB3164038

简单原理

  1. 欺骗”NT AUTHORITY\SYSTEM”账户通过NTLM认证到控制的TCP终端
  2. 对这个认证过程使用中间人攻击(NTLM重放),为”NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程通过一系列的windows api调用实现的。
  3. 模仿这个令牌,只有具有”模仿安全令牌权限”的账户才能去模仿别人令牌,一般大多数服务型账户(IIS,MSSQL等)都有这个权限,用户级账户大多数没有这个权限

一般从web拿到的webshell都是IIS服务器权限,具有这个模仿权限

提权条件

利用Potato提权的是前提是拥有SeImpersonatePrivilegeSeAssignPrimaryTokenPrivilege权限 一般用户拥有SelmpersonatePrivilege(而只有更高权限的账户比如SYSTEM才有SeAssignPrimaryTokenPrivilege权限)

以下用户拥有该权限

  • 本地管理员组成员和本地服务帐户
  • 由服务控制管理器启动的服务
  • 由组件对象模型 (COM) 基础结构启动的并配置为在特定帐户下运行的COM服务器
  1. whoami /priv

image.png

多汁土豆提权

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

前置知识

  1. 使用DCOM时,如果以服务的方式远程连接,那么权限为System,例如BITS服务
  2. 使用DCOM可以通过TCP连接到本机的一个端口,发起NTLM认证,该认证可以被重放
  3. LocalService用户默认具有SeImpersonate和SeAssignPrimaryToken权限
  4. 开启SeImpersonate权限后,能够在调用CreateProcessWithToken时,传入新的Token创建新的进程
  5. 开启SeAssignPrimaryToken权限后,能够在调用CreateProcessAsUser时,传入新的Token创建新的进程

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权限 [

](https://blog.csdn.net/negnegil/article/details/120243657)

简洁版

在本地账户的权限下 1.以system权限加载COM请求,认证NTLM(当然我们是本地账户,无法越权使用system权限,会认证失败)

2.再以本地账户权限发起默认135端口请求,认证NTLM(这次权限对了认证成功了)

3.分别拦截两个NTLM的数据包,替换数据,使得通过步骤1的认证,获得system权限的token

4.利用system权限的token创建进程

  1. 如果开启SeImpersonate权限,juicypotato的参数可以使用-t t
  2. 如果开启SeAssignPrimaryToken权限,juicypotato的参数可以使用-t u
  3. 如果均开启,可以选择-t * 如果均未开启,那么无法提权。
  1. netstat -abno
  2. 查看RPC默认端口是否为135
  3. ##若rpc服务被修改,则使用-n 参数指定修改后的端口,如 -n 111
  4. ##添加防火墙规则,允许135端口入站
  5. ##netsh advfirewall firewall add rule name="135" protocol=TCP dir=in localport=135 action=allow
  1. https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md
  2. 不同操作系统选择可用的CLSID
  3. 例如测试系统Server2012,选择CLSID为{8BC3F05E-D86B-11D0-A075-00C04FB68820}
  4. 选择系统未占用的端口作为监听端口
  5. 最终提权命令如下
  6. JuicyPotato.exe -t t -p c:\windows\system32\cmd.exe -l 1111 -c {8BC3F05E-D86B-11D0-A075-00C04FB68820}
  7. 执行成功即可获取一个system权限的shell,后续就是打开任务管理器,关闭explore任务,再开启explore任务即可得到一个system权限的桌面

webshell版本

https://github.com/uknowsec/JuicyPotato

  1. C:\juicyPotato_32.exe -p whoami
  2. ##执行命令
  3. execute -f juicypotato.exe -p net user test 123456
  4. execute -f juicypotato.exe -p net localgroup administrators test /add

其他问题

为什么即使打了补丁,但是土豆提权这个方法依然好用

不同系统补丁编号可能不一样

EXP使用问题