二进制入门-打造Linux shellcode基础篇
0x01 前言
0x02 什么是Shellcode
- 直接编写十六进制操作码。
- 使用c语言编写程序,然后进行编译,最后进行反汇编来获取汇编指令和十六进制操作码。
- 编写汇编程序,将该程序汇编,然后从二进制中提取十六进制操作码。
0x03 execve系统调用
c语言实现execve系统调用创建shell
1
2
3
4
5
6
7
8
9
|
#include <unistd.h> int main ( ) { char * shell[ 2 ]; shell[ 0 ] = "/bin/sh" ; shell[ 1 ] = NULL; execve ( shell[ 0 ] , shell , NULL ) ; } |
转向汇编语言
push eax
push 0x68732f2f
push 0x6e69622f
1
2
3
4
5
6
7
|
mov ebx , esp push eax push ebx mov ecx , esp xor edx , edx mov al , 0 xb ; 0 xb表示其系统调用号的十六进制,execve的系统调用号为 11 int 0 x 80 |
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
section . text global _start _start : xor eax , eax push eax push 0 x 68732 f 2 f push 0 x 6 e 69622 f mov ebx , esp push eax push ebx mov ecx , esp xor edx , edx mov al , 0 xb int 0 x 80 |
汇编链接测试
root@kali:~/demo# nasm -f elf test.asm
root@kali:~/demo# ld -o test test.o
root@kali:~/demo#./test
#
0x04 提取十六进制操作码并测试Shellcode
测试shellcode
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
#include <stdio.h> char shellcode[] = "\x31\xc0" "\x50" "\x68\x2f\x2f\x73\x68" "\x68\x2f\x62\x69\x6e" "\x89\xe3" "\x50" "\x53" "\x89\xe1" "\x31\xd2" "\xb0\x0b" "\xcd\x80" ; int main ( ) { void (*fp) (void); fp=(void *) shellcode; fp ( ) ; } |
sudo apt-get install execstack
execstack -s 程序名
总结
二进制入门-打造Linux shellcode基础篇的更多相关文章
- 小朋友学Linux<一>基础篇
Linux最基础之<小朋友也能学会Linux>... 1.Linux 知识积累: Linux 英文解释为 Linux is not Unix.学习Linux必须要熟练使用的操作系统是Cen ...
- DDD从入门到精通:基础篇
这篇文章主要还是表述清楚DDD相关的基础概念,因为DDD入门有一定的专业名词,还是得有个基本的了解. 先讲解下领域模型作用: 对软件需求进行设计,维持其内在逻辑的一致性 1)划分边界.也是一种高内聚. ...
- linux操作系统基础篇(七)
Linux服务篇(二) 1.nfs服务的搭建 安装: yum install rpcbind nfs-utils -y 配置: NFS服务的配置文件为 /etc/exports,这个文件是NFS的主要 ...
- linux操作系统基础篇(六)
linux服务篇 1.samba服务的搭建 samba的功能: samba是一个网络服务器,用于Linux和Windows之间共享文件.2. samba服务的启动.停止.重启service smb s ...
- linux操作系统基础篇(一)
1.什么是linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序 ...
- 零基础入门之Linux进程基础
计算机实际上可以做的事情实质上非常简单,比如计算两个数的和,再比如在内存中寻找到某个地址等等.这些最基础的计算机动作被称为指令(instruction).所谓的程序(program),就是这样一系列指 ...
- Linux学习——————基础篇
一.linux试用 1.使用man或者info查询 2.超级简单的文本编辑器:nano 3.sync:数据同步写入磁盘,将内存中的数据写入磁盘 3.惯用的关机命令:shutdown /sbin/shu ...
- linux操作系统基础篇(五)
Linux网络以及rpm安装yum源的配置 1.Linux网络 1. 使用ifconfig命令来维护网络1) fconfig命令的功能:显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址.2) ...
- linux操作系统基础篇(四)
一.系统监控 1.TOP 命令 1) top命令的功能:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器. 2) 使用top命令列 ...
随机推荐
- 科学技术库Numpy
一.生成矩形操作 1)numpy获取的数据是以 “,” 为分割的数据结构,来生成矩阵 注意:skip_header=1 去掉行首,即说明行 ,Cao jin,,,python,-- ,张二毛,,, ...
- 41.App 框架的搭建思路以及代码的规范
本链接 引用别人文章https://www.jianshu.com/p/d553096914ff
- 2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)
传送门 区间dpdpdp好题. 首先肯定需要把坐标离散化. 然后在数轴上面区间dpdpdp. 对于当前区间,区间中最大的数一定会被选. 于是我们记f[i,j]f[i,j]f[i,j]表示所有左端点在i ...
- Router components
Input Unit The Input unit contains virtual channel buffers and an input VC arbiter. Route Info: use ...
- IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (二)
第二部分 邮件发送历史 一.第一封邮件 1.1969年10月,世界上的第一封电子邮件 1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短 ...
- SVN previous operation has not finished
svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了. 错误如下: 解决方法:清空svn的队列 1.下载sqlite3.exe 2.找到你项目的.svn文件,查看是否存在wc.d ...
- 安卓中的makefile文件打印调试信息
在安卓源码的makefile中有很多变量的值不方便确定,那么可以通过调试makefile文件来确定这些变量的值. $(warning " TARGET_BOARD_PLATFORM = ...
- 25个Linux相关的网站
下面是25个最具有影响力,也是最重要的Linux网站,这些网站提供了Linux的分发包,软件,文件,新闻,以及其它所有的关于Linux的东西.关于Linux的分发包历史,可以看看本站的这篇文章< ...
- Grand Central Dispatch
什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许 ...
- File类、文件过滤器、递归、文件及文件夹的操作方法
一.File Io概述: 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和 ...