PWN基础2:基础理论

基础理论

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 

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进行反汇编

PWN基础2:基础理论_第1张图片

disass main:反汇编main函数

PWN基础2:基础理论_第2张图片

disass test:反汇编test函数

PWN基础2:基础理论_第3张图片

设置断点

//gdb
b main

函数断点:这种断点是当程序执行到某个函数时就会触发断点。

但是函数断点并不是对所有函数都有效,比如优化后的静态函数和inline函数等,可能就无法触发断点。

info br              查看断点
delete <断点id>      删除指定断点
delete               删除所有断点

 

r      运行
n      单步执行,next遇到函数不会进行函数内部
si     步入,遇到函数会执行到函数内部
c      继续运行,使用continue命令继续执行程序。程序遇到断点后再次暂停执行;如没有断点,则会一直执行到结束

PWN基础2:基础理论_第4张图片

汇编leave等价于

  1. mov esp,ebp
  2. pop ebp

根据Roger师傅课程及《CTF特训营》中部分内容所整理

加油

leave

你可能感兴趣的:(PWN)