【安全健行】(5):shellcode编码-创新互联

2015/5/19 18:08:45

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

合肥ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

这一节我们要来介绍下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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


名称栏目:【安全健行】(5):shellcode编码-创新互联
分享链接:http://scyanting.com/article/ddosec.html