当前位置:首页 > 经验 >

shellcode怎么写(shellcode开发)

来源:原点资讯(www.yd166.com)时间:2022-11-07 08:12:49作者:YD166手机阅读>>

这是2008年写的文章, 没有正式发表过,里面使用的环境不记得是i386Linux还是AMD64的Linux了。

其实,叫 bincode 合适一点,一些搞入侵的人会称之为shellcode,本文的目的是探索与学习,不是为了搞入侵,实用性也不强。

先实现一个简单的装载的代码,通常叫做 launcher。

#include<stdio.h> #include<sys/stat.h> #include<sys/types.h> #include<sys/mman.h> #include<sys/fcntl.h> #include<unistd.h> static int file_size ( int fd ) { struct stat buf; if ( fd<0 ) return -1; fstat (fd,&buf); if ( buf.st_size<0 ) return -2; return buf.st_size; } static int read_file( const char *filename, void *buf ) { int rfd; size_t buflen = 0; rfd = open(filename,O_RDONLY,S_IRUSR|S_IWUSR); if ( -1==rfd ) return -3; buflen = file_size ( rfd ); if ( buflen<=0 ) return -4; read(rfd,buf,buflen); close(rfd); return 0; } int (*myfunc)(char *str); /*定义一个函数指针*/ int main(int argc,char *argv[] ) { myfunc = malloc( 1024 * sizeof(char*) ); /*申请一小段内存,把指针指向这段内存,作为缓冲区用*/ read_file( "./myfunc.bin", myfunc ); /*把myfunc.bin读进来*/ int i = 0; i = myfunc("AABBCC"); /*执行*/ printf("i=%d\n",i); }

gcc -g -o binloader binloader.c;

然后,实现 myfunc.bin

#include <stdio.h> #include <sys/types.h> #include <sys/uio.h> #include <unistd.h> int bin_printf ( char *instr ) { char *word = "hello "; write( 1,word, strlen(word) ); write( 1,instr, strlen(instr) ); write( 1,"\n", 1 ); return 0x0; }

代码很简单了,关键之处,在于怎么编译:

gcc -fpic -c myfunc.c; ld myfunc.o -static -o myfunc -e bin_printf -lc objcopy -R .note -R .comment -S -O binary myfunc myfunc.bin

然后执行

./binloader %./binloader hello AABBCC i=0

可见,这是很完整的一个函数调用的过程,解释下编译的几个步骤:

gcc -fpic -c myfunc.c;

-fpic 是让 gcc 生产的汇编代码是位置无关的,否则,

调用

write( 1,word, strlen(word) );

的时候,对 word 的寻址就通常无法正确。

ld myfunc.o -static -o myfunc -e bin_printf -lc

-e bin_printf

链接时,入口指定是 bin_printf

因为用到一个系统调用wrie,所以 -lc

最后就是用

objcopy -R .note -R .comment -S -O binary myfunc myfunc.bin

产生一个bin格式的文件

栏目热文

通用shellcode编写实例(shellcode执行原理)

通用shellcode编写实例(shellcode执行原理)

1)编写 hello world 脚本#!/bin/bash # 编写hello world脚本 echo "...

2022-11-07 08:06:54查看全文 >>

shellcode应该放在哪(shellcode使用教程)

shellcode应该放在哪(shellcode使用教程)

在开始今天课程之前,先回忆下上一讲在结束时,我提出的windows平台下的几个关键问题:1:缓冲区距离返回地址间的距离确...

2022-11-07 08:38:25查看全文 >>

shellcode类书(shell编程零基础的书籍)

shellcode类书(shell编程零基础的书籍)

书籍简介黑客与渗透测试编程之道本书是畅销书《Python 灰帽子—黑客与逆向工程师的 Python 编程之道》的姊妹篇,...

2022-11-07 08:07:13查看全文 >>

shellcode执行方式(shell脚本的执行方法)

shellcode执行方式(shell脚本的执行方法)

本篇主要是以x64系统为例对系统调用中一些功能性函数的解读和实际运用。目前网络上流传的通用shellcode,均使用系统...

2022-11-07 08:13:07查看全文 >>

shellcode到底是啥(shellcode使用教程)

shellcode到底是啥(shellcode使用教程)

零基础学黑客领资料搜公众号:白帽子左一因前段时间退出了内网的学习,现在开始复习web方面的漏洞了,于是乎,开始了挖洞之旅...

2022-11-07 08:17:00查看全文 >>

shell脚本原理(shell脚本 基本知识)

shell脚本原理(shell脚本 基本知识)

Spring框架最新的PoC这两天出来的一个RCE漏洞,但是有以下的条件限制才行:必须是jdk9及以上必须是部署在tom...

2022-11-07 08:01:55查看全文 >>

shellcode免杀原理(shellcode免杀技巧)

shellcode免杀原理(shellcode免杀技巧)

原创AgeloVito合天智汇0x01 前言​ 2019年,告别了coder的世界,告别了从前的生活。我决定暂时抛开金钱...

2022-11-07 08:06:49查看全文 >>

shellcode一般满足什么要求(shellcode编程揭秘)

shellcode一般满足什么要求(shellcode编程揭秘)

作者:WeaponX预估稿费:400RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿背景最近在...

2022-11-07 08:08:51查看全文 >>

shellcode 入门(shell编程入门教程)

shellcode 入门(shell编程入门教程)

payload和shellcode的区别Payload是是包含在你用于一次漏洞利用(exploit)中的ShellCod...

2022-11-07 08:13:49查看全文 >>

shellcode加载器(shellcode编程揭秘)

shellcode加载器(shellcode编程揭秘)

shellcode是嵌入在恶意程序中的一段代码,在感染受害者的目标系统后,可以获取命令Shell代码,例如类UNIX操作...

2022-11-07 08:14:23查看全文 >>

文档排行