如果计算机的操作系统版本是Windows Vista或更高,在权限不够的情况下,访问系统磁盘的根目录(例如C:\)、windows目录、program files目录,以及读、写系统登录数据库(Registry)的程序等操作。都需要经过UAC(user account control,用户账户控制)的认证才能进行

0x01 UAC简介

UAC是为微软为提高系统安全性在Windows Vista中引入的技术。UAC的要求用户在执行可能影响计算机运行的操作或者在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上安装操作或者对计算机设置进行更改。

在Windows Vista及更高版本的操作系统中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证在收到安全威胁时造成的损害最小。

需要UAC的授权才能进行的操作列表如下

  • 配置Windows Update
  • 增加/删除账户
  • 更改账户类型
  • 更改UAC的设置
  • 安装ActiveX
  • 安装/卸载程序
  • 安装设备驱动程序
  • 将文件移动/入职到Program Files 或windows嘛目录下
  • 查看其他用户的文件夹

UAC有如下四种设置要求

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

在获取一个普通用户meterpreter权限时,尝试提取到system权限。使用use exploit/windows/local/bypassuac模块,执行getsystem既可获取system权限。这个模块的使用前提是,当前用户在管理员组中,且UAC需为默认设置(既:仅在程序试图更改我的计算机时通知我)

RunAS模块

使用use exploit/windows/local/ask模块,创建一个可执行文件,目标机器会运行一个发起提升权限请求的程序,提示用户是否需要继续运行,如果选择运行,就会返回一个高权限的meterpreter shell

目标机上弹出UAC对话框

执行getuid命令,查看权限,如果是普通用户权限,执行getsystem命令,再次查看既是system权限

利用前提,当前用户须在管理员组中或者知道管理员密码,对UAC设置没有要求,在用Ru n As模块时,需要使用EXX::Custom选项创建一个可执行文件,需要进行免杀处理

Nishang中Invoke-PaUACme模块

Invoke-PsUACme模块使用赖在UACME项目的DLL绕过UAC

Empire中的bypassuac模块

1、bypassuac模块

输入usemodule privesc/bypassuac命令

2、bypassuac_wscript模块

工作原理,使用C:\windows\wscript.exe执行payload,既绕过UAC,以管理员权限执行payload,仅限windows7系统,尚未打补丁的

以上的这几种方法,在实战环境中基本没啥意义了,仅当作学习

0x02 令牌窃取

令牌(Token)是指系统中的临时密钥,相当于账号和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。令牌将持续存在于系统中,除非系统重新启动

令牌的最大特点是随机性和不可预测性。访问令牌(Access Token)代表访问控制操作主题的系统对象。密保令牌(Security Token)也叫作认证令牌或者硬件令牌,是一种实现计算机身份校验的物理设备,入U盾。会话令牌(Session Token)是交互会话中唯一的身份标识符

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

客户端请求证书的过程如下

1、客户端向认证服务器发送请求,要求得到证书

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

3、客户端将Ticket传送给服务器。如果服务器确认该客户端身份,就允许它登录服务器。客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。

令牌窃取

在已经获取一个meterpreter shell的情况下,输入use incognito 命令,再用list_tokens -u 列出可用的令牌

有两种类型的令牌:一种是Delegation Tokens是为授权令牌,支持交互式的登录,如可远程登录访问等;另一种是Impersonation Tokens是模拟令牌,支持非交互式的会话。令牌的数量取决于meterpreter shell的访问级别。如果是一个系统管理员的令牌,则可以直接伪造这个令牌,使攻击者拥有它的权限。

通过上面的信息可知分配的令牌的是HACKE\Administrator 由机器的主机名个登录的用户名组成。接下来使用incognito调用impersonate_token,进行伪造。记得主机名\用户名,需要输入两个反斜杠(\\)

如果不需要该权限的时候,可使用命令rev2self,返回原本的权限

Rotten Potato本地提权

RottenPotato(烂土豆)提权的原理

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

脚本下载地址:

1
2
3
RottonPatato脚本:https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
https://github.com/breenmachine/RottenPotatoNG/blob/master/RottenPotatoEXE/x64/Release/MSFRottenPotato.exe
https://github.com/foxglovesec/RottenPotato

如果目标系统中存在有效令牌,可以通过Rotten Potato快速模拟用户令牌来实现权限的提升

在拿到meterpreter shell后,列出可用令牌

1
2
use incognito
list_tokens -u

先把Potato上传到目标机上,然后运行如下命令,执行烂土豆,

1
2
3
upload /home/kali/Desktop/ms.exe
execute -cH -f potato.exe
impersonate_token "NT AUTHORITY\SYSTEM"

由此,得到了SYSTEM权限

在测试的过程中发现,执行报错,卡了很久,之后想着继续执行一下试试,发现虽然执行报错,但是依旧提到system权限了,问了一下其他师傅说里面是有一个小bug,可能是token相关的,可能和双跳有关。

添加域管理员

若网络

1
2
net user pentest Admin!@#$1234 /add /domain
net user /domain

把域用户添加到管理员组, 并查看管理员组

1
2
net group "domain adminis" pentest /add /domain
net group "domain adminis" /domain

也可以使用meterpreter中的incognito来模拟域管理员,通过迭代系统中所有可用的身份验证令牌来添加域管理员

在meterpreter会话中执行,在域控主机上添加一个账户,将该账户添加到管理员组中

1
2
add_user hacke Admin!@#$1234 -h 192.168.1.1
add_group_user "Domain Admins" hacke -h 192.168.1.1、

Empire下的令牌窃取

参考之前的记录文章PowerShell-Empire-0x07部分

0x03 无凭证条件下的权限

使用LLMNRNetBIOS欺骗攻击对目标网络进行渗透

LLMNR和NetBIOS欺骗攻击基本概念

  • 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端口发送多播查询请求,以获取主机名所对应的IP地址。查询范围仅限于本地子网。

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

  • NetBIOS

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

NetBIOS提供的三种服务:

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

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

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

  • Net-NTLM Hash

Net-NTLM HashNTLM Hash不同

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

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

LLMNR和NetBIOS欺骗攻击

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

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

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

  • 下载运行

下载地址:https://github.com/SpiderLabs/Responder.git

  • 监听模式

进入目标网络后,如果没有获得任何目标系统的相关信息和重要凭证,可开启Responder的监听模式。Responder只会对网络中的流量进行分析,不会主动响应任何请求

使用Responder查看网络时如何在没有主动定位任何主机的情况下运行的,ON代表针对该服务数据包的监听,OFF代表关闭监听。可借此分析出网络中存在的IP地址段、机器名等

1
python Responder.py -I eth0

  • 渗透测试

在使用Responder对网络进行分析之后,可利用SMB协议获取目标网络中计算机的NTLMHash。如果用户输入了错误的计算机名,在DNS服务器上进行的名称查询操作会失败,名称解析请求将被退回,使用NBT-NS和LLMBNR进行解析。

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

参考文章

《内网安全攻防渗透测试指南》

http://hackergu.com/powerup-stealtoken-rottenpotato/