Skip to content

aidielse/linux-exploit-development-tutorial

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Linux exploit 开发入门

这是什么?

这是面向新手的 Linux exploit 开发指南。

发现 Linux 下二进制学习曲线陡峭,而套路零散,于是整理编著这篇文章,来帮助感兴趣的人学习,还想结识更多对 Linux 二进制感兴趣的人。

万事开头难,首先要感谢本文原来的的作者 sploitfun,他开始做了这件事并写出了思路,我在他的基础上进行了补充和翻译。

还要要感谢 phrack,乌云知识库,各种 wiki 上面文章的作者,这些作者和安全研究人员讲解了很多关于 exploit 相关技术,是大家的无私分享使很多东西变的可能,我也想学习这样的分享精神。

为了防止文档过于臃肿,我们讲分享讨论的话题尽量限制在 Linux, x86, ipv4 范围内,我们假设读者能正常使用 Linux,熟悉 C 语言,了解汇编语言,认识计算机专业词汇,基本体系结构知识(栈,堆,内存之类的)。如果不能因为知识储备不够,推荐 0day 安全以补充背景知识。

测试机器是 Ubuntu 14.04 的默认安装。

目录

第一章节: 基础知识

基础部分知识比如: 栈与堆分别是什么? C 语言如何转换成汇编? 内存布局是什么样的? ...

基础的安全知识如: 什么是堆栈溢出? 堆分配器是如何工作的? ...

这个阶段还要介绍基本的漏洞类型和安全机制,然后关闭全部的安全保护机制,学习如何在 Linux 下面编写最基本的 exploit。

第二章节: 栈的安全

主要关注在现代 Linux 上栈的安全防护机制及其绕过的常规套路.

分为两大类:编译相关(ELF 加固),部分编译选项控制着生成更安全的代码(损失部分性能或者空间),还有就说运行时的安全(ASLR),都是为增加了漏洞利用的难度,不能从本质上去除软件的漏洞。

第三章节: 堆的安全

主要关注在现代 Linux 上 glibc 下堆的安全防护机制及其绕过的常规套路。

第四章节: 内核的安全

这个阶段学习现代 Linux (2.6.32)及其以后版本 Kernel 安全相关的文档(安全保护,利用)。

在早期 Kernel 可以随意访问用户态代码, ret2usr 技术可以让内核执行用户态的代码,不过随着 Linux 的发展 SMAP(禁止 Kernel 随意访问用户态,RFLAGE.AC 标志位置位可以),SMEP 禁止 Kernel 态直接执行用户态代码,KASLR 也提升了漏洞利用的难度。

第五章节: 漏洞发现

漏洞挖掘的重要性不言而喻,打个比喻上面写的如何吃肉,漏洞挖掘就是肉在哪里。

这个章节对我来说目前也是一个新领域,在这个章节里面主要关注 fuzz 与代码审计。

如何修改和更新?

git clone git@github.com:hardenedlinux/linux_exploit_development_tutorial.git
cd linux_exploit_development_tutorial
make # preview

如何实践文档代码?

(WIP)

源代码会陆续放到lab-code目录中,其实更倾向于提供一个虚拟机镜像供下载。 ...

版权

这个项目是以 知识共享署名-相同方式共享 3.0 许可协议授权。

About

a series tutorial for linux exploit development to newbie.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 52.1%
  • Assembly 33.0%
  • Python 9.9%
  • Shell 5.0%