系统安全攻防战:DLL注入技术详解
DLL注入是一种允许攻击者在另一个进程的地址空间的上下文中运行任意代码的技术。攻击者使用DLL注入的过程中如果被赋予过多的运行特权,那么攻击者就很有可能会在DLL文件中嵌入自己的恶意攻击代码以获取更高的执行权限。
具体而言,该技术遵循以下步骤:
1. 需要将DLL写入磁盘中;
2. “CreateRemoteThread”调用“LoadLibrary”;
3. 反射加载程序功能将尝试使用适当的CPU寄存器找到目标进程的进程环境块(PEB),并从中尝试查找内存中的kernel32dll和任何其他必需库的地址;
4. 发现所需的API函数(如LoadLibraryA,GetProcAddress和VirtualAlloc)的内存地址;
5. 上述功能将用于将DLL正确加载到内存中,并调用其将执行DLL的入口点DllMain。
本文将介绍使用PowerSploit,Metasploit和自定义工具以及使用这些工具执行DLL注入的过程。
手动注入
手动注入可以从头开始创建DLL,也可以通过Metasploitmsfvenom创建DLL,该文件可以生成包含特定有效内容的DLL文件。 应该注意的是,如果DLL被注入的进程是64位,那么应该使用64位有效负载。
下一步是设置metasploit侦听器,以便在将恶意DLL注入进程后接受连接。
有许多可以执行DLL注入的工具,但最可靠的工具之一是出自SecurityXploded技术团队的Remote DLL Injector,该工具在实现上使用的是CreateRemoteThread技术,它可以将DLL注入到启用了ASLR的进程中,工具使用的过程中只需要提供进程ID和DLL路径两个参数:
RemoteDLLInjector在初始运行的时候会展示为了完成dll注入所涉及到的所有步骤, 如下图所示。
如果DLL被成功注入,它将返回一个具有和被注入进程相同权限的meterpreter 会话。因此,具有高权限的进程可能会是攻击者首选要注入的进程以执行提权操作。
Metasploit
Metasploit框架具有执行DLL注入的特定模块。它只需要指定进程的PID和DLL的路径并和meterpreter 成功建立会话。
PowerSploit
也可以通过使用PowerSploit完成dll注入以提升程序执行权限。 msfvenom可以用于生成恶意DLL,然后通过任务管理器可以获得目标进程的PID。 如果目标进程作为SYSTEM运行,则注入的DLL将以相同的权限运行。
Invoke-DLLInjection模块将执行DLL注入,如下所示:
DLL内的有效内容将被执行,并且将获得SYSTEM权限。
系统安全攻防战:DLL注入技术详解的更多相关文章
- HOOK -- DLL的远程注入技术详解(1)
DLL的远程注入技术是目前Win32病毒广泛使用的一种技术.使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运 ...
- <ReversingEngineering>关于windows32位系统下的dll注入技术经验汇
上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向 ...
- Dll注入技术之消息钩子
转自:黑客反病毒 DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个 ...
- Dll注入技术之注册表注入
DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...
- Dll注入技术之ComRes注入
DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...
- Dll注入技术之远程线程注入
DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...
- DLL注入技术之依赖可信进程注入
DLL注入技术之依赖可信进程注入 依赖可信进程注入原理是利用Windows 系统中Services.exe这个权限较高的进程,首先将a.dll远线程注入到Services.exe中,再利用a.dll将 ...
- Dll注入技术之输入法注入
DLL注入技术之输入法注入 输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文件本质上只是个存放在C:\WIN ...
- CDN学习笔记二(技术详解)
一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同 ...
随机推荐
- sqlit3事务
事务定义了一组SQL命令的边界,这组命令或者作为一个整体被全部执行,或者都不执行.事务的典型实例是转帐. 事务的范围 事务由3个命令控制:BEGIN.COMMIT和ROLLBACK.BEGIN开始一个 ...
- Python3简明简称(八)—— 函数
我们经常需要在同一个程序里多次复用代码.函数可以很好的帮助我们完成这一点.我们在函数里写我们要重复做的事,然后我们在任何需要的时候调用它.我们已经看到一些内建的函数,比如 len(),divmod() ...
- vue >>> 编译失败问题 loader 待解决( iview vue脚手架生成)
vue >>> 编译失败问题 loader 待解决 用vue iview 脚手架 来一次试试~
- PHP17 PDO
学习要点 PDO简要 PDO对象 PDO对象的使用 PDOStatement对象 PDO事务处理 PDO简要 PHP支持那些数据库操作 MySQL,Oracle,SQLServer,SQLite.Po ...
- java中等待所有线程都执行结束
转自:http://blog.csdn.net/liweisnake/article/details/12966761 今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原 ...
- Linux CentOS 知识和常用命令
1.常用热键 [Tab]它具有“命令补全”与“文件补全”的功能[Ctrl+C]中断执行中的程序组合键[Ctrl+d]键盘输入结束.也可以用来替代 exit 2.Linux 常用编辑器 vi 和 vim ...
- linux wget变成000权限
今天使用wget下载文件时出现:-bash: /usr/bin/wget: 权限不够. 查看 /usr/bin/wget 的权限为: ---------- 1 root root 357400 3月 ...
- mysql多字段组合删除重复行
DELETEFROM boll_paramWHERE id in ( SELECT a.id FROM ( SELECT id FROM boll_param WHERE (symbol, time_ ...
- NowCoder小杰的签到题(模拟,思维)
链接: https://www.nowcoder.com/acm/contest/52/M 题意: 给定n个队伍的到场时间, 有3个报道位, 每个队伍报道需要b时间, 求所有报道完成的时间. 分析: ...
- 基本Sql语句汇总
关于Sql语句的学习,选择的DBMS为SQL Server,Sql语句随着工作中的应用不断补充,不具备系统性,为个人笔记汇总,网上有很多优秀的资源,故不对每一处应用做过多细致的说明,后期会对部分篇幅较 ...