starrycan的pwn随笔——Linux保护机制与基本环境搭建

一.linux下的所有保护机制

0x01 为什么要有保护机制

学校需要大门来禁止外来人员的进入,需要规章制度来约束学生,事在人为,而我们的linux的最核心的代码也由人写出也需要些规定来促使程序的正常运行,其中非常中重要的部分就是内存地址的记录,堆栈空间的正常开辟和清理

0x02 Linux下常见的保护机制

相比与window或者其他大家目前知道的系统,Linux操作系统的保护机制是十分简单的有

1.canary——堆栈空间的警报器

2.NX——不可执行

3.PIE和ALR——地址随机化

4.RELRO——延迟绑定机制的保护

0x03 笼中鸟——CANARY

1.Canary来源

canary中文翻译就是金丝雀,来源是之前科技不发达时,矿工会在下井作业时带一个金丝雀,用来判断地下环境有没有煤气之类的毒气泄漏,金丝雀没事,大家继续干活;金丝雀如果死了,大家赶紧跑,

canary的作用就如同他引用的一样,用来判断程序的执行环境在linux中,主要是针对检测栈溢出。

2.具体的Canary

canary是一个开头字节为|x00的一段长度为八个字节的随机数,这个随机数本体存放于fs段偏移为0x28的区域

这里要说明8个字节的随机数是一个2的62次方的数字的了,比long 数据类型的字节还要长

在每次函数调用中,程序都会将这段随机数存放于栈底,每次运行结束返回时都会将这一随机数与他的本体进行比对,

这里可以类比以下防伪标

如果这个值被改变,则意味着发生了栈溢出,程序直接退出,没有改变的话程序继续执行。

3.程序中的canary

上文中已经说到了,canary具体存在偏移为0x28的区域 那么我们以后在看一些相关的题目时,我们便可以把存在0x28的地方认为为canary

0x04 NX

1.什么是NX

NX意思就是Not Executable,开启这个保护后,程序中的堆、栈、bss段等等可写的段就不可以执行

也就是对一些可输入,可能出现错误的地方都给禁止

2.NX的意义

这就意味着如果开启了NX保护,通常情况下我们就不能执行我们自己编写的shellcode.

绕过的方式通常是用mprotect函数来改写段的权限,nx保护对于rop或者劫持got表利用方式不影响。

0x05 PIE和ASLR

1.什么是PIE和ALR

在我们编写ROP或者shellcode时,有一个问题是绕不开的,那就是找到函数地址
PIE指的就是程序内存加载基地址随机化,意味着我们不能一下子确定程序的基地址
ASLR与其大同小异,ASLR是程序运行动态链接库、栈等地址随机化。

两者之间的关系类似于之前 写过的got表和plt表,两者之间有关系但是绝对不是一个东西

PLE是管ELF文件的,而ASLR是针对系统内部的栈堆空间针对系统的

2.PLE和ASLR的意义

通常来说,CTF中的PWN题与这两个保护打交道的次数最多
绕过方式就是泄露函数地址,然后通过函数的偏移来确定基地址,

0x06 RELRO

1.什么是RELRO

这个保护主要针对的是延迟绑定机制,意思就是说got表这种和函数动态链接相关的内存地址,对于用户是只读的。

2.RELRO的意义

开启了这个保护,意意味着我们不能劫持got表中的函数指针

二.pwn基本环境搭建

一切东西都需要实践,和我们学习语言过程中需要编译一样,学习pwn也需要安装很多环境这个过程可能比较困难,还是那句话 逢山开路,遇水架桥

1.安装环境

以下是我的安装步骤和准备

1.安装虚拟机vm 与乌班图

这里我采用20.04版本 也就是20年4月发布的版本

这里解释一下,采用乌班图20.04是已经测试出来比较好用,稳定的系统和版本 如果是其他系统以后会存在这样或者那样的问题,俗话说的好,听人劝 吃饱饭

虚拟机官网下载地址:(https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion)

访问网址后我们,我们点击就可以下载了,正版软件下载需要口令 大家可以网上寻找

乌班图镜像 如果在官网下载会十分缓慢,这里推荐清华镜像源网址

镜像源下载地址Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

很多东西都在网站上写的 那些说找不到的同学建议多背背单词

2.安装好乌班图之后 我们要系统进行一些简单的设置

这里记录一下我遇到的问题

A.在开始安装系统界面会发现这时因为分变率问题 无法点击继续安装

这时候我们退出到桌面 右键点击显示设置然后,调整分辨率就可以解决问题了

2.安装一些必备的工具

1.安装net-tools工具

系统是非常简陋的也是一个非常原始的状态 我们输入ifconfig发无法显示ip地址 我们就可以通过net-tools来查看本机的ip地址

我们可以输入sudo apt install net-tools 指令安装工具 这样就可以正常查看ip地址了

2.安装vim 编辑器

sudo apt install vim 安装之后我们就可以采用vi 模式对文本进行编辑

3.安装gedit工具

sudo apt install gedit

这个工具也是一个十分常用的文本编译工具 在下面的换源中将会有用

4.安装git工具 方便我们以后从代码托管平台下载代码

sudo apt install git

5.换源

所谓换源 就是把Linux中默认下载源从国外切换到国内 因为我们在国内,无法下载软件

1.输入 gedit /etc/apt/sources.lit

注意:这个插件有一个小bug 第一次输入之后无法正常运行 我们可以先输入ctrl+c 终止程序

然后再次运行就可以了 运行成功后效果如下

2.访问清华源网址

我们将20.04-16.04的代码都复制到这个文本文件中 并且保存

ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

6.安装gcc 用来编译程序

sudo apt install gcc
apt install gcc-multilib

7.安装python

python在我们以后的编写exp的过程中十分重要

这里我们需要安装python2 和python3 两个版本都要安装

sudo apt install python2

sudo apt install python3

一定要先安装python2 然后安装python3

8.安装ipython 插件

ipython是基python第三方库的一些常用插件 可以通过以下两条命令安装

sudo apt install ipython

sudo apt install ipython3

安装好之后我们通过ipython命令查看安装情况

安装好之后我们通过ipython3命令来查看安装情况

9.安装pip插件

sudo apt install python3-pip

sudo apt install curl 安装curl 插件

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py 通过插件安装pip插件

sudo python2 get-pip.py
安装完成之后我们可以通过 pip2 --version对安装好的pip进行查看

10.安装zsh插件 以及oh my zsh 插件

我是参考的这篇文章 Zsh 安装与配置,使用 Oh-My-Zsh 美化终端 | Leehow的小站

sudo apt install zsh zsh是针对系统命令行的命令

sh -c "$(curl -fsSL https://gitee.com/pocmon/ohmyzsh/raw/master/tools/install.sh)"

通过curl 插件安装oh my zsh 插件

安装这个插件之后我们的命令行就会变得美化

要想生效我们还把zsh设置为默认shell 输入以下指令

chsh -s /bin/zsh

chsh -s /bin/zsh

11.安装 oh-my-zsh 插件

zsh-autosuggestions ,见文知意 自动建议的意思就是当我们写出一些命令时 系统会帮我们补全 效果如下图

zsh-syntax-highlighting是一个命令语法校验插件,在输入命令的过程中,若指令不合法,则指令显示为红色,若指令合法就会显示为绿色。效果如下:

12.编辑 ~ /.zshrc 添加插件

lugins=( # other plugins...

​ zsh-autosuggestions

​ zsh-syntax-highlighting

​ extract )

posted @ 2024-11-22 21:50  Starrycan星灿  阅读(3)  评论(0编辑  收藏  举报