PWN——从入门到入土
咚!咚!咚!
从入门到入土之路开始了
”Pwn”是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵了 。
在CTF比赛中,pwn题主要是考察对二进制漏洞的发掘和利用,在此之上你必须要对计算机操作系统的 底层有一定的了解,这也是为什么pwn的入门门槛是所有方向中最高的原因之一。当然如果你是0基础的猛新也不用担心,因为基本上没有人是在所有关于操作系统的课程都上完过后才去学习pwn的,ctf为你提供了一个学习的平台,你可以一边拓展你的知识面一边享受pwn的乐趣。
学习Pwn,你必须了解或掌握的知识
- C语言
- 汇编语言
- 最基础的python
- IDA等pwntools的使用
- 计算机组成原理
- 计算机操作系统
- 编译原理
这里推荐两本相关书籍,有意学习Pwn方向的同学可以留心一下
- 《CTF竞赛权威指南 pwn篇》(方便快速入门)
- 《汇编语言(第4版)》(王爽著)
同时这里也建议多关注一些论坛,比如吾爱破解,安全客,先知社区,freebuf,看雪等等,在这上面你 能学到不少漏洞利用相关姿势,可以在摸鱼的时候浏览查看
Pwn的解题流程
1.关于环境
如果你是windows平台的话,首先你需要一台linux虚拟机,这里推荐使用ubuntu18.04,因为大多数 pwn题的部署环境都是ubuntu,便于你本地的调试,有了这样一台虚拟机后,你就可以在上面本地或者 远程调试pwn题了 (但我个人也在经常使用kali,因为自带pwntools,解题有时还是很方便的)
注:linux环境下由于默认的远程软件库是国外的源,下载速度可能会比较慢,可以在清华镜像源里去下载需要的Linux版本
同时,你需要安装pwntools这个python库,它是你在面对pwn题时最有力的工具,用它来get一个个 shell吧(安装方法详情请见百度) 在windows下你则需要IDA这个静态分析工具,建议在做题之前先在网上好好了解一下IDA的使用,会极大方便接下来的做题
2.举个栗子
拿到一个pwn题,第一时间便是检查保护机制
1|ret2text checksec ret2text2|Arch: i386-32-little3|RELRO: Partial RELRO4|Stack: No canary found5|NX: NX enabled6|PIE: No PIE (0x8048000)
- arch即程序所采用的架构,由上可知这是一个x86架构下的32位程序
- RELRO(Relocation Read Only),重定位表只读,这个保护并未完全开启,若完全开启则got表与 plt表只读不可写
- canary,语义意为金丝雀; Stack canary 保护机制在刚进入函数时,在栈上放置一个标志 canary ,然后 在函数结束时,判断该标志是否被改变,如果被改变,则表示有攻击行为发生,同时结束程序运行。同上这个保护也未开启
- NX(栈不可执行),NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,如此一来, 当 攻击者在堆栈上部署自己的 shellcode 并触发时, 只会直接造成程序的崩溃,但是可以利用rop这种 方法绕过
- PIE(Position-Independent Executable, 位置无关可执行文件),即程序运行时各个段(如代码段 等)加载的虚拟地址也是在装载时才确定
第二步,使用IDA静态工具查看ELF文件,通过反编译查看伪代码,读懂文件的内容,然后利用相应的方法解题(格式化字符串,栈溢出,整数溢出,堆溢出……)
一般到最后,就会利用python编写脚本(exp),然后拿到题目的flag
(不过最简单的pwn题,你只需要通过nc连接题目靶机端口,然后cat flag就能拿到flag)
写在最后
Pwner: pwn for what?
就CTF比赛这几个大类来看,pwn无疑是入门门槛最高的一个方向。它要求你具备以下基本能力:
- 代码审计能力
- 对整体程序流的认知与把握
- 发掘程序中的漏洞点
- 善用所有可利用的漏洞点来发起攻击
金句
在整个getshell的过程中,困难是其次的,重要的是保持耐心与热情;在每个pwner的生涯中或许都会有过长久不能入眠的夜晚,面对屏幕上的一行行代码,逐行分析每个字符,思索各种可能存在的漏洞······最终,你或能在交互后成功在命令行里输入cat flag ,亦或在疑惑中查询他人的wp,无论结果与否,在潜移默化之中,你都在朝着未来的pwn master的方向砥砺前行。当你在CTF众多分支里选择Pwn的时候,摆在你面前的就不是一条轻松的道路,关于二进制的研究都是如此,所有的pwner都是从萌新一步步逐渐挣扎着、努力变成大佬的,毕竟在拿到shell后心里默念的”hacked by xxx”之中的喜悦之情是什么都难以掩藏的吧!
Hack Just For Fun
若有人将我从深渊拉起,我必敢再次凝视深渊
希望你能在黑暗中探寻光明的道路,用你内心无尽的热爱点燃这Pwn世界。
Pr0b1em{Love_Pwn_Forever!}