Shellcode是嵌入在恶意程序中的一段代码,在感染受害者的目标系统后,可以获取命令shell代码,例如类UNIX操作系统中的/bin/bash, Microsoft Windows 操作系统上的 MS-DOS 和cmd .exe。shellcode经常被用作漏洞利用负载。
Shellcode1.如你所知,仅仅感染系统、利用漏洞或安装某些系统服务是不够的。在许多情况下,黑客的所有这些行为都是为了获得对受感染机器的管理员访问权限。 2.所以恶意软件只要感染了机器,得到一个shell,也就是控制权的一种方式。这是信息泄露、创建僵尸网络将目标系统变成僵尸的直接途径,或者只是在被黑客入侵的机器上执行其他破坏性功能。 3.Shellcode通常被注入到正在运行的程序的内存中,然后通过利用堆栈溢出或堆缓冲区溢出等编程错误或使用格式字符串攻击将控制权转移给它。 4.通过用注入的shellcode的地址覆盖堆栈上的返回地址、覆盖被调用函数的地址或更改中断处理程序来将控制权转移到shellcode。这一切的结果就是shellcode的执行,它打开了通道供破解者使用。
5.在利用远程漏洞(即漏洞利用)时,shellcode可以在易受攻击的计算机上打开预定义的 TCP 端口,以便进一步远程访问 shell。这样的代码称为端口绑定shellcode。 6.如果shellcode连接到攻击者计算机的端口(为了绕过防火墙或通过NAT泄漏),那么这样的代码称为反向shell(reverse shell shellcode)。
将 shellcode 运行到内存中的方法有两种方法可以将shellcode运行到内存中执行: 1.位置无关代码 (PIC) 方法是使用二进制代码(即,将在内存中执行的代码)硬绑定到特定地址或数据的代码。Shellcode本质上是一个 PIC。为什么硬绑定如此重要?shell 无法确切知道 RAM 的位置,因为在执行受感染程序或恶意软件的不同版本期间,它们可以将shellcode加载到不同的内存单元中。
2.识别执行位置方法意味着当访问位置独立的内存结构中的数据时,shellcode必须取消引用基指针。从基指针中添加(ADD)或减去(Reduce)值可以让你安全地访问作为shellcode一部分的数据。
|