目录
预备知识
一、CTF PWN基础知识
《CTF PWN进阶训练》系列实验要求实验者已经了解如下相关的基础知识,包括:
1.理解基本的汇编指令及语句;
2.掌握IDA Pro的基本用法;
3.熟悉网络编程(socket)基本原理;
4.编写简单的Python代码;
5.了解Linux基础操作;
如果对上面的知识点还不是很熟悉,建议先学习合天网安实验室提供的《CTF-PWN系列汇总》实验课程。
二、zio简介
zio是一个专门为CTF PWN开发的Python库,基于zio可以方便实现对远程服务器上的服务程序进行数据读写操作。不仅如此,zio甚至还支持对本地程序的数据读写操作。
zio是一个开源项目,其在GitHub上的官方项目地址为https://github.com/zTrix/zio。zio默认只支持Linux和Mac OSX系统,如果需要在Windows下使用可能需要额外安装一些Python扩展包,或者需要自己对zio的代码进行相关的修改。
在PWN解题中,zio最常用的几个函数如下:
1.导入zio库
from zio import *,表示从zio库中引入所有变量、类以及函数等。
2.与远程服务器建立网络连接
zio(target),其中target是一个元组,即(IP, PORT),其中IP是字符串形式的IP地址,PORT是数字形式的端口号。
3.从远程服务器读取数据
read,直接从远程服务器读取数据;
readline,从远程服务器读取一行数据;
read_until(pattern),从远程服务器读取数据,直到遇到pattern字符串。
4.向远程服务器发送数据
write,直接向远程服务器写数据;
writeline,向远程服务器写数据(在数据末尾自动添加换行符);
5.与服务器建立shell交互
interact,在成功获取服务器控制权限之后,我们需要建立一个shell来对远程服务器进行管理,使用zio的interact函数即可完成这一功能。
可以看到,基于zio编写代码省去了自己建立socket连接这一过程,而且使用zio封装的read/write接口替代socket的recv/send接口,使得代码更加具有可读性。
三、pip
pip是一款用于安装和管理Python包的工具,基于pip可以快速安装和卸载Python包:使用“pip install 包名”命令可以快速安装指定的Python包,使用“pip uninstall 包名”命令可以快速卸载指定的Python包。
类似的Python包管理工具还有easy_install、setuptools等。需要注意的是,安装pip之前可能需要先安装好setuptools包。
四、checksec脚本
操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP、ASLR等。在编写漏洞利用代码的时候,需要特别注意目标进程是否开启了DEP(Linux下对应NX)、ASLR(Linux下对应PIE)等机制,例如存在DEP(NX)的话就不能直接执行栈上的数据,存在ASLR的话各个系统调用的地址就是随机化的。
使用checksec.sh脚本可以方便的查看可执行程序是否启用了这些安全机制,checksec脚本的下载地址为