一文读懂远程线程注入

访客3年前黑客文章1230

在红队行动中,红队的目的都是要在不暴露自身行动的前提下,向蓝队发动攻击。他们使用各种技术和程序来隐藏C2连接和数据流。攻击活动的之一步是获得初始访问权。他们会使用定制的恶意软件和有效载荷来躲避防杀软和EDR等防御工具。

本文涉及知识点实操练习:DLL注入型病毒实验(通过实验了解DLL注入型病毒的攻击过程)

进程注入是用来逃避防御机制的重要技术之一。远程线程注入是其中的一种简单可靠的技术,它的工作原理是将shellcode注入到另一个合法的进程中,并为该进程创建一个线程来运行payload。

runshellcode.png

我们通常会使用标准的Windows API、Native API和直接syscalls来实现远程线程注入,这些实现方式都有各自的优缺点,下图展示了标准的windows API、Native API和直接syscalls在windows架构中的工作原理。

yaunli.png

标准的windows API

优点:易于使用

缺点:可被大多数AV/EDR检测到

我们首先测试使用标准的Windows API,因为它比其他两种方式更简单。首先,我们需要找到我们的目标进程ID。我们需要创建一个名为find_process的函数,它可以得到一个进程名。它使用CreateToolhelp32Snapshot API得到当前进程列表,并使用Process32First和Process32Next逐一查看,并将进程名与我们的目标进程进行比较。使用Process32First和Process32Next API会得到一个指向PROCESSENTRY32结构的指针,这个结构可以保存进程的信息,比如它的名字和id。如果它成功地找到了进程,就会返回它的进程ID。

下一步,我们需要使用OpenProcess 函数打开目标进程。我们可以传递我们的参数,包括从上一步得到的目标进程id,它将返回该进程的句柄。

现在我们需要使用VirtualAllocEx函数在目标进程中为我们的shellcode分配空间,我们应该给这个空间分配PAGE_EXECUTE_READWRITE(读、写、执行)权限,这个函数返回分配区域的首地址。

现在我们应该使用WriteProcessMemory函数将我们的shellcode写入分配的内存区域。

这时候可以在目标进程中创建一个线程,并运行我们之前写到内存页中的shellcode.我们可以使用CreateRemoteThread函数.还应该传递0作为dwCreationFlags参数,表示在创建后立即运行线程。

为了能在kali中编译代码,我们需要使用MinGW编译器。

我们将输出的文件发送到我们的windows机器上运行它。如果我们打开process hacker并查看notepad.exe进程,在内存部分有一个很可疑的具有RWX权限的内存页,如果我们打开它,就可以看到里面的shellcode。

memory_hacker.png

Native API

优点:能够绕过一些AV/EDR

缺点:

很难使用

仍可能被大多数AV/EDR检测到。

无法在所有版本的Windows上运行

为了方便与操作系统进行交互,程序员一般使用微软推荐的标准API(Win 32 API)。标准Windows APIs是在Native APIs的基础上包装产生的。Native APIs 或 Undocumented APIs 都可以在 ntdll.dll 库中找到。微软不推荐使用这些API。你可以查看第二张图,可以很清楚看到这些API是如何工作的。native API也使用syscalls与os内核交互,微软使用这种架构是因为它可以在不影响标准API的情况下改变操作系统内核。

Native API也被称为无文档API,因为你通常找不到它们的官方文档。我们主要是通过查看其他人的代码或者别人总结的非官方文档,来查看它们的使用 *** 。

在上一节中,我们使用了标准的API来完成我们的工作,这里我们再深入一层,尝试使用原生API。首先,我们需要将ntdll.dll加载到我们的恶意软件进程中.然后我们需要定义与我们要使用的原始函数格式完全相同的函数指针,并使用这些函数的基地址来初始化这些指针.

我们可以使用LoadLibraryW函数,动态加载ntdll.dll或任何其他dll到我们的运行进程中,同时它会返回该库的一个句柄。

然后我们定义函数指针类型,并使用GetProcAddress函数获取函数的基地址,并将其赋值给指针,以下是NtOpenProcess的使用例子。

我们用与NtOpenProcess函数相同的参数定义了我们的函数类型。对于NtWriteVirtualMemory , NtAllocateVirtualMemory , NtCreateThreadEx函数都要这样做。

NtOpenProcess

和上一节一样,我们从打开目标进程开始做,但这次使用的是NtOpenProcess函数。这个函数并不返回目标进程的Handle,我们需要传递一个句柄指针作为之一个参数。

现在我们可以使用 NtOpenProcess函数

NtAllocateVirtualMemory

我们使用NtAllocateVirtualMemory函数在目标进程中分配内存,我们定义该函数的原型。

然后我们得到函数的基地址。

我们把这个地址称为 "NtWriteVirtualMemory"

我们传递了一个名为remote_process_buffer的指针,它代表的是所分配空间的基地址。

NtWriteVirtualMemory

像之前的步骤一样,先定义NtWriteVirtualMemory函数原型,我们应该将我们的shellcode,shellcode的长度,以及分配空间的基地址作为参数进行传递

NtCreateThreadEx

现在我们可以在目标进程中创建一个线程并运行我们的shellcode了。我们使用NtCreateThreadEx在目标进程中创建一个远程线程并运行我们的shellcode。

Direct Syscalls

优点:用户系统中所有的API监控工具都无法检测到。

缺点:

可能无法在所有版本的Windows上运行

很难使用

在前面的步骤中,任何API监控程序和EDRs都可以检测到我们的API调用,阻止我们的攻击。现在,如果我们直接使用syscalls,用户系统就没有任何工具可以检测到API的调用。

syscalls的一个严重缺点就是他的运行对于操作系统的版本的依赖程度很高,我们的代码可能无法在不同的windows版本上运行。然而,通过使用像SysWhisper 这样的工具,我们就可以让软件在不同版本的windows系统上运行。运行下面的命令就可以在我们的windows 10系统上生成相应的文件。

这个命令会生成两个文件syscall.a *** 和syscall.h,我们需要将它们添加到visual studio项目中。然后我们应该在项目中启用MA *** ,并将头文件包含在我们的主代码中。这里可以像Native API一样调用函数,但这里我们不需要加载ntdll.dll,获取函数的基地址,和定义函数原型。我觉得SysWhisper让利用syscalls变得非常简单了。

文章至此,也该告一段落了,文中涉及更多的是winows底层的知识,主要讲解了三种常见的 *** ,希望在写文章的同时,能给各位师傅带来一点点的启发和灵感。

相关文章

和平精英体验服怎么注册 和平精英体验服抢号注册流程

和平精英体验服怎么注册 和平精英体验服抢号注册流程

和平精英体验服往往比正式服提前上线一些最新内容和活动,很多玩家都想在体验服提前体验到里面的新内容,但是大家知道,体验服的账号是限量的,不是每个人都有体验服测试资格的哦,那么玩家如何才能获得体验服的账号...

四川省轻吻也飘商务微信号联系方式

活跃在微信群的高端模特哪里找,怎么在线预约百色市高端商务迅雷。今天小编就给大家详细介绍下,高端模特的照片资料,在线预约流程地点,联系方式微信QQ,服务类型,项目价格和注意须知。下面我们将一一叙述。...

红米Note 2 Pro将于11月24日发布 小米首款指纹识别机

现阶段早已明确小米手机将于11月24日公布新手机。从如今状况看来,它应当便是红米noteNote 2 Pro了,对于小米5旗舰级也许也要这些。从相继曝出的信息内容看来,红米noteNote 2 Pro...

黑客新闻,网赌账号被冻结找黑客靠谱么,找黑客查看她的微信聊天记录吗

注入点剖析结束后,会在下方列表中显现可注入的地址,挑选其间一个地址,右键挑选 [检测注入]; 'ADMIN_PASS' => '".$_POST['db_pass']' //创始人暗码...

廊坊职业技术学院宿舍怎么样 住宿条件好不好

廊坊職業技術學院宿舍怎麼樣 住宿條件好欠好讀書啊,我信赖但有朗朗書聲出破廬,遲早有一日有萬鯉躍龍門之奇象。 大學宿舍是我們的第二個傢,大學生涯一天之中最少要有三分之二的時間在宿舍中度過,以是說,和...

qq号解除冻结黑客,中国微信黑客,黑客赌博网站

2019年,APT要挟的攻防两边处于白热化的博弈傍边。 作为APT防护的安全厂商比从前愈加频频的盯梢和曝光APT安排的进犯活动,其间包含新的APT安排或APT举动,更新的APT进犯兵器和在野缝隙的运用...