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


上一节我们介绍了基本shellcode的编写,采用的是exit()、setreuid()和execve()三个系统调用,实际中当然是根据自己的需要来选择合适的系统调用了,系统调用号需要查看syscalltable,参数的压入也是采取类似的方式,处理好堆栈,编写汇编代码并不十分困难。这一节我们要来介绍下shellcode的编码,那么为什么要对shellcode进行编码呢?大致原因有以下几个:避免出现Bad字符,如x00、xa9等;避开IDS或其他网络检测器的检测;遵循字符串过滤器;接下来,我们来简单介绍一种shellcode编码的方式。计算机中一种常见的位运算是XOR运算,即“按位异或”。当初自己记忆这个运算时还费了一些功夫才和“按位与|或”运算区分开。异或运算的本质是判断对应二进制位是否相同,若不同–>异–>True;若相同–>同–>False。因此可以说XOR运算是判断对应二进免费云主机域名制位不同的运算XOR运算有着很好的运算特性,即一个数与一个数XOR两次会得到自身:我们利用这个特点可以构造shellcode编码和基本的加密,当然,密钥(上例中的0x100)自然要硬编码进shellcode了。既然对shellcode编码,那么也就意味着要解码。我们的模型大概是下面的样子:一般来说,如果需要知道自己的位置,这样就可以计算出编码的shellcode的位置开始解码。确定位置通常被称作GETPC,方法有许多种,今天我们来介绍其中的一种:JMP/CALLJMP/CALL的思想是:JMP指令跳转到CALL指令;该CALL指令位于编码的shellcode之前;CALL指令会创建一个新栈,因此将当前的EIP指针压栈(即编码shellcode的起始地址);CALL调用的过程将压栈的地址弹出保存到寄存器中;利用保存的寄存器进行shellcode解码;JMP到shellcode处执行;看起来复杂,我们看看下面的汇编代码就明白了,注意每条汇编语句后的执行顺序标号,可以帮助大家理解整个流程:整体的流程就是这样,只要仔细留心逻辑顺序和shellcode地址的压栈弹栈,JMP/CALL并不难理解。Refer: Gray Hat Hacking: The Ethical Hacker’s Handbook, Third Edition

相关推荐: 思维导图分析http之http协议版本

httpd协议之http协议版本1.结构总览在http协议这一章,我将先后介绍上图六个部分,本文先介绍http的协议版本。2.http协议版本 http协议的历史并不长,从1991的0.9版本到现在(2017)仅仅才20多年,算算下来,http还是正处青年,正…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/28 12:19
下一篇 01/28 12:19