1.简单の概述Pwn是什么
Pwn是一个动作,攻击服务器或进程的一个动作,针对的目标也就是服务器和运行中的软件;
这些服务器和软件中必然需要存在着二进制漏洞等待挖掘;
一但找到漏洞并写出恶意代码,使目标运行,对方就可出现一些特殊的情况,从而拿到控制权限以及夺旗战中的旗帜;
要分析并挖掘二进制漏洞,必然少不了逆向工程和二进制知识的加持;
2.Pwn的前置知识:文件构架&程序执行
需要从一个服务器或进程中找到漏洞就需要了解软件的框架,软件的结构层次分为不同的功能;
两个名词:节,会在磁盘中的软件里出现,它的作用则是分配不同种类和作用的代码块和文本;
段,可以理解为节的集合,不同的节对应不同的段,段存在于进程中,作用则是分配不同权限的代码块和文本(权限相同的节在一个段中);
对应的,磁盘中的软件和内存中的进程之间因为段和节的关系有着类似的结构,不过也有些许不同:进程中还包含了除原软件外的系统共享进程,比如内核;
①可执行文件
Windows中的PE(portable executable)
.exe 常见执行文件; .dll 动态链接库; .lib 静态链接库;
Linux中的ELF(executable and linkable format)
.out 执行文件; .so 动态链接库; .a 静态链接库;
一般人为的函数和功能都放在动态链接库中;
②抽象的虚拟内存
虚拟内存中装载的也就是一个可执行程序运行起来后的进程,相当于把CPU和主存之间的关系抽象为了一个”磁盘“装载运行中的文件;其次,装载内存中的东西又过于晦涩,不方便人观察,而虚拟内存的概念就可以很好的等效成进程的人为观察视角,所以会有这样一个概念,手机里称为运存;
每个进程的最小单位是字节,每个字节则是进程的一个地址,所以又把进程称之为一个庞大的字节数组;
③C代码在进程中的划分
未初始化全局变量会被划分到一个叫做Bss的区域中;
只读数据(如字符串,声明函数)被划分到Text段区域中;
可改(写权限)全局变量被划分到Data段区域中;
局部变量被划分到栈区域中;malloc申请空间是来自于堆;