大余
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

系列文章
简介
渗透测试-地基篇
该篇章目的是重新牢固地基,加强每日训练操作的笔记,在记录地基笔记中会有很多跳跃性思维的操作和方式方法,望大家能共同加油学到东西。
请注意:
本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。
名言:
你对这行的兴趣,决定你在这行的成就!
一、前言
渗透测试人员需谨记《网络安全法》,根据《网络安全法》所示,未经授权的渗透测试都是不合法的,不管是出于何种目的。红队渗透人员在进行渗透期间,渗透测试的行为和项目必须在被渗透方授予权限可渗透后,才可进行渗透测试操作。
如今有一家dayu公司,需要对自己的业务以及整体的内网框架体系进行隐患挖掘,授予权限我进行对dayu公司的渗透测试操作,在签署了双方的《渗透测试授权书》后,我开始了对dayu公司的渗透之旅。
跳开思维讲,我此篇内容是内网渗透篇章,通过我的专栏:
社工钓鱼 -> 免杀过全杀软 -> 内网渗透
那么我通过了社工钓鱼的各种方式,将钓鱼文件进行免杀后,成功钓鱼到了该公司外围人员计算机,并控制了该计算机权限获得shell,并成功登录对方电脑。
通过前期对域用户大量的信息收集,画出了相对应的简单网络拓扑图,下一步需要进攻子域控制器,思路如下:
域普通用户 -> 子域控制器 -> 父域控制器 ->辅域控制器
通过该思路进攻即可,还有另外一条思路:
域普通用户 -> 10.10.21.0/24二级区域 -> 继续延伸
渗透人员最爱系统之一有kali,还有各类windows集成的武器库系统,通过上期隐藏通信隧道技术已经在内网域森林中建立了一级隧道,今天我们就来对子域控制器进行提权,总结实战中会遇到的权限提升的各种方法,利用这些方法在内网中遨游!
不会权限提升技术,就无法对内网机器进行进一步的渗透!!
二、环境介绍
目前信息收集获得的网络情况:(模拟环境)
拓扑图简介
为了更好的演示接下来的渗透和回看总拓扑图公司搭建环境情况:
接下来将演示分析内网中的权限提升各种方法,利用该方法在域森林中旅行!
三、管理员配置错误利用
1、系统服务权限配置错误
系统服务权限配置错误(可写目录漏洞)有如下两种可能:
1. 服务未运行:攻击者会使用任意服务替代原来的服务,然后重启服务。
2. 服务正在运行无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用DLL劫持技术并尝试重启服务来提权。
1)导入PowerUP
输入Get-ExecutionPolicy查看权限
输入Set-ExecutionPolicy UnRestricted修改权限
Import-Module .\PowerUP.ps1
该需要管理员用户执行cmd才可以修改安全机制!也有别的方法绕过!
2)绕过powershell安全机制
powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
通过bypass绕过powershell的安全机制!目前未发现可利用服务!
3)拓展利用
1. Invoke-AllChecks 执行所有脚本来检查目标 2. Find-PathDLLHiJack 检查环境变量哪些目录是可以写入的 3. Get-ApplicationHost 该模块可以利用系统上applicationHost.config文件恢复加密过的应用池和虚拟目录的密码 4. Get-RegistryAlwaysInstallElevated 该模块用于检查AlwaysInstallElevated注册表项是否被设置,如果已被设置,以为是MSI文件是以SYSTEM权限运行的 5. Get-ServiceDetail 该模块用于返回某服务的信息 Get-ServiceDetail -ServiceName Dhcp 6. Get-ServiceFilePermission 用于检查当前用户能够在哪些服务目录写入相关联的可执行文件 Test-ServiceDaclPermission 该模块用于检查所有可用的服务,并尝试对这些打开的服务进行修改,并返回修改对象 7. Get-ServiceUnquoted 该模块用于检查服务路径,此处利用了Windows的逻辑罗东,当文件名包含空格时,WindowsAPI回解析为两个路径,并同时执行 8. Get-UnattendedInstallFile 该模块用于检查以下路径,这些文件中可能存在部署凭据 9. Get-ModifiableRegistryAutoRun 该模块用于检查开机自启的应用程序路径和注册表键值,并且返回当前用户可修改的程序路径 10. Get-ModifiableScheduledTaskFile 该模块用于返回当前用户能够修改的计划任务程序的名称和路径 11. Get-Webconfig 该模块用于返回服务器上web.config文件中的数据库连接字符串明文 12. Invoke-ServiceAbuse 该模块通过修改服务来添加用户到指定的组 13. Restore-ServiceBinary 该模块用于恢复服务的可执行文件到原始目录 14. Test-ServiceDaclPermission 该模块用于检查某个用户是否在服务中有自由访问控制的权限 15. Write-HijackDll 该模块用户输出一个自定义命令并且能够自我删除的bat文件到$env:Temp\debug.bat,并出出一个能够启动这个bat文件的DLL 16. Write-UserAddMSI 该模块用于生成一个安装文件,运行这个安装文件后会弹出用户的对话框 17. Write-ServiceBinary 该模块用于预编译C#服务的可执行文件,默认创建一个管理员账号 18. Install-ServiceBinary 该模块通过Wirte-ServiceBinary写一个C#服务来添加用户
通过以上的模块进行相对应的查询服务漏洞,从而提权!
2、注册表键
我这举了其中一个典型的案例来演练内网中注册表键的错误配置导致的权限提升。
注册表键AlwaylanalElvated是一个策略设置项。Windows 允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以NT AUTHORITY\SYSTEM权限来安装恶意的MSI文件。
PathsAlwaysInstallElevated漏洞产生的原因
该漏洞产生的原因是用户开启了Windows Installer特权安装功能:
1)在“运行”设置中输入"gpedit.msc",打开组策略编辑器
组策略——计算机配置——管理模板——Windows组件——Windows Insaller——始终以提升权限进行安装:选择启用。
在windows组建-windows installer打开进行复现配置,选择启用!
2)设置完毕,会在注册表的以下两个位置自动创建键值“1”
运行输入regedit:
HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
可看到选择启用后键值自动设置为“1”。
3)Windows Installer简介
Install是Windows 操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer 除了是一个安装程序,还用于管理软件的安装管理软件组件的添加和删除,监视文件的还原、通过回滚进行灾难恢复等。
Windowrs Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分。Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装和卸载软件时需要的大量指令和数据。Msiexec.exe用于安装MSI文件,一般在运行Microsoft Update安装更新或者安装一些软件的时候使用,占用内存较多。简单来说,双击MSI文件就会运行Msiexec.exe。
4)PowerUp实战演示
可以使用PowerUp的Get-RsigtyswiylstnlElvatee模块来检查注册表键是否被设置。如果AlwaysInstallElevated注册表键已经被设置,就意味着MSI文件是以System权限运行的。
Import-Module .\PowerUp.ps1
Write-UserAddMSI
或者远程读取执行:
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Get-RegistryAlwaysInstallElevated
可看到MSI文件是以System权限运行,那么开始进行提权攻击!
5)PowerUp安装MSI
msiexec /q /i UserAdd.msi #普通用户权限运行
/quiet 在安装过程中禁止向用户发送消息
/qn 不使用GUI
/i 安装程序
成功利用添加用户!
也可以利用MSF:
也可以利用Msf的use exploit/windows/local/always_install_elevated完成上述操作
那么只要禁用注册表健ALwayslnstallElevated,就可以阻止攻击者通过MSI文件进行提权。
四、可信任服务路径漏洞
可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows 文件路径解析的特性并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。也就是说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐台配置,而会会用脚本批量部署的方法。这一过程中,会使用安装配置文件。这些文件包含所有的安装配置信息,其中的一些还可能包括本地管理员的账号和密码等消息。在进行渗透测试中,可以找到此类相关的文件进行分析。
1、TSP漏洞产生的原因
TSP(Trusted Service Paths)因为windows服务通常都是以System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行。
例如,有一个文件路径"C:\Program Files\ Some Folder\Service.exe",对于该路径中的每一个空格,Windows都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。
演示:
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
icacls "c:\phpstudy_pro\COM"
可以看到phpStudyServer.exe服务所在对应的路径没有被引号引起来,且路径中包含空格。因此,目标机器中存在可信任服务路径漏洞。然后通过icacls对目标文件夹的写权限进行检测,可看到 发现c:\phpstudy_pro\COM目录后有(I)(OI)(CI)(F)字样。
icacls "存在双引号的服务路径" #查看权限
Everyone: 用户对这个文件夹有完全控制权限。也就是说,所有用户都具有修改这个文件夹的权限。
(M):修改。
(F): 完全控制。
(CI): 从属容器将继承访问控制项。
(OI): 从属文件将继承访问控制项。
"(OI)(CI)(F)"的意思是,对该文件夹,用户有读、写、删除其下文件、删除其子目录的权限。
确认目标机器中存在此漏洞后,把要上传的程序重命名并放置在存在此漏洞且可写的目录下,执行如下命令,尝试重启服务。
这里需要把后门植入利用到SC:
sc stop service name
sc start service name
接下来尝试利用MSF进行演示:
也可以使用msf中的WINDOWS Service Trusted Path Privilege Escalation模块进行渗透测试。该模块会将可执行程序放到受影响的文件夹中,然后攻击影响的服务重启。
use exploit/windows/local/unquoted_service_path
set session 3
run #命令执行后,反弹一个新的meterpreter,但是反弹的会很快终端,需迁移进程
在渗透测试中,需要在终止载荷进程之前将它迁移到其他进程中,可以使用“set AutoRunScript migrate -f"命令自动迁移进程
由于将文件路径用引号引起来了,复现提示无可利用的TSP漏洞,在实战中可以尝试使用!
2、批量自安装错误导致
网络管理员在内网中配置同一个环境是,通常会采用脚本化批量部署。在这个过程中,会使用配置文件。这些文件可能包含本地管理员账户密码信息。
1)全盘搜集
dir /b /s c:\Unattend.xml
在Unattend.xml文件中发现了password密码信息,尝试破解!
2)解码ZGF5dSFAIzEyMw==是base64编译过后的密码,获得正确密码为:dayu!@#123
除了Unattend.xml文件外,还要查看系统中的sysprep.xml和sysprep.inf两个文件,这些文件都有可能涵盖密码等信息。
3)MSF收集
Metasploit集成了该漏洞的利用模块post/windows/gather/enum_unattend
use post/windows/gather/enum_unattend
set SESSION x
run
下一步进入shell查看相对应寻找到的线索即可!
3、计划任务详解
计划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。任务计划在每次系统启动的时候启动并在后台运行。
当我们需要在服务器上定时执行一些重复性的事件时使用的,可以通过计划任务程序来运行准备好的脚本、批处理文件夹、程序或命令,在某个特定的时间运行。
1)查看计划任务
schtasks /query /fo LIST /v > dayu.txt
通过schtasks查看到本机器的计划任务所有详情,发现360zipUpdate.exe进程是以\SYSTEM权限运行的,那么在实战中的思路是遇到了该类型的进程,是可以进行提权操作的。
2)检查该进程是否有写入权限
accesschk64.exe -dqv "C:\Program Files (x86)\360\360zip" -accepteula
通过accesschk64可看到,这里不仅用system权限来运行,但是没用Authenticated 等权限提示,应该是不具有写入人间的权限。
如果具有Authenticated Users权限,思路是:
工具(MSF)生成一个后门,然后备份进程文件后覆盖该程序目录下的进程文件,然后重启服务或者机器,即会获得反弹shell,这是一个思路希望大家谨记。
3)accesschk拓展
AccsChk是Syslnteraks 套件中的一个工具,由Mnk Rusnoih编写用于在Wndows中进行一些系统或程序的高级查询、管理和故障排除工作,基于杀毒软件的检测等,攻击者会尽量避免接触目标机器的磁盘。而AcsCce是微软官方提供的工具,一般不会引起杀毒软件的报警,所以经常会被攻击者利用。
下载地址:
https://docs.microsoft.com/zh-cn/sysinternals/downloads/accesschk
功能主要有:
获取用户对某个资源(包括文件,目录,注册表项,全局对象和Windows服务)的权限
用法:
执行如下命令,查看指定目录的权限配置情况。如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序。
通过刚开始的探测,我们知道了只有允许“Authenticated Users”才可以进行写入的权限,那么简单的利用Accesschk可以全局查找机器内所有的服务是否存在该权限!在EXAMPLE中海油很多方法和解释,我简单的演示一种常用的方法!
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
#查找C盘底层目录
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
#查找全局机器环境
简单的演示,找到了非常多存在“Authenticated Users”组对这些服务的权限!!
左边RW的解释为:
R为读权限,W为写权限,RW表示有读写权限,如果前面为空则表示没有权限。
那么接下来我们只需要检查启动路径、服务权限、计划任务、启动项后进行相对应的提权即可!
五、域森林组策略
域内渗透目的就是拿下域控制器,那么管理员在管理几百上千台终端域用户,如何制定策略,修改策略,下达指令进行域用户同意操作的呢?假设管理员对几千台域用户进行统一修改密码策略下达,那么策略存储在目录中哪个位置?接下来将演示和寻找管理员的策略内容进行信息渗透!
1、组策略简介
SYSVOL是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。SYSVOL文件夹是在安装活动目录时自动创建的,主要用来存放登录脚本、组策略数据及其他域控制器需要的域信息等。SYSVOL在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录的域范围内共享。
整个SYSVOL目录在所有的域控制器中是自动同步和共享的,所有的域策略均存放在C:Windows\SYSVOL\DOMAIN\Policicsl目录中。所以攻击者获得了一台域控制器机器的本地管理员密码,就相当于获得了整个域中所有机器的本地管理员密码。
常见的组策略首选项(Group Policy Preferences,GPP)列举如下:
1. 映射驱动器(Drives.xml )。
2. 创建本地用户。
3. 数据源(DataSources.xml )
4. 打印机配置(Printers.xml )
5. 创建/更新服务((Services.xml )
6. 计划任务(ScheduledTasks.xml )
2、组策略执行演示
接下来将在子域控制器上对普通域用户进行下发策略进行管理员通过组策略统一修改过密码!
1)打开组策略管理
在域控上执行:
开始 -> 运行 -> 输入gpmc.msc!!
2)新建策略
选择god.org -> 右键组策略对象 -> 新建!!
新建一个"密码统一修改"组策略!!
右键"密码统一修改"策略选择编辑
3)修改新建策略
弹出计算机配置 -> 首选项 -> 控制面板设置—本地用户和组,右键本地用户和组 -> 新建 -> 本地用户!!
用户名选择administrator,在密码栏输入密码,去除用户下次登入时须更改密码(也可以保留,看自己需求),完成后点确定!
4)更新策略
gpupdate
#域中的机器从域控制器处获得组策略的更新信息
2、获取组策略的凭据
通过简单复现,修改了策略用户密码!那么更新策略后,我们攻击者怎么获取这些策略信息?
管理员在域中新建一个组策略后,操作系统会存放在SYSVOL共享目录中生成一个XML文件,该文件中保存了该组策略更新后的出调。该密码使用AES-256加密算法,安全性还是比较高的。但是,2012年微软在官方网站公布了密码的私钥,因此保存在XML文件中的密码的安全性大大降低。任何域用户和域信任的用户均可对该共享目标进行访问,这就意味着,任何用户都可以访问保存在XML文件中的密码开将解密,从而域控中所有使用该账户/密码的本地管理员计算机。在SYSVOL中搜索,可以找到包含cpassword 的XML文件。
1)cpassword查找
C:\Windows\SYSVOL\sysvol\xiyou.dayu.com\Policies\{18703774-40F5-47D7-B8B5-1080D068A7A7}\Machine\Preferences\Groups
成功查找到Groups.xml文件!
2)获得AES 256密匙保存的是加密后的内容,加密方式为AES 256!
cpassword="71300ed8a32ae8ca021a41351279d7717c230cadab3fdf53acc8c4ed7432fa29"
破解AES还是非常非常困难的,原因:
2^256就是256位AES的密钥空间的组合数,远大于地球中沙子的数量(3×10^23)。2^256>2^(10*25)>10^(3*25)=10^75>>>3×10^23
那么我们可以利用AES进行横向移动,后期会讲解到!
3)MSF获取cpassword
use post/windows/gather/credentials/gpp
set session 2
run
我是在普通域用户进行的操作,会读取子域控制区的目录,但是无法访问IPC等共享,该方法会在后期篇章中进行详细讲解!!
3、加固组策略信息
在用于管理组策略的计算机上安装KB2962486补丁,防止新的凭据被放置在组策略首选项中。微软在2014年修复了组策略首选项提权漏洞,使用的方法就是不再将密码保存在组策略首选项中。
此外,需要对 Everyone 访问权限进行设置,具体如下:
1. 设置共享文件夹SYSVOL的访问权限。
2. 将包含组策略密码的XML文件从SYsVOL目录中删除
3. 不要把密码放在所有域用户都有权访问的文件中
4. 如果需要更改域中机器的本地管理员密码,建议使用LAPS
六、总结
经过管理员配置策略、注册表键、安装错误、计划任务、组策略读取等操作,可以在域环境中进行提权操作,提权方法非常多种,知道越多在域内横向的机会就越大!
如果不会这几种方法寻找服务和密码进行权限提升,就很难在内网中旅行,无法见到更多的风景,学习今天的方法,利用对应的服务表等模块信息进行内核提权,就可以在该公司域森林中遨游了!
公司域森林搭建 -> 域森林信息收集上 -> 域森林信息收集下 -> 域森林通信隧道建立上 -> 域森林通信隧道建立下 -> 域森林中权限提升上 -> 域森林中权限提升中 ->......
接下来在《域森林中权限提升(下)》中会接触各种UAC、令牌窃取、无凭证等权限提升的方式方法!如何建立内网渗透框架一步步攻击该公司内网环境的思路和方法,请看下篇域森林下权限提升篇章!
希望大家提高安全意识,没有网络安全就没有国家安全!
今天基础牢固就到这里,虽然基础,但是必须牢记于心。
作者:大余
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)

