前言
考完研了,也算是一段奇妙的旅程。
已经上岸西电网信院,
昔日龌龊不足夸,今朝放荡思无涯。
研究生阶段想从web/渗透方向转向二进制(Bin)安全的研究。在我看来,web方向由C语言向上层发展,学习高级语言/web服务,越来越抽象,注重于逻辑。而二进制安全向下延展(汇编/OS/硬件),越来越具体,注重于底层实现。
二进制的分支:
Reverse:逆向工程
注重于分析程序,获取一个程序/病毒,弄清楚它是怎么实现的/会做什么
Pwn:漏洞挖掘
注重于攻击程序,控制程序进而让它执行更多功能/获取更多权限
我自己的学习方向是漏洞分析/挖掘利用,相对应的是CTF中pwn类型题目(描述对一个软件进行漏洞利用的过程),一般要求审计出程序中的漏洞,然后写出exp。和几个师傅聊过之后,个人计划不是按部就班的学,我一直都是个需求驱动学习的人,手里有活才有学习的动力。我想着边用OD调试边学汇编语言/边看PWN的题边学工具,不懂的再去查,这样学习效率会高很多。(再就是看一些书弥补一下底层的知识
最近看了一些学习路线,使用”Docker_for_win”pull了一个Ubuntu镜像,安装了一些常用工具(pwntools/pwndbg/checksec/ROPgadget/one_gadget/LibcSearcher/main_arena_offset/gcc-multilib),搭建了pwn的环境,总结如下。
Docker for windows
开启Hyper-V
在”控制面板-程序和功能-启动或关闭windows功能”中,开启”Hyper-V”功能。
下载安装Docker
点击该链接下载 Stable
下载好后直接进行安装,安装成功点击桌面Docker Desktop图标,运行Docker。
在设置(Setting)页面修改Docker Engine配置文件,因为docker hub服务器在国外,下载速度很慢,修改配置文件如下,更换下载镜像源:
1 | { |
进入cmd命令行,输入docker info命令确认配置生效。
补充一下,Docker默认的镜像会安装在C盘,但我C盘有些不够了,在Setting页面Resources-ADVANCED可以修改Disk image location到合适的目录。
最后,在命令行输入docker run hello-world命令运行第一个容器吧!
配置Ubuntu镜像下的pwn环境
docker常用命令汇总
windows/docker互传文件:
docker cp windows文件路径 容器名:容器路径
pull Ubuntu镜像
命令行输入docker search ubuntu显示仓库中各种Ubuntu镜像,不需要指定版本的情况下,docker pull ubuntu拉取第一个即可。
下载成功后使用命令docker run -it ubuntu运行镜像。
配置pwn环境
先apt update一下检查更新
安装python环境:
apt install python3
apt install python3-pip
安装pwntools:
pip3 install pwntools
成功安装pwntools,会同时安装CTF中常用的工具:checksec(检查程序的保护信息/拿到题第一步)和ROPgadget。
静态调试工具:
IDA Pro 我安装在了本机,破解版可以在52pojie下载。
安装动态调试工具:gbd
apt install gbd
继续安装gbd的插件,这里我选择pwndbg,从github上克隆下来,依此执行下列命令完成安装:
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
安装完成后执行gdb进入pwn debug
除了pwn debug外,gdb在github上还有peda/gef两个插件,安装方法同pwndbg。
one_gadget:
已经劫持程序控制流的情况下,需要返回到libc中system函数的地址,构造一个函数调用栈/ROP链,使最后可以执行libc中的system和/bin/sh进而获得shell,one_gadget可以一键从libc中找到一个满足特定条件(约束)执行就可以获得shell的地址。
需要先安装ruby:apt install ruby
安装ruby包管理器:apt install gem
安装one_gadget:gem install one_gadget
LibcSearcher:
在泄露了Libc中的某一个函数地址后,可以获得libc版本和其他函数偏移,但原脚本基于python2,目前不是很好用。替代方案:在线网站libc database search
main_arena_offset(堆题常用):
A simple shell script to get main_arena offset of a given libc
python封装版:
git clone https://github.com/IZAY01/py_main_arena_offset
注:该脚本依赖于 objdump(反汇编目标文件 ),请确保你的 Linux 中已安装 binutils 包 (二进制工具集 )
执行ld -v
命令确保已安装binutils包
gcc-multilib:
在64位 linux上可以运行32位程序
apt install gcc-multilib
以上,常用pwn工具配置完成。
总结
此文只总结了环境搭建/工具安装过程,对具体工具的使用还需要在下一步CTF题的实践中不断理解。
年更博主是我没错了!!
开了二进制的新坑,之后或许会更的勤快许多。
短期计划:
逆向工程核心原理/程序员的自我修养(linker&loader)/csapp
进而弥补一下底层的知识,熟悉基础工具
在这个浮躁的时代,自律就显得格外地重要,只有自律的人,才有可能脱颖而出,成就大事。
日积月累的学习,坚持不懈的练习,一起加油吧!