千家信息网

【安全健行】(5):shellcode编码

发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,2015/5/19 18:08:45上一节我们介绍了基本shellcode的编写,采用的是exit()、setreuid()和execve()三个系统调用,实际中当然是根据自己的需要来选择合适的系统调
千家信息网最后更新 2025年02月24日【安全健行】(5):shellcode编码

2015/5/19 18:08:45

上一节我们介绍了基本shellcode的编写,采用的是exit()、setreuid()和execve()三个系统调用,实际中当然是根据自己的需要来选择合适的系统调用了,系统调用号需要查看syscalltable,参数的压入也是采取类似的方式,处理好堆栈,编写汇编代码并不十分困难。

这一节我们要来介绍下shellcode的编码,那么为什么要对shellcode进行编码呢?大致原因有以下几个:

  • 避免出现Bad字符,如\x00、\xa9等;

  • 避开IDS或其他网络检测器的检测;

  • 遵循字符串过滤器;

接下来,我们来简单介绍一种shellcode编码的方式。

一、简单的XOR编码

计算机中一种常见的位运算是XOR运算,即"按位异或"。当初自己记忆这个运算时还费了一些功夫才和"按位与|或"运算区分开。异或运算的本质是判断对应二进制位是否相同,若不同-->异-->True;若相同-->同-->False。因此可以说XOR运算是判断对应二进制位不同的运算

XOR运算有着很好的运算特性,即一个数与一个数XOR两次会得到自身:

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 1 = 0
1 XOR 0 = 1
101 XOR 100 = 001
001 XOR 100 = 101

我们利用这个特点可以构造shellcode编码和基本的加密,当然,密钥(上例中的0x100)自然要硬编码进shellcode了。

二、JMP/CALL XOR×××

既然对shellcode编码,那么也就意味着要解码。我们的模型大概是下面的样子:

[decoder][encoded shellcodes]

一般来说,如果×××需要知道自己的位置,这样就可以计算出编码的shellcode的位置开始解码。确定×××位置通常被称作GETPC,方法有许多种,今天我们来介绍其中的一种:JMP/CALL

JMP/CALL的思想是:

  1. JMP指令跳转到CALL指令;

  2. 该CALL指令位于编码的shellcode之前;

  3. CALL指令会创建一个新栈,因此将当前的EIP指针压栈(即编码shellcode的起始地址);

  4. CALL调用的过程将压栈的地址弹出保存到寄存器中;

  5. 利用保存的寄存器进行shellcode解码;

  6. JMP到shellcode处执行;

看起来复杂,我们看看下面的汇编代码就明白了,注意每条汇编语句后的执行顺序标号,可以帮助大家理解整个流程:

global _start

_start:
jmp short call_point ;1. JMP to CALL

begin:
pop esi ;3.将栈中的shellcode地址弹出保存到寄存器esi中便于后续解码
xor ecx, ecx ;4.清空ecx
mov cl, 0x0 ;5.shellcode长度设为0

short_xor:
xor byte[esi], 0x0 ;6.0x0是这里的编码key
inc esi ;7.ESI指针递增,遍历所有的shellcode字节
loop short_xor ;8.循环直到shellcode解码完毕

jmp short shellcodes ;9.跳过CALL直接到达shellcode段

call_point:
call begin ;2.CALL begin过程,同时将当前的EIP即shellcode的起始地址压入栈中

shellcodes: ;10.执行解码后的shellcode

这里放置解码后的shellcode

整体的流程就是这样,只要仔细留心逻辑顺序和shellcode地址的压栈弹栈,JMP/CALL并不难理解。

Refer: Gray Hat Hacking: The Ethical Hacker's Handbook, Third Edition


编码 运算 地址 指令 位置 寄存器 系统 不同 相同 个数 二进制 代码 字符 指针 方式 流程 过程 面的 顺序 检测 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 东莞南城软件开发公司 唐山2u服务器多少钱 法治网络安全宣传图片 南开大学网络安全学院是学什么 企业行政网络安全态势感知 db2数据库查询速度慢 数据库连接数怎么定 3g的网络安全是指什么 数据库查询使用如 惠州一带一物联冷库软件开发 dubbo 服务器 日本2015年网络安全战略 数据库中数据表的个数据库 网络安全女生学起来难吗 当代大学生如何维护网络安全 达梦数据库清空实例数据 红欣网络技术上海有限公司 青少年日网络安全意识 我的世界梦世界服务器大全手机版 网络安全包括哪个部门负责 海淀区国家级网络安全产业园 四年级网络安全手抄报写什么 it网络安全求职简历模板 爱浦路网络技术有限公司简介 典型的图数据库管理系统软件 艺术之家数据库亚力作品欣赏 中国联通软件开发工程师面试经验 龙慧网络技术有限公司 网络安全教育平台登录网 浙江大数据网络技术开发哪家好
0