机器码作为shellcode运行时段错误
来源:互联网 发布:财务金融知乎 编辑:程序博客网 时间:2024/04/30 17:56
将一些C语言代码汇编后得到的机器码可以作为shellcode注入到一个新的进程中去,如果执行这个新的代码那么就可以运行注入得到的机器指令。
比如下一段代码:
#include <stdlib.h>char shellcode[] = "\xeb\x19\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x04"\ "\xb2\x0e\x59\xb3\x01\xcd\x80\x31\xc0\xb0\x01"\ "\x31\xdb\xcd\x80\xe8\xe2\xff\xff\xff"\ "\x48\x65\x6c\x6c\x6f\x2c\x20\x57\x6f\x72\x6c"\ "\x64\x21\x0a";int main(int argc, char **argv) { int (*ret)(); ret = (int(*)())shellcode; (int)(*ret)(); exit(0);}
如果直接编译运行的话,结果可能就是段错误,比如:
$ gcc 1.c -o sc$ ./sc Segmentation fault (core dumped)
这是因为shellcode是以全局字符数组变量的形式存储在进程堆栈中的数据段中,数据段是没有可执行权限的,所以一旦PC寄存器进入到这里面,那么程序就会报错。
解决方法有两个,一个是在gcc编译的时候加入-z execstack参数,比如
$ gcc 1.c -o sc -z execstack$ ./scHello, World!也可以安装execstack这个软件,然后在用命令将要运行的程序用execstack -s ./prog。那么该程序就解除可执行栈的保护了。
$ sudo apt-get install execstack$ execstack -s ./sc$ ./sc
$ Hello, World!这样就可以运行了。
0 0
- 机器码作为shellcode运行时段错误
- skyeye运行时段错误问题
- OpenCvCL中的运行时段错误1
- OpenCvCL中的运行时段错误2
- 把"Hello, World\n"转为机器码shellcode 来显示
- shellcode的隐藏运行
- shellcode隐藏运行
- linux中C程序运行时怪异的段错误--linux中因栈空间不足而出现的运行时段错误
- 机器码
- 机器码
- 机器码
- 机器码
- 演示几种用C语言来执行shellcode(其实也就是机器码)的方式
- java常见的运行时段出现的异常
- sqlserver 已超过了锁请求超时时段 1222错误
- shellcode
- Shellcode
- Shellcode
- nginx源码分析--module开发(3)
- 用js模拟struts2的多action调用
- 截获或替换linux系统调用
- centos配置静态或动态的IP地址呢?
- 结构的简单实用
- 机器码作为shellcode运行时段错误
- python处理多行文件内容
- Context-----Activity,Application之间的交流使者
- 找错误
- 开源的IM框架--担心
- html学习笔记四
- nginx源码分析--module开发(4)
- 深入浅出web服务
- 高校云平台从需求分析说起