代码注入手艺之Shellcode注入 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

代码注入手艺之Shellcode注入

申博_安全防护 申博 24次浏览 已收录 0个评论

代码注入是指在应用顺序中注入恣意外部代码的行动,有两种范例的代码注入:

1.注入易受攻击的顺序;

2.注入不易受攻击的顺序;

假如代码注入是在易受攻击的应用顺序中完成的,则可以经由历程利用在处置惩罚无效数据时发作的破绽来完成。在这类状况下,代码注入的水平就取决于应用顺序中的毛病,我们也将其称为“破绽”。但问题在于,应用顺序应当具有可以被利用来取得代码实行的破绽。

本系列针对第二种状况,即不愿望或不须要该应用顺序具有破绽。正如所预感的那样,这为应用顺序供应了一个异常普遍的范畴,同时也为滥用操纵系统供应了时机。

歹意软件一般运用此要领,因为实行代码注入之前不须要满足任何前提,而且操纵系统自身也完整支撑该要领。一切重要的操纵系统都供应ABI和API,以与其他历程举行交互,掌握它们后,在其他顺序的历程空间中读写内存。

经由历程CreateRemoteThread API举行代码注入

CreateRemoteThread是Win32 API供应的用于在另一个历程中建立线程的函数。在另一个应用顺序中建立线程之前,必需满足两个前提:

1.试图在另一个历程中建立线程的历程必需具有建立线程的权限,简朴地说,这意味着与受益历程(目标是指我们要在个中建立线程的历程)具有雷同或更高的权限。

2.两个历程(目标历程和攻击者历程)必需驻留在同一个会话中,假如会话标识符不婚配,将不会建立线程。

假如上述任何一个前提不满足,则操纵系统自身将谢绝代码注入历程。

但这不并是Windows OS体系构造中的平安破绽,而是由操纵系统供应的功用。因为我们没法修正具有比我们更高的权限的历程,因而不会逾越平安边境。

算法

为了经由历程CreateRemoteThread API完成代码注入,我们必需遵照以下算法:

1.挑选一个历程作为受益者历程;

2.运用带有参数PROCESS_ALL_ACCESS的OpenProcess函数取得对历程的接见权限,以便可以实行所需的操纵;

3.假如OpenProcess失利,请退出;

4.运用VirtualAllocEx函数在受益者历程的历程空间中分派内存;

5.假如VirtualAllocEx失利,请退出;

6.将shellcode写入VirtualAllocEx分派的内存位置;

7.假如Shellcode写入失利或只要部份写入Shellcode,请退出;

8.编写完shellcode后,请运用必要的参数挪用CreateRemoteThread,将shellcode的地点指向LPTHREAD_START_ROUTINE。

运转环境

就本文的示例而言,必需具有以下环境设置:

1.Visual Studio 2019;

2.Windows 10 RS6(x64);

注重:可以从我的github存储库接见代码。

代码注入

接见长途历程

要对任何历程实行内存操纵,我们必需可以接见它。可以运用函数OpenProcess来取得它,该函数的原型为:

代码注入手艺之Shellcode注入

它包括三个参数:

1.dwDesiredAccess:它依据受益者历程的平安令牌举行检查,不过你可以指定一些所需的接见值,然则指定PROCESS_ALL_ACCESS包括该历程的一切大概的接见权限。

2.bInheritHandle:这是一个布尔值,指导该历程建立的历程是不是将继续此句柄。

3.dwProcessId:这是受益者历程的历程标识符;

这个历程返回其他历程的句柄(胜利时),其他API函数可以运用它来操纵受益历程的内存。假如失利,则返回NULL。

为Shellcode分派空间

一旦取得了受益历程的句柄,我们就可以在受益历程内存中为shell代码分派空间,这是经由历程运用VirtualAllocEx API挪用完成的。

VirtualAllocEx的原型为:

代码注入手艺之Shellcode注入

它包括五个参数:

1.hProcess:处置惩罚要在个中分派内存的历程;

持续对抗xHunt:通过DNS隧道检测阻止新型PowerShell后门

摘要 在对xHunt活动的持续分析过程中,我们观察到存在与pasta58[.]com域名相关联的多个域名,这些域名与已知的Sakabota命令和控制(C2)活动相关。在2019年6月,我们观察到其中一个重复使用的域名(windows64x[.]com)被用作新的基于PowerShell后门的C2服务器,我们将其命名为CASHY200。该PowerShell后门使用DNS隧道与其C2服务器进行通信,通过向上述域名所对应的攻击者控制的域名服务器发出DNS A查询来实现。CASHY200解析C2服务器在DNS回答中提供的数据,以在系统上运行命令,并将结果通过DNS查询的方式发送回C2。在我们所分析的几个样本中,CASHY200都使用了随机生成的标识符,这些标识符存储在注

2.lpAddress:指向受益者历程内存中指定地点的指针,假如将参数指定为NULL,则该函数自动挑选要分派给的内存页;

3.dwSize:要分派的内存地区的大小,它是以字节为单元指定的。

4.flAllocationType:指定要分派的内存范例,该参数必需包括以下三个值之一:MEM_COMMIT,MEM_RESERVE,MEM_RESET,MEM_RESET_UNDO。

5.flProtect:指定分派的内存保护。出于我们的目标,因为它将包括要实行的代码,而且愿望其具有可读性和可写性,因而将其设置为PAGE_EXECUTE_READWRITE。

该函数在胜利时返回分派的基地点,而在失利时返回NULL。至此,我们已胜利地在受益历程中分派了可实行内存。

在长途历程中编写Shellcode

如今,我们须要在分派的地区中编写我们的shellcode。为此,我们有一个称为WriteProcessMemory的函数。

WriteProcessMemory是一种由挪用者将数据写入指定历程的内存地区的函数,须要注重的是,全部内存地区必需是可写的,不然该函数将会失利,这就是为何我们将内存分派为可写的,以及可读和可实行的缘由。

WriteProcessMemory的原型为:

代码注入手艺之Shellcode注入

WriteProcessMemory具有五个参数:

1.hProcess:处置惩罚要向个中写入数据的历程;

2.lpBaseAddress:我们要在个中写入数据的地点(以指针的情势);

3.lpBuffer:指向必需写入的数据的指针,该指针必需是const指针。

4.nSize:必需写入的数据量(以字节为单元);

5.* lpNumberOfBytesWritten:指向SIZE_T的指针,该指针将存储在该目标中写入的字节数。

假如函数因为某种缘由而失利,它将返回false;假如胜利,则将返回true。

至此,一切设置都已准备就绪,只须要在长途历程中建立一个线程并运转它即可。

实行shellcode

为了在长途历程中建立线程,我们运用Win32 API供应的函数CreateRemoteThread。

1.CreateRemoteThread是一个用于建立在另一个历程的虚拟空间中运转的线程的函数。 2.CreateRemoteThread供应的功用有限,而且可以接见可认为线程指定的扩大属性,可以运用CreateRemoteThreadEx,但在本文的示例下,前者就足够了。

CreateRemoteThread的原型为:

代码注入手艺之Shellcode注入

CreateRemoteThread有七个参数,个中只要三个对我们有效。其他的可以具有默认值,只管经由历程调解它们可以对新建立的线程举行更多掌握。

我们感兴趣的参数是:

hProcess:受益者历程的句柄,我们愿望在个中建立线程。

lpStartAddress:它是指向THREAD_START_ROUTINE的指针,THREAD_START_ROUTINE是线程一旦建立即将从其入手下手实行代码的位置。

lpParameters:指向LPTHREAD_START_ROUTINE所需参数的指针。因为在本例中,它是一个简朴的shellcode,因而不须要任何参数,因而,我们将其保存为NULL,该参数在DLL注入中有重要意义。

演示

在演示视频中,你可以看到我运用了一个Shellcode在Windows 10 RS6 (x64)上启动cal .exe(运用msfvenom生成)。

该要领的上风

与其他代码注入手艺比拟,运用CreateRemoteThread举行代码注入具有多个上风,比方:

1.最轻易完成;

2.不须要对库函数举行地点剖析;

3.不须要守候事宜的发作;

4.不须要操纵内存中的文件构造;

该要领的瑕玷

该要领除了长处以外,另有一些瑕玷,这些瑕玷使其没法成为盛行的代码插进去手艺,比方:

1.只能注入二进制代码;

2.变动Shellcode时须要举行大批变动;

3.运用shellcode可以完成的数目有限。

本文翻译自:https://pwnrip.com/demystifying-code-injection-techniques-part-1-shellcode-injection/


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明代码注入手艺之Shellcode注入
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址