1.信息收集
1.1定位管理员工具
psloggedon.exe
工具原理:通过检验注册表里 HKEY_USERS 的 key 值来查询谁登陆过机器,同样也调用到了NetSessionEnum API。不过注意某些操作是需要管理员权限的
参数使用:psloggedon [-] [-l] [-x] [\computername|username]
下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon
使用实例:以域管理员登录为例
查看当前用户登录情况,可以查看本机登录和远程登录
查看本机用户登录情况
查看本机用户登录情况,不显示登录时间
查看 dc 登录情况(这个操作是需要管理员权限命令行的)
PsLoggedon.exe \\域控计算机名
本机用户登录下,查看 dc,是查看不到的
netsess.exe
工具原理:调用 NetSessionEnum API
下载地址:www.joeware.net/freetools/(需要翻墙)
查看本机会话
查看服务器会话,\\
后面为计算机名
PVEFindADUser.exe
工作原理:
下载地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn
常用参数:-current
查看在域中登录的机器
netview.exe
工具原理:使用 WinAPI NetSessionEnum 来找寻登陆 sessions, 利用 NetShareEnum 来找寻共享 , 利用 NetWkstaUserEnum 来枚举登陆的用户。
下载地址:https://github.com/mubix/netview(需要自行编译)
常用命令:-d
Nmap 的 NSE 脚本
nmap -sU -sS --script smb-enum-sessions.nse
官方说明:https://nmap.org/nsedoc/scripts/smb-enum-sessions.html
Powershell 脚本
PowerView.ps1 脚本
Powershell.exe -exec bypass -Command "Import-Module C:\Users\administrator\Desktop\内网信息收集工具\PowerView\PowerView.ps1;Invoke-UserHunter"
Emailheader
如果你能进某个用户内部邮箱,也可以从邮件头提取有用的信息。找寻跟目标用户来往的邮件,仔细查看邮件头。
“X-Originating-IP”头经常会出现,这就可以让你追踪到目标 IP。
Veil 框架下的 user_hunter 模块,group_hunter 模块
https://github.com/Veil-Framework/Veil-Pillage/blob/master/modules/enumeration/host/u
ser_hunter.py
https://github.com/Veil-Framework/Veil-Pillage/blob/master/modules/enumeration/domai
n/group_hunter.py
1.2查找域管理进程
1.2.1本机检查
-
获取域管理员列表
net group "Domain Admins" /domain
-
列出本机所有进程及进程用户
Tasklist /v
寻找是否有进程所有者为域管理员的进程
1.2.2查询域控制器的域用户会话
-
收集域控制器列表
net group "Domain Controllers" /domain
-
收集域管理员的列表
net group "Domain Admins" /domain
-
使用 netsess.exe 查询每个域控制器,收集所有活动域会话的列表 netsess.exe -h
-
将域管理员列表域活动会话列表交叉引用,以确定哪些 IP 地址具有活动域令牌
1.2.3扫描远程系统上运行的任务
-
收集域管理员的列表
Net group "Domain Admins" /domain
-
运行脚本
事先需要准备好内网探测出的 ip,放入到 ips.txt,用户名放入 names.txt (注意后缀,需文件全名完全一致)
FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt && FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process
1.2.4扫描远程系统上NetBIOS信息
需要准备好用户名 admins.txt,需要用到 nbtstat.exe(系统内置工具)
for /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
需要准备好用户名 admins.txt,需要用到 nbt.exe(第三方工具)
for /F %i in (ips.txt) do @echo [+] Checking %i && nbt -f %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
1.2.5使用多种方式寻找域管理员
2.提权
2.1msf假冒令牌
2.1.1假冒令牌原理:
假冒令牌可以假冒一个网络中的另一个用户进行各类操作。
所谓的令牌:例如当一个用户登录系统,则它会被赋予一个访问令牌作为认证信息。所以当一个攻击者需要域管理员的操作权限时候,需要通过假冒令牌方式进行入侵攻击。
windows_token 类似于 web 中的 cookie,当用户登陆后则后续操作校验 token 即可。在域环境中我们 token 分为两种:
交互式 token:我们登录后的 token
非交互 token:例如我们通过 IPC(Internet Process Connection)连接,或登录注销后都为非交互 token
2.1.2攻击过程:
首先利用攻击模块获取主机shell
查看为system权限,加载 load incognito 模块,查看当前所有 token: list_tokens -u
impersonation tokens: 现在未存在其他高权限用户
现在我们模拟域管理员非交互 token
使用AD服务器高权限账号通过IPC共享访问下目标机的某个文件
再次执行 list_tokens -u
发现新增一个非交互域管理员 token
通过 impersonate_token “WINXP\IUSR_DH-CA8822AB9589” 假冒域管理员令牌并添加用户
复现时发现该用户为低权限用户,且ipc并不会产生高权限token
故使用交互token
添加用户
2.2ms14-068提权
2.2.1ms14-068原理:
Microsoft Windows Kerberos KDC 中非公开报告的漏洞,该漏洞可能允许攻击者将未经授权的域用户帐户的权限,提升到域管理员帐户的权限。攻击者可能使用这些提升的权限来侵入域中的任何计算机,包括域控制器。攻击者必须有有效的域凭据才能利用此漏洞。拥有域凭据的标准用户帐户可以远程使用受影响的组件;只有本地帐户凭据的用户则不能。发布本安全公告时,Microsoft 发现了试图利用此漏洞的有限数量的定向攻击。
https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2014/ms14-068
Kerberos 协议
Ms14-068.exe, 漏洞利用程序
下载: https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
Mimikatz,读取内存密码,修改内存凭证
官网:http://blog.gentilkiwi.com/mimikatz
下载:https://github.com/gentilkiwi/mimikatz/releases/latest
2.2.2ms14-068利用过程:
使用域普通用户登录
查看dc共享信息失败
生成假的令牌(票据)使其有效
先使用 mimikatz 工具清除内存中的 kerberos 票据
命令:kerberos::purge
然后使用 MS14-068.exe 生成新的票据
使用说明:MS14-068.exe -u 域用户名@域名 -p 域用户密码 -s SID -d 域控制器 IP
SID 使用 whoami /all 获取
执行成功之后,可以发现生成了票据
在 mimikatz 中导入新的票据
导入成功之后,可以使用 kerberos::list 查看
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BIjejYQ3-1678754168322)(C:\Users\s1118\AppData\Roaming\Typora\typora-user-images\image-20230311153437672.png)]
再次访问共享目录,成功访问,提权成功
2.3JuicyPotato本地提权
2.3.1介绍
Juicy Potato 是一款 Windows 系统的本地提权工具,是在工具 RottenPotatoNG 的基础上做了扩展,适用条件更广。
利 用 的 前 提 是 获 得 了 SeImpersonate 或 者 SeAssignPrimaryToken 权 限 , 通 常 在webshell 下使用。
那么,Juicy Potato 的使用方法有哪些,有哪些限制条件呢?本文将对其进行测试,根据原理分析限制条件。
官网地址: https://ohpe.it/juicy-potato/
下载地址:https://github.com/ohpe/juicy-potato
2.3.2原理
基础知识:
使用 DCOM 时,如果以服务的方式远程连接,那么权限为 System,例如 BITS 服务
使用 DCOM 可以通过 TCP 连接到本机的一个端口,发起 NTLM 认证,该认证可以被重放
LocalService 用户默认具有 SeImpersonate 和 SeAssignPrimaryToken 权限
开启 SeImpersonate 权限后,能够在调用 CreateProcessWithToken 时,传入新的 Token创建新的进程
Juicy Potato 的实现流程:
-
加载 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
-
回应步骤 1 的请求,发起 NTLM 认证
正常情况下,由于权限不足,当前权限不是 System,无法认证成功。
-
针对本地端口,同样发起 NTLM 认证,权限为当前用户
由于权限为当前用户,所以 NTLM 认证能够成功完成。
RottenPotatoNG 使用的 135 端口。
Juicy Potato 支持指定任意本地端口,但是 RPC 一般默认为 135 端口,很少被修改。
-
分别拦截两个 NTLM 认证的数据包,替换数据,通过 NTLM 重放使得步骤 1 ( 权限为
System ) 的 NTLM 认证通过,获得 System 权限的 Token
重放时需要注意 NTLM 认证的 NTLM Server Challenge 不同,需要修正。
-
利用 System 权限的 Token 创建新进程
如果开启 SeImpersonate 权限,调用 CreateProcessWithToken,传入 System 权限的
Token,创建的进程为 System 权限。或者,如果开启 SeAssignPrimaryToken 权限,调用
CreateProcessAsUser,传入 System 权限的 Token,创建的进程为 System 权限
利用的关键:
当前用户支持 SeImpersonate 或者 SeAssignPrimaryToken 权限
以下用户具有该权限:
· 本地管理员组成员和本地服务帐户
· 由服务控制管理器启动的服务
· 由组件对象模型 ( COM ) 基础结构启动的并配置为在特定帐户下运行的 COM 服务器
针对提权的话,主要是第三类用户,常见的为 LocalService 用户,例如 IIS 和者 sqlserver 的用户
2.3.3提权过程
分为以下几步:
- 获取主机的 CLSID
- 从 CLSID 中找出是系统权限的 CLSID
- 查看当前主机权限
- 根据权限执行 Juicy Potato 的命令
whoami /priv
如果开启 SeImpersonate 权限,juicypotato 的参数可以使用 -t t
如果开启 SeAssignPrimaryToken 权限,juicypotato 的参数可以使用 -t u
如果均开启,可以选择 -t *
如果均未开启,那么无法提权。
详细步骤:
官方下载的脚本有问题,需要修改,否则直接输出所有的 CLSID
将 CLSID 从控制台复制出来,放到一个文件中,CLSID.list在同级文件夹下,运行批处理,会检测每一个 ID 属于哪个用户,生成一个 log 文件
查看权限 whoami /priv
可以发现开启了 SeImpersonate 权限,SeAssignPrimaryToken 权限没有,使用-t t 命令提权。
完整命令juicypotato -l 1337 -p c:\windows\system32\cmd.exe -t t -c {03ca98d6-ff5d-49b8-abc6-03dd84127020}
参数说明:
-l 1337 COM 服务器端口
-p 启动的程序
-t 创建进程模式
-c CLSID
一些公开的 CLSID:https://github.com/ohpe/juicy-potato/tree/master/CLSID
2.4使用CobaltStrike对已有shell进行提权
进行后门的下载
运行后门建立shell
成功连接
但权限太低,尝试提权
多次尝试后,利用cve-2018-8120成功提权