part 1
1、在CTF比赛中,PWN主要是指漏洞利用,也称为exploit。
2、PWN题型的解题过程一般是寻找程序中存在的漏洞,并利用该漏洞达到一定的效果,如拿到shell、获取flag等。
3、解答PWN题型的基本能力包括:程序逆向能力、漏洞查找能力、利用代码编写能力。
4、PWN题型中的漏洞类型主要可以分为栈漏洞、堆漏洞、格式化字符串漏洞、整形漏洞、逻辑漏洞等。
5、就难易程度来说,栈漏洞、格式化字符串漏洞、整形漏洞的难度要低于堆漏洞、逻辑漏洞。
6、就考察点来说,栈漏洞、堆漏洞、格式化字符串漏洞、整形漏洞偏重于基本功,逻辑漏洞则偏重于思维能力。
part 2
1、32位X86架构下汇编指令有两种格式:intel、AT&T。
Intel:寄存器名称和数值前无符号AT&T:寄存器名称前加“%”,数值前加“$”2、栈帧
就是一个函数执行的环境;函数参数、函数的局部变量、函数执行完后返回到哪里等等每一个栈帧代表的就是一个未运行完的函数3、下面可以通过对一个简单程序的调试,来加深对于栈帧的了解,同时熟悉对于gdb的基本使用
//源码 //hello.c #include <stdio.h> int test(int a,int b) { int c = a + b; return c; } int main(int argc, char const *argv[]) { test(1,2); }使用如下命令编译.c文件
gcc -m32 -o test hello.c-m32:编译32位程序
使用gdb进行反汇编
disass main:反汇编main函数
disass test:反汇编test函数
设置断点
//gdb b main函数断点:这种断点是当程序执行到某个函数时就会触发断点。
但是函数断点并不是对所有函数都有效,比如优化后的静态函数和inline函数等,可能就无法触发断点。
info br 查看断点 delete <断点id> 删除指定断点 delete 删除所有断点r 运行 n 单步执行,next遇到函数不会进行函数内部 si 步入,遇到函数会执行到函数内部 c 继续运行,使用continue命令继续执行程序。程序遇到断点后再次暂停执行;如没有断点,则会一直执行到结束
汇编leave等价于
mov esp,ebppop ebp根据Roger师傅课程及《CTF特训营》中部分内容所整理
加油
leave