pwn笔记

文章详细介绍了从C源代码到可执行文件的编译链接过程,重点讨论了Linux下的ELF文件格式和进程的虚拟地址空间。接着,它探讨了栈溢出的基础,包括函数调用栈的工作原理和如何利用这种漏洞进行攻击。此外,还简要概述了x86和amd64汇编语言。
摘要由CSDN通过智能技术生成

2023.2.19.8.25开始
pwn研究的漏洞是已经编译成机械码的二进制
exploit 用于攻击的脚本与方案
payload 攻击载荷,是的目标进程被劫持控制流的数据
shellcode 调用攻击目标的shell的代码
part1 二进制基础

程序的编译与链接

从c源代码到可执行文件的生成过程(从pwn方向所关注的):
编编
由c语言代码生成汇编代码
汇编
有汇编代码生成机器码
链接
将多个机器码的目标文件链接成一个可执行文件

Linux 下的可执行文件格式ELF

可执行文件:
广义:文件中的数据是可执行代码的文件(.out 、.exe、.sh、.py)
狭义:文件中的数据是机器码的文件(.out、.exe、.dll、.so)
可执行文件的分类
Windows:PE(Portable Executable)
可执行程序
.exe
动态链接库
.dll
静态链接库
.lib
Linux:ELF(Executable and Linkable Format)
可执行程序
.out
动态链接库
.so
静态链接库
.a
磁盘中的ELF(可执行文件)与内存中的ELF(进程内存映像)
在这里插入图片描述
程序运行时从磁盘运输到内存
查看一个elf文件在磁盘里的结构的命令:objdump -s elf
查看一个进程在内存中的结构的命令:cat /proc/pid/maps
gdb有时会把低地址写在上面高地址写在下面

进程虚拟地址空间

ELF文件到虚拟地址空间的映射
在这里插入图片描述
程序运行时:磁盘中的节变成内存中的段
程序访问虚拟地址,操作系统 访问物理地址,以防止计算机被攻击或崩溃
地址以字节编码1Byte=8bits
常以16进制表示0x3c=00111100
虚拟内存用户空间每个进程一份
虚拟内存内核空间所有进程共享一份
虚拟内存mmap段中的丛台链接库仅在物理内存中装在一份
在这里插入图片描述
段(segment)与节(section)
代码段(Text segment)包含了代码与只读数据
.text 节(实现用户所定义的功能)
.rodate 节
.hash 节
.dynsym节
.dynstr 节
.pit 节(解析动态链接函数的实际地址)
.rel.got 节
数据段(Data segment)包含了可读可写数据
.data 节
.dynamic 节
.got节
.got.plt节(用来保存pit节里的代码解析到的实际地址)
.bss节
一个段包含多个节
段试图用于进程的内存区域的rwx权限划分
节试图用于ELF文件编译链接时与在磁盘上存储的文件结构的组织
在这里插入图片描述
大端序和小端序
在这里插入图片描述
大端序:低地址存放数据高位、高地址存放数据低位
小端序:低地址存放低地址、高地址存放数据高位(我们所关注的方式,可以字符串溢出篡改地址)

程序的装载与进程的执行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
fock()作用是拷贝一份用户的文件
execve(“./binary”,“argv[],"*envp[]))作用是向操作系统“办手续”获得拷贝的文件的操作权限
ld.so作用是向第三方库借用代码函数等相当于中介

x86&amd64汇编简述

在这里插入图片描述
MOV
相当于C语言里的”=“赋值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、栈溢出基础

C语言函数调用栈

在这里插入图片描述
ebp到esp是一个栈帧;
return address:返回地址
stack frame pointer:上一个栈帧的栈底的值(上一个栈帧的ebp寄存器的值)即父函数栈帧的栈底指针的值,方便恢复父函数栈底指针
local variables:局部变量存放位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

esp:栈顶,ebp:栈底,eip:当前函数执行的指令。

在调用下一个函数时,在父函数调用子函数时,会先把子函数所需要的参数倒序压入栈顶,子函数第一个参数时压在栈顶的,而最后一个参数是压在最里面的。
字长:32位机就是32bit
64位机就是64bit

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值