Linux_x86栈溢出攻击实验——写在前面的话

师父说,要想在安全这个行业走得远,首先要看兴趣。其实我有些怀疑自己的兴趣,不过干一行爱一行。

最近由于某种原因开始接触二进制漏洞,特别小白那种,虽然漏洞原理两三句话说得清清楚楚,但要实际操作起来真的不知如何下手。因此将自己的从0到1的经历写出来分享跟我一样的小白,尽可能做到超级详细通俗易懂,一方面记录自己的学习过程以及踩过的坑,另一方面希望能坚持更新博客也给自己坚持学习的动力,希望在这个过程中培养自己对安全的一点点兴趣吧。
首先需要明确大方向,是研究linux系统下的二进制漏洞,还是windows系统下。如果对linux系统有简单的了解,会使用基本的命名,建议直接选择在linux平台下做实验。否则可以跟着westfail教程先在windows下实践,跟着教程一步一步实现基本的栈溢出漏洞,先感受一下当理论被成功实践的激动。
https://bbs.pediy.com/thread-56445.htm

接下来就开始我们linux环境下的准备工作啦~~
敲重点!!两个踩过的大坑
1、务必使用64位机器,pwntools不支持32位python
2、32位机器只能编译生成32位程序,64位机器可以生成32位和64位程序,因此不要担心在64位系统中如何分析32位程序

需要用到的工具:
1、 gcc编译器
2、 gdb 动态调试器、peda插件
3、 objdump 查看二进制文件信息的工具
4、 pwntools 编写exp利器
5、 ROPgadget在二进制文件中搜索gadget
6、 x64系统中安装32位程序运行和编译环境,编译时添加-m32选项生成32位程序

需要具备的基础知识:
1、 基础汇编知识,如ESP、EBP、EIP等寄存器,mov、add、call、ret等指令
2、 运行时C语言在内存中的分配,重点为栈(存储函数的参数、局部变量等)
3、 函数调用与返回过程
4、 二进制程序保护机制,NX/DEP、SP、ASLR、PIE等
5、 动态链接中GOT表、PLT表与延迟绑定技术
6、 X64环境下考虑与32位的不同,寄存器以及函数调用
在时间允许的情况下,该部分知识我也会单独整理的~

实验思路:(未开启PIE,程序装载位置确定)
1、 ret2shellcode:关闭全部保护机制,通过往栈中注入代码实现栈溢出攻击
2、 ret2libc:开启NX/DEP机制,使得注入的代码不能执行,寻找libc中函数执行
3、 ROP:开启ASLR,libc库装载位置随机,考虑泄露libc中某个函数如wirte(),根据相对地址来计算
4、 在不获取目标机器libc.so的情况下使用内存泄露进行ROP攻击
(234是在越来越强的保护机制下寻找system()函数和字符串/bin/sh地址,构造system()函数栈,从而在不注入代码的情况下执行system(“/bin/sh”)函数打开shell)
实验以蒸米的例子做演示,加入更详细的步骤以及解释。
https://www.cnblogs.com/alisecurity/p/5646656.html

栈溢出攻击实施基本思路:
1、 找到函数返回地址,即输入栈中的数据要覆盖到哪里
2、 用什么值覆盖返回地址,即控制程序流,使其运行新的返回地址处的指令
3、 编写shellcode(先使用汇编语言编写,再编译反汇编得到机器码),将shellcode注入栈中,使返回地址指向shellcode(此步骤在代码注入攻击中需要,代码复用攻击直接利用内存中存在的代码)
4、 编写exp

最后想说一句,工欲善其事,必先利其器!所以在开始实验之前最好一次性将要用到的工具安装好~以免实验做到一半要安装软件时发现大坑,比如我在32位系统上安全pwntools折腾了好久哈哈哈哈

你可能感兴趣的:(pwn)