0x00 当我们在谈论pwn时我们都在谈论什么?
For 萌新:
- 一个功能有限的小程序 eg:计算器,学生管理,或者仅仅是问一下你的名字
- 一个IP地址和端口: nc 10.1.1.1 1234
- 我是谁?/我在哪里?/怎么就能getshell了????
For 老鸟:
- 明显的 stack/heap/int 溢出,格式化字符串,off-by-one/UAF/double free/unlink/…………
- 抽象成:对内存地址的读、写
- 漏洞利用:shellcode/GOT/vtable/hook_function/onegadget
Pwn现在处于CTF的顶峰,一直以来它的难度其实并没有什么变化。
Pwn的入门确实是比较难,学习的路径非常的陡峭,很多人就望而却步了。
不像其他的Web或者杂项之类的,没事看看还能看的进去,像Pwn题有时一看一两个星期跟没看一样。
0x01 Pwn的定义
Pwn是一个骇客语法的俚语词,自”own”这个字引申出来的,这个词的含意在于,玩家在整个游戏对战中处在胜利的优势,或是说明竞争对手处在完全惨败的情形下,这个词习惯上在网络游戏文化主要用于嘲笑竞争对手在整个游戏对战中已经完全被击败(例如:”You just got pwned!”)。
在骇客行话里,尤其在另外一种电脑技术方面,包括电脑(服务器或个人电脑)、网站、闸道装置、或是应用程序,”pwn”在这一方面的意思是攻破(”to compromise”,危及、损害)或是控制(”to control”)。在这一方面的意义上,它与骇客入侵与破解是相同意思的。例如某一个外部团体已经取得未经公家许可的系统管理员控制权限,并利用这个权限骇入并入侵(”owned” 或是 “pwned”)这个系统。
0x02 CTF PWN
- IP地址、端口(nc 10.1.1.1 1234)
- 程序文件(linux下elf文件居多)
- libc动态链接库
最终目的:利用程序中的漏洞改变程序原本的执行流程(控制程序执行流/控制EIP(RIP))
0x03 解题步骤
- 查看程序基本信息
- 检查程序保护机制
- 逆向分析、定位漏洞点、了解程序执行逻辑
- 构造发送payload,利用脚本与程序交互
- 调试程序
- Pwned
0x04 逆向基础
了解字节序
字节序和处理器架构有关,常见的intel架构采用小端序(内存中的数据倒着放)
pwntools会帮我们处理p64()、p32()
0x05 做题环境
下载
虚拟机:
链接:https://pan.baidu.com/s/1Ia8NPcXy414QOaiH14T3sQ
提取码:kypa
账号密码: giantbranch:giantbranch (root密码可以通过sudo passwd root自行修改)
0x06 做题工具
工欲善其事必先利其器
- ida_pro
- pwntools
- one_gadget ROPgadget ropper
- pwndbg peda gef
- checksec
- main_arena_offset
- pathelf
- LibcSearcher(很鸡肋,可以去网上 找libc更可信)
32位系统默认虚拟内存大小为4GB,64位为256TB
bss节存放未使用的全局变量
局部变量在栈中
大端序小端序
静态链接和动态链接