PWN学习笔记
一,栈介绍
栈:栈是一种计算机系统中的数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来),是一种特殊的线性表。栈的操作常用的有进栈(PUSH),出栈(POP),还有常用的标识栈顶和栈底。
进栈(PUSH):将一个数据放入栈里叫进栈(PUSH)
出栈(POP):将一个数据从栈里取出叫出栈(POP)
栈顶:常用寄存器ESP,ESP是栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
栈底:常用寄存器EBP,EBP是基址指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。
二,栈溢出
1. 汇编层面的函数调用过程:
每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低地址)。
-
栈溢出:用户书写的字符长度超出了这个变量本身的字符长度导致缓冲区溢出而使得有用的存储单元被改写,向这些单元写入任意的数据,一般只会导致程序崩溃之类的事故,但如果向这些单元写入的是精心准备好的数据,就可以使得我们数据代替原代码执行程序,致使我们希望的代码被执行。
三,常见函数
四,文件信息
-
查看文件信息:file
-
查看文件程序:checksec
Arch 文件属性
RELEO 绑定动态符号减少对GOT 攻击
Stack canary stack保护
NX 不可执行
PIE 地址随机化
-
-
产看文件头信息:readelf-h
-
运行: run
-
选择文件:gdb
-
查看栈数据:stack
-
查看字符串所在位置:search‘字符串’
五,ROP
1.定义:(百度)ROP全称为Return-oriented Programming(面向返回的编程)是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。ROP攻击同缓冲区溢出攻击,格式化字符串漏洞攻击不同,是一种全新的攻击方式,它利用代码复用技术。
2.ROP攻击防范:ROP攻击的程序主要使用栈溢出的漏洞进而达到攻击劫持的目的。
六,堆
1. 定义:
数据运行时的需要进行分配和释放的内存。(大小可变)
2.chunk(内存块的结构)
-
chunk start:chunk的起始地址
-
size :chunk的大小
-
memory:malloc等函数返回给用户的chunk数据指针
3.glbic(堆管理)
- arena:指的是堆内存区域本生,并非结构。
- malloc_state:管理堆的状态,信息,bins链表
4,bins
- 用来管理空闲的内存块,通常使用链表结构来进行0管理
七,Glibc Heap
- 内存分配分为:动态分配和静态分配。
- ptmalloc数据结构
- malloc/free概述
八, 格式化字符串
-
概念:是在编程过程中,允许编码人员通过特殊的占位符,将相关对应的信息整合或提取的规则字符串。
-
格式化字符串分为格式化输入和格式化输出。
-
常见的格式化字符串常数:printf fprintf …
-
格式化字符串漏洞 概述 用户可通过控制格式化字符串实现读取内存,修改内存值(利用%n实现对指定内存地址的写入),应发程序崩溃。
九,PLT和GOT表
-
linux编译过程:预处理,编译,汇编,链接
-
动态编译和静态编译
动态编译特点:避免了空间的浪费,但动态编译的效率低于静态编译。
-
GOT表:表中存储的是真实的地址,七字段需要动态修改,是可写的
-
库函数:stdio,ctype, string等
十,常见指令
- 查看文件:file 文件名
- 检查文件:checksec --file=文件名
- 运行文件:./文件名
十一, exp脚本
- from pwn import* 导入函数库(运用pwn 工具)
- context() 方便找错
- def main () 主函数
- hcj=remote(” “) 远程
- payload= 输出数据
- hcj.recvuntil(” “) 接受到哪
- hcj. sendlineafter(" ",) 执行到哪一句话发送一条数据
- hcj.sendline(" ") 发送一条数据
- hcj.interactive() 接受
补充:gets 函数必是漏洞
参考列表:
https://blog.csdn.net/weixin_43847969/article/details/104390904?spm=1001.2014.3001.5506
https://blog.csdn.net/qq_41988448/article/details/103124339?spm=1001.2014.3001.5506
其余部分资料参考自互联网