# 0X01 Pwn 简介

# 软件安全:软件安全专注于研究软件的设计和实现的安全

研究对象:代码(源码、字节码、汇编等)
研究目标:发掘漏洞、利用漏洞、修补漏洞
研究技术:逆向工程、漏洞挖掘与利用、漏洞防御技术
CTF PWN:软件安全研究的一个缩影

# 研究对象:可执行文件,主要是 ELF 文件

研究最终目标:夺取 Flag
软件安全与 CTF PWN 特点:入门难、进阶难、精通难。

# 工具:

静态分析:IDA Pro
动态调试:gdb (with peda or gef)、windbg、ollydbg
Exploit:pwntools、zio

# 前置技能:

汇编语言:程序执行、函数栈帧、函数调用等
编译、链接、装载、执行
ELF 文件结构
Linux 系统相关:文件描述符、系统调用、socket 编程、shell 命令
编译原理,操作系统,计算机组成原理

# 0X02 PWN 学习方法

# 学习阶段一:学习套路

套路是有限的,假以时日一定会学完的招式
针对每种套路都练习 1~2 道习题
学习完所有常见套路,大多数国内比赛的中档题基本都可以随便切

# 学习阶段二:总结套路,变套路为艺术

漏洞利用是一门艺术,难以用套路完全概况,要想切难题不能全靠套路
多刷刷国际赛的难题,刷的慢没关系,刷多了自然就会融会贯通
多总结思考现有的套路的本质

# 资源:

CTF Writeup Github:https://github.com/ctfs 聚合了各大国际比赛的习题文件以及 writeup
Googling:XXX writeup or XXX CTF 百度收录不了 github pages
0X03 PWN 学习案例 ROP:

1、ROP:现代栈溢出中最基础的利用技术(最简单最基础的套路)

2、Googling 筛选到比较好的题目:r0pbaby

学习 writeup,可以参考多篇 writeup,根据 writeup 和学到的内容自己动手调试一下,尽量自己动手重写 EXP

重写 EXP 成功:基本掌握了 ROP。

第二章 CTF 中漏洞挖掘的方法论:从逆向工程到漏洞挖掘
0X01 逆向工程简介

对于 PWN 来说,逆向工程的主要作用为发掘与分析漏洞

工具:

静态分析工具:IDA pro
动态调试工具:gdb、windbg、ollydbg、IDA Pro
IDA pro 的 F5 大法

0X02 常见漏洞简介

在进行漏洞挖掘之前,必须对常见漏洞非常熟悉!!!

缓冲区溢出(Buffer Overflow)

堆溢出、栈溢出、bss 溢出、data 溢出(通常覆盖指针)
wellpwn、AliCTF 2016 vss、Hitcon 2015 readable、stkof、zerostorage
整数溢出(Integer Overflow)

无符号型与有符号的转换(MMACTF 2016 shadow)
整数加减乘除法,如 malloc (size*2) (pwnhub.cn calc)
整数溢出通常会进一步转换为缓冲区溢出、逻辑漏洞等其他漏洞
格式化字符串(Format String)

printf (s)、sprintf (s)、fprintf (s) 等,可能导致任意地址读写(MMACTF 2016 greeting)
可以用来 leak(HCTF2016 fheap)
释放后使用(Use-After-Free)

释放掉的内存可能会被重新分配,释放后使用会导致重新分配的内存被旧的使用所改写
Double free 是一种特殊的 UAF
Defcon 2014 Qualifier shitsco、AliCTF 2016 router、0CTF2016 freenote(double free)、HCTF2016 fheap(double free)
逻辑漏洞

访问控制、协议漏洞、多线程竞态条件(fake fuzz)等
0X03 漏洞挖掘中的逆向技巧

关键数据结构分析:还原结构体、接口、类等

控制流分析:理清楚程序的执行逻辑,基本要做到从反汇编代码到源码的还原

数据流分析:理清楚数据的流向

CTF 漏洞挖掘中的分析策略:

目标文件较小时,通常采用对整个目标文件进行控制流分析,做到整个程序从反汇编代码到接近源码级别的还原,还原的同时查找漏洞
目标文件较大时,逆向整个文件所需工作量太大,通常需要额外的关注数据流,并理清楚数据流所经之处的控制流,因为漏洞的触发与数据流离不开关系
无论是数据流分析和控制流分析,还原结构体、接口、类都会促进逆向工程
控制流分析的主要作用是理清楚程序的逻辑,对于规模较小的目标文件,一般选择理清整个目标文件。

代码以识别为主,不要硬逆。

善用标记,标记结构体、标记变量名、标记变量类型

F5 大法好,但是 F5 不是万能的,当发现 F5 结果比较诡异时需要在汇编层分析(如 mmactf 2016 shadow)

数据流分析

目标文件较大,全盘逆向不现实

追溯用户输入的走向,重点关注对用户输入数据处理的函数
可以在不用逆清楚控制流即可找到漏洞,需要一定的技巧性 (plaid CTF 2015 datastore)

原文链接:https://blog.csdn.net/prettyX/article/details/103173220

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

4riH04X 微信支付

微信支付