Pwn入门系列10——linux动态内存管理机制 什么是堆(1)堆时程序用于分配动态内存的一段内存区域(2)它独立的存在与内存中,介于程序内存基地址和libc地址之间。(3)从低地址向高地址生长(4)和用户打交道 例子1(1)一个留言板程序:用户可以输入自己的留言,留言长度由用户决定(2)我们之前学过,栈上存储的是一个函数的局部变量,bss存储全局变量(3)那么我们如何存储用户输入的留言呢?(4)用户的留言有可能是几百个到几千个字符。 解决办法: 2021-07-12
Pwn入门系列9——函数调用流程与调用约定 函数调用流程(1)当运行到call func_b时main函数的栈帧(2)RBP指向栈顶,rsp指向栈顶(3)这段栈帧存放了一些main的局部变量(4)main函数要调用func_b,main只需要call func_b(5)也就是push rip;mov rip func_b;(6)那么此时跳转到func_b继续执行,func_b直接执行主逻辑吗?(7)显然不是的,被调用函数还要维护栈帧。(8) 2021-07-08
Pwn入门系列8——基本栈溢出 基础栈溢出①一般来说,在CTF中的PWN,多数情况下我们需要让程序执行这一段代码:②system(“/bin/sh”)③也就是说在远程机器上开一个命令行终端。④这样我们就可以通过命令行来控制目标机器。 ret2text①理想情况下,程序中有一段代码能直接满足我们的需求②我们只需要将执行流劫持到这一段代码即可。 ret2shellcode①如果程序中没有这样的代码,怎么办?②我们可以自己写shell 2021-07-05
Pwn入门系列7——栈溢出原理 栈溢出①函数中的存储在栈中的局部变量数组边界检查不严格发生越界写,造成用户输入覆盖到缓冲区外的数据内容。②由于栈中同时存在着与函数调用参数相关信息,栈溢出可以导致控制流劫持。 栈溢出过程①main函数调用b,b函数调用a。②缓冲区溢出发生在a函数中。③buf的长度是80,但是却读入了200长度。④分析程序运行至a时的栈帧。⑤栈中存放buf和返回地址等信息。⑥buf的长度为80,紧邻b函数的rbp指 2021-07-04
Pwn入门系列6——linux保护机制 保护机制CanaryNXASLRPIERELRO CANARY①canary中文翻译是金丝雀,来源是之前科技不发达时,旷工会在下井作业时带一个金丝雀,用来片段地下环境有没有煤气之类的毒气泄露,金丝雀没事,大家继续干活;如果金丝雀死了,大家赶紧跑。②在linux中,canary的作用就如同他引用的一样,用来判断程序的执行环境,主要是针对检测栈溢出。③canary是一个开头字节为\x00的一段长度为8 2021-07-03
Pwn入门系列5——linux延迟绑定机制 动态链接库①我们程序开发过程中都会用到系统函数,比如read,write,open等。②这些系统函数不需要我们实现,因为系统已经帮你完成这些工作,只需要调用即可,存放这些函数的库文件就是动态链接库。③通常情况下,我们对于pwn题接触到的动态链接库就是libc.so文件。 静态编译与动态编译①静态编译的思路就是将所有可能运行到的库函数一同编译到可执行文件中。②动态编译的思路就是遇到需要调用的库函数时 2021-07-02
pwn入门系列4——ELF文件格式 ELF文件①linux环境中,二进制可执行文件的类型是(Executable and Linkable Format)文件。②elf文件的格式比较简单,我们需要了解的就是elf文件中的各个节、段等概念。③elf的基本信息存在于elf的头部信息中,这些信息包括指令的运行架构、程序入口等等内容,我们可以通过readelf -h 来查看头部信息。 ELF文件elf文件中包含许多个节(section),各 2021-07-01
Pwn入门系列3——函数调用流程与调用约定 函数调用流程①从一个实际例子出发②main调用func_b,func_b调用func_a③从main函数开始,逐步分析栈帧变化 函数调用流程①当运行到call func_b时main函数的栈帧②RBP指向栈底,RSP指向栈顶③这段栈帧存放了一些main函数的局部变量④main函数要调用func_b,main只需要call func_b⑤也就是push rip ;mov rip func_b; 函数 2021-06-30
Pwn入门系列2——计算机内部数据存储格式 linux基础①保护层级:分为四个ring0-ring3②一般来说就两个,0和3③0为内核④3为用户 linux基础①权限:用户分为多个组②文件和目录权限一般都是三个,即可读可写可执行③读:R,写:W,执行:X④赋予一个可执行文件执行权限就是chmod+x filename linux基础①虚拟内存和物理内存②物理内存很直白,就是内存中实际的地址③虚拟内存就是物理内存经过MMU转换后的地址④系统会 2021-06-29
Pwn入门系列1——汇编语言基础 一些量词bit 比特 1位byte 字节 8位word 字 16位dword 双字 32位qword 四字 64位 计算机寻址方式① 当前主流操作系统中,都是以字节为寻址单位进行寻址②意味着计算机访问的最小单位是一个字节 前言①计算机并不能直接运行高级语言②我们编写的高级语言程序需要进行编译后 2021-06-28