逆向大类 |
您所在的位置:网站首页 › 格式化字符串泄露libc › 逆向大类 |
PWN入门指南0x01 pwn是什么
pwn:“Pwn”是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似 “砰”,对黑客而言,这 就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑 或手机就被你操纵。
CTF中PWN题型通常会直接给定一个已经编译好的二进制程序(Windows下的EXE 或者Linux下的 ELF文件等),然后参赛选手通过对二进制程序进行逆向分析和调 试来找到利用漏洞,并编写利用 代码,通过远程代码执行来达到溢出攻击的效果, 最终拿到目标机器的shell夺取flag。
二进制逆向可以概括为 从目标代码反推到源代码,再通过源代码去理解该文件的 实现的功能和创 作的意义,这项技术在实战中常应用的领域为 软件破解、漏洞挖掘、恶意木马的分析。
对于Pwn选手来说,未来会更容易接触到KOH赛题,也更考验人们对于代码审计的能力以及对于各种关于底层漏洞知识的掌握。
0x02 基础知识1.C语言 零基础的同学,从C语言的学习开始视频推荐:中国大学mooc:翁恺教授-C语言入门练习平台:PTA | 程序设计类实验辅助教学平台、首页 - 洛谷 | 计算机科学教育新生态在之后,学有余力的同学,可以学习简单的数据结构和算法 2.汇编语言推荐:王爽《汇编语言》最后的目的是能看懂汇编代码,不用实现手搓汇编程序早期学习中的目标:了解以下指令的作用 , 寄存器的作用 , 寻址方式(此处为x86指令集部分指令,未来会出现更多的指令集) 1234567891011121314151617movaddsubincdecleacmptestjejnejmpcallpushpopandorxor 3.python基础在C语言基础扎实的情况下,python是很容易入门的在做pwn题的时候,是通过python脚本与程序和工具进行关联,所以需要学习pythonpython包括python2 和 python3 ,学习中注意python2和python3的诸多区别,尤其是python3中str类型与bytes类型的区分与转换 (但现在更多师傅在做题时会选用Python3,Python2.7环境是每个Ubuntu标准环境中自带的,也同时兼容一些仅低版本的工具的使用。推荐版本 3.7.* 3.8.*) 4.linux基础目的是能够运用基本的shell命令简单的linux命令行的使用pwn的很多工具是只有linux版本的,所以需要简单的学习 (注:不是特别建议直接将本机系统换为类Linux,双系统可行) 0x03 大致路线&资料刷题平台推荐:NSSCTF、攻防世界、BuuCTF、PWNHUB、CTFShow、Pwnable(TW)、Pwnable(KR)、PwnCollege (排名不分先后,以个人对本方向做题体验排序)学习资料:CTF-wiki文字资料、星盟安全PWN全集视频资料比赛查询:三哈安全平台:看雪、FreeBuf、安全客、先知、吾爱破解相关书籍推荐:《有趣的二进制》《深入理解计算机系统》 《程序员的自我修养》 《0day漏洞挖掘与利用》 由于本方向相对其他方向资源偏少,更需要个人的思考、调试的熟练程度,以及对于资料的找寻能力 1.栈基本ROP:ret2text , ret2shellcode , ret2syscall, ret2libc这些学习完,就可以在ctf平台上开始刷题练手了 ctfwiki中其他构造ROP的技巧:ret2csu, ret2reg等等之后的ret2dl_resolve等技巧有难度,可以暂放 2.格式化字符串漏洞学习如何利用漏洞实现 泄露内存 和 覆盖内存包括泄露栈上内容,泄露BSS段上内容等等 3.堆在学习堆之前,先熟悉数据结构“链表”,包括单向链表,双向循环链表等等推荐学习顺序:UAF –> Fastbin Attack –> Unlink –> …… 附:环境搭建&工具安装1.linux系统安装通过虚拟机 如:VMware实现 (也可以双系统,开心就好)再于虚拟机中搭建linux系统:最好为Ubuntu初期所接触的ctf-pwn题,多为libc2.23, 所以前期至少需要安装ubuntu16的系统 12345ubuntu16(glibc2.23)ubuntu18(glibc2.27_ =1.3)ubuntu20(glibc2.31)ubuntu22(glibc2.34)但由于后续某些工具也在同步更新,导致ubuntu16可能不能很好地安装这些工具,所以此处我们更推荐使用Ubutnu20.04 2.Ubuntu20.04以及python2环境下进行安装(注:如果是ubuntu18及以上版本最好且应该采用Pyhton3的安装方式,如未注明Python2/3,则更希望读者采取Python3的方法;如果希望使用Python2版本的安装也可以在GitHub上找到某些特定的低版本,但所有的Python2版本我们都是不建议的) 0. IDA用于逆向程序,呈现出可以阅读的汇编代码(在windows下安装,群里有资源;在linux下可以使用wine或去官网下载ida free(不建议),或直接使用ghidra,不建议使用cutter) 1. ubuntu20.04虚拟机安装,VMware Workstation Pro+ ubuntu20.04的iso文件vmtools安装:https://blog.csdn.net/adminkeys/article/details/107914813 2. apt更新:在本处往后内容都需要在命令行中 由于国外源相对较慢,推荐上网搜索您使用的Ubuntu版本换源,然后根据教程操作后进行如下操作: 123sudo apt update# sudo apt upgrade# upgrade可选,为本地所有已安装包体的更新 3. python2.7:12#非必要sudo apt install python2.7 python-pip python-dev git libssl-dev libffi-dev build-essential 4. pip:用于快捷的安装其他软件 123456789#不直接用apt进行更新,python2会崩,但不建议sudo apt install wgetwget https://bootstrap.pypa.io/pip/2.7/get-pip.pysudo python2 ./get-pip.py#或sudo apt install python-pip#python3安装sudo apt install python3-pip 5. git, gdb, gdb-mutiarchgit用于克隆代码托管他人项目gdb用于调试程序gdb-mutiarch在之后用于arm架构的调试(但可能更常搭配qemu使用) 1234sudo apt-get install git gdb# 非必要# sudo apt-get install gdb-multiarch# sudo apt-get install "binfmt*" 6. pwndbg(gdb的插件)因为gdb对于pwn题的调试不便,所以需要通过功能更适合的插件pwndbg进行 123456789git clone https://github.com/pwndbg/pwndbgcd pwndbggedit ./setup.sh#注释掉这一行:${PYTHON} -m pip install ${INSTALLFLAGS} --upgrade pip./setup.sh#如果第一遍安装有对于capstone的报错,则gedit requirements.txr#将capstone==4.0.1修改为capstone==5.0.0#最好多执行几次,并且保证网络环境通畅,没有任何报错即可停止,如后续使用工具出现问题重新执行本操作 7. pwntoolspython pypi的一个库,集合了一整套pwn工具集,涵盖了pwn题利用脚本所需要的各种工具。包括方便的IO交互函数,ROP、格式化字符串等利用的自动化工具,shellcode生成器等等。pwntools是目前最好用也是仅有的大型pwn利用框架。 1234567891011121314#python2.7 不建议sudo pip install setuptools==44.0sudo pip install MarkupSafe==0.9.2sudo pip install cryptography==2.5sudo pip install configparser==3.5sudo pip install zipp==0.5sudo pip install importlib-metadata==0.12sudo pip install importlib-resources==1.0sudo pip install pwntools==4#python3安装pip install pwntools #Python2.7也可以pip install pwntools,不过同时需要pip install pathlib2 8. ROPgadget(pwntools的一个组件)在栈溢出的基础上,可以利用程序中已有的小片段(gadgets)改变某些寄存器或者变量的值,便于控制程序的执行流而ROPgadget可以实现方便地查找好用的gadgets 12#校验是否安装成功ROPgadget -v 9. LibcSearcher用于解决pwn题中不明libc版本的问题,可以根据泄露的某函数地址,推测服务端使用的libc版本 123456#python2 不建议git clone https://github.com/wjhwjhn/LibcSearcher.gitcd LibcSearcherpython2 setup.py develop#python3安装pip3 install LibcSearcher 10. one_gadget由于在ubuntu16.04下安装ruby默认且最高版本为2.3,需要高版本ruby才能安装本工具,可参考如下文章:https://blog.csdn.net/henryhu712/article/details/89224467在高版本ubuntu中可以直接安装(Ruby>=2.4.0) 由于是国外源,并且gem下载没有提示,多等待一会就好了,下同 12sudo apt install rubysudo gem install one_gadget 11. seccomp_tools检查sanbox保护用的工具(Ruby>=2.4.0) 1sudo gem install seccomp-tools 12. patchelf修改ELF文件的动态链接库以及链接脚本文件,常配合glibc-all-in-one使用,大多数情况下直接apt下载即可,部分情况需要从源码自行编译构建(注:在Ubuntu18下patchelf会使链接后的文件失效,故不建议在Ubuntu18上使用) 1sudo apt install patchelf 13. pwngdb在后续堆题的学习中会大大提升学习效率,但由于会影响pwndbg canary指令,所以建议进行后续学习时再进行下载 1234567git clone https://github.com/scwuaptx/Pwngdb.git cp ./Pwndbg/.gdbinit ./#因为你使用的时pwndbg,所以还需如下操作gedit .gdbinit#将第一行 source ~/peda/peda.py 用 # 注释掉或直接删掉#然后添加上如下一行,在第一行source ~/pwndbg/gdbinit.py理论上做完这些操作.gdbinit文件中应该是这样的 1234567891011#source ~/peda/peda.pysource ~/pwndbg/gdbinit.pysource ~/Pwngdb/pwngdb.pysource ~/Pwngdb/angelheap/gdbinit.pydefine hook-runpythonimport angelheapangelheap.init_angelheap()endend |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |