ELF文件概述
0. PWN概述
什么是PWN?
- 破解、利用成功(程序的二进制漏洞)
- 攻破(设备、服务器)
- 控制(设备、服务器)
几个简单名词:
- exploit
- 用于攻击的脚本与方案
- payload
- 攻击载荷,是对目标程序被劫持控制流的数据
- shellcode
- 调用攻击目标的shell代码
CTF中PWN题常见模式:
- 根据提供的IP及其端口,连接至目标漏洞服务器
- 然后根据漏洞,编写exp脚本发送payload给漏洞服务器进行攻击操作
- 攻击操作一般目的为调取一个shell
- 通过shell控制远程服务器
- 通常为读取远程服务器上的flag文件
[!info] 什么是Shell?
Shell 俗称壳(用来区别于核),是指为使用者提供操作界面的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。核指的是计算机操作系统内核(Kernel),内核是管理 CPU、内存等硬件的核心软件。
Shell 是一个命令语言的同时,它也是一种程序设计语言。
作为命令语言时,它可以使用一个操作界面,交互式地解释和执行用户输入的命令。
交互式是指用户输入一个指令时,Shell 能马上提供反馈结果,Shell 可以与用户进行实时交互。
作为程序设计语言时,它支持定义各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支,并支持函数编程,给用户提供脚本编写的功能。
Shell 是操作系统最外面的一层,是文字操作系统与外部最主要的接口,管理用户与操作系统之间的交互。
Shell分为两大类:图形Shell(GUI Shell)<如windows文件管理器>和命令行Shell(CLI Shell)<如cmd、PowerShell>
[!info] 什么是Bash?
Bash是一个为GNU计划编写的Unix Shell的一种,简单来说,它就是一个命令处理器,用来执行用户输入的各种指令现代大多数的Linux系统的Shell命令控制终端都默认为Bash,为用户提供包括交互式命令执,Shell脚本编写等功能
1. 二进制基础
1.1 程序的编译与链接
- 编译
- 由C语言代码生成汇编代码
- 汇编
- 由汇编代码生成机器码
- 链接
- 将多个机器码的目标文件链接成一个可执行文件
1.2 什么是可执行文件
- 广义:文件中的数据是可执行代码的文件
- .out、.exe、.sh、.py
- 狭义:文件中的数据是机器码的文件
- .out、.exe、.dll、.so
可执行文件的分类:
- windows:PE(Portable Executable)
- 可执行程序
- .exe
- 动态链接库
- .dll
- 静态链接库
- .lib
- 可执行程序
- Linux:ELF(Executable and Linkable Format)
- 可执行程序
- .out
- 动态链接库
- .so
- 静态链接库
- .a
- 可执行程序
2. ELF文件格式
- header 1
- ELF header:记录整个ELF文件的结构分布
- Program Header table:记录一些段信息
[!info] 段视图与节视图
- 段视图:程序加载到内存一个成为进程中来进行读写执行权限划分的视图
- 节视图:ELF文件存放在磁盘中进行不同功能区域划分的识图
- sections(节)
- Code:以机器码的形式存储的多块ELF文件分区,对应不同的功能,划分为不同的代码节
- Data:记录数据节,根据不同功能划分,不可被执行
- Sections’ names:段表,记录各个节的节名
[!note]
用户定义机器码对应的代码节是.text
用来进行动态链接、实际地址解析的代码节是.plt
- header 2
- Section Header table:记录节的信息
不同的节功能不同但是作用相同,因此同属于一个段,段是加载成为进程后起作用的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Mandarava23!
评论


