初识shellcode
以前只是知道shellcode就是一段恶意代码,直到今天学习了shellcode的知识,才发现这东西真是博大精深。同时也学习到了一些新的指令,在这里记录一下。
通常pwn题目就是为了拿到shell,目前我理解的system其实就是系统调用的一个封装。对于获取shell的获取,需要执行这么一个命令。
execve("/bin/sh",null,null)
这行代码用系统调用来执行,大概意思就是(这里用我理解的伪代码)int 0x80 (eax,ebx,ecx,edx......),意思就是,先把数据保存在寄存器中,然后调用int 0x80,就是调用了系统函数,网上有一份系统调用的表格,我挑几个常用的函数粘贴过来。
%eax |
Name |
Source |
%ebx |
%ecx |
%edx |
%esx |
%edi |
1 |
sys_exit |
kernel/exit.c |
int |
- |
- |
- |
- |
3 |
sys_read |
unsigned int |
char * |
size_t |
- |
- |
|
4 |
sys_write |
fs/read_write.c |
unsigned int |
const char * |
size_t |
- |
- |
5 |
sys_open | fs/open.c | const char * | int | int | - | - |
11 | sys_execve | arch/i386/kernel/process.c | struct pt_regs | - | - | - | - |
这里我们试着写一个常用的shellcode。
假设0x400500这个地址存放着“/bin/sh”的字符串。
1 mov eax,0xb
2 lea ebx,[0x400500]
3 mov ecx,0x0
4 mov edx,0x0
5 int 0x80
这就是最简单的shellcode 了,有时候为了免杀,躲过一些保护。经常将shellcode写成其他形式的。例如这种:
1 jmp sh
2 run:
3 pop ebx
4 mov BYTE [ebp+7],0
5 xor eax,eax
6 mov al,11
7 xor ecx,ecx
8 xor edx,edx
9 int 0x80
10 sh:
11 call run
12 db"/bin/sh"
我们试着来编写一个shellcode的文件,试试,顺便还能学习很多东西。
编译汇编需要装一个nasm,用这个命令就可以(ubuntu):sudo apt-get install nasm
编译的命令是:nasm a.asm -o a.o -felf32
生成a.o,这个文件其实是包含一些文件头呀什么乱七八杂的东西,并不是我们单纯输入的代码,这个时候用objcopy命令来去除那些没用的代码。命令是:objcopy -O binary a.o code
我们来对比一个两个文件的大小,和看看里面的内容。
明显的看出第一个比第二个代码量少了很多很多。
顺便再学个命令:xxd可以用来显示一些二进制文件。加上参数 -i后显示是这样的。
上面的这个代码有什么用呢。。。这里是可以套用一个模板,来生成可执行文件的。
模板如下:
1 unsigned char code[] = {
2 0xeb, 0x0f, 0x5b, 0xc6, 0x45, 0x07, 0x00, 0x31, 0xc0, 0xb0, 0x0b, 0x31,
3 0xc9, 0x31, 0xd2, 0xcd, 0x80, 0xe8, 0xec, 0xff, 0xff, 0xff, 0x2f, 0x62,
4 0x69, 0x6e, 0x2f, 0x73, 0x68
5 };
6
7 typedef int (*CODE)();
8
9 int main(){
10 ((CODE)code)();
11 }
code数组里面存的就是我们生成的shellcode。
再用gcc的命令生成可执行文件试试,命令为:gcc code.c -o code -m32 -zexecstack
看一下效果。
当然还有一种方法,是将去除头文件信息的那个文件生成一个.h的头文件。
命令如下:xdd -i scode > scode.h
接下来就是写c代码了。代码很简单,和刚刚几乎一样。
1 #include "code.h"
2
3 typedef int (*CODE)();
4
5 int main(){
6
7 ((CODE)code)();
8
9 }
再次编译一下,发现还是可以拿到shell,好了,今天就到这里,感觉学到了很多。
初识shellcode的更多相关文章
- 跟羽夏学 Ghidra ——初识
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
随机推荐
- SQLServer创建约束
--创建数据库create database studentson primary( name=stu_data, filename='f:\SQL\stu_data.mdf', s ...
- [bzoj1188]分裂游戏
容易发现所有豆子相互独立,只需要考虑每一个豆子的sg函数并异或起来即可,sg函数从后往前暴力即可 1 #include<bits/stdc++.h> 2 using namespace s ...
- WebGoat8.2.2-A8不安全的反序列化
1.概念 使用反序列化在各编程语言中略有不同,如Java.PHP.Python.Ruby.C/C++,但在关键概念上是一样的 序列化:将(内存中的)对象转化成数据格式,以便存储或传输 ...
- CSP2020 自爆记
Day -1 - 2020.11.5 发现自己 dp 学得很烂--刷了几道 dp 找找感觉. 晚上死活睡不着,觉得要爆炸了. Day 0 - 2020.11.6 白天在学校觉得人飘了. 傍晚回来拿了准 ...
- 【Matrix-tree Theorem学习笔记】
定义度数矩阵\(D(G)\): 定义邻接矩阵\(C(G)\): 定义\(Laplace\)矩阵\(A\) \( A(G) = D(G) - C(G) \) 记图\(G\)的所有生成树权值和为\(t(G ...
- 实现类似Tab选项卡功能关键代码
//放置显示不同Activity的控件 private LinearLayout mainContentLayout; private LocalActivityManager localActivi ...
- 【百奥云GS专栏】1-全基因组选择介绍
目录 什么是基因组选择? 基因组选择技术的发展 基因组选择的原理和流程 基因组选择的模型 基因组选择的展望 参考资料 什么是基因组选择? 基因组选择(Genomic Selection,简称GS)这一 ...
- 毕业设计之zabbix+微信企业号报警
需要自己申请一个微信企业号 创建应用 AgentId 1000003 Secret SOI8b20G96yUVM29K02-bP5N5o6dovwSF2RrDaXHJNg 企业ID(自己再企业信息里面 ...
- 28-Merge Two Sorted Lists
easy 21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new l ...
- A Child's History of England.2
They made boats of basket-work, covered with the skins of animals, but seldom, if ever, ventured far ...