“Pwn”是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似”砰”,对黑客而言,这就是成功实施黑客攻击的声音–砰的一声,被”黑”的电脑或手机就被你操纵了 。
在CTF比赛中,pwn题通常会直接给一个已经编译好的二进制程序(通常是Linux下的ELF文件)。然后参赛选手需要对二进制程序进行分析来找到可利用的漏洞点,并编写利用代码(exp)。一般会先在本地pwn通后,再连接远程环境执行代码进行攻击,最终拿到目标机器的shell夺取flag。
Pwn方向会涉及到大量计算机底层的知识,如果你对这个方面感兴趣,想要深入计算机底层一探究竟,欢迎加入对Pwn的学习,在这里会找到你想要的~
以下内容更加偏向于计算机小白,内容若存在错误或者认为不妥的地方,麻烦与我联系我(抱拳!) 当然,如果你有任何其它想法或者遇到什么问题,也欢迎与我交流~
小企鹅号:1623093551
C语言的重要性是毋庸置疑的,他是计算机学生乃至其它专业学生接触编程的第一步。现实世界中,追求性能高效的计算机技术大多数会选择C语言进行实现。可能是由于这个原因,在CTF的pwn题中,绝大多数的程序是由C语言编写的。
B站翁恺老师的C语言听说讲得不错:https://www.bilibili.com/video/BV1XZ4y1S7e1
想要去寻找一件事物的漏洞,必然要先对该事物的构成有清楚的认识!
这个知识在pwn里面很少会直接出题考察,推荐学习的原因是该知识会对后面的学习有很大的帮助,会重塑你对计算机的理解。
这知识有一门对应的课程叫做《计算机组成原理》,但个人感觉直接按照该课程进行学习会有点偏硬件方面了。暂时不想太过深入学习的话,可以看书籍《程序是怎样跑起来的》。
(这个系列还有一本叫《计算机是怎样跑起来的》,但对于pwn入门来说,《程序是怎样跑起来的》会更加贴切。《计算机是怎样跑起来的》会宏观地阐述计算机的构成,需要的可自行阅读~)
当然,如果专业有开这门课,务必要好好学!
《程序是怎样跑起来的》链接:https://pan.baidu.com/s/1vYTl_THyQtCM8e1pySdIAw 提取码:lele
《计算机是怎样跑起来的》链接:https://pan.baidu.com/s/1zfwAN1eGMEyOxZoQYDwcIg 提取码:lele
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。
源代码到可执行程序的过程:

图中的目标汇编程序即是由汇编语言编写。汇编语言会更加地贴近机器语言,可以说是”包裹机器语言的第一层膜“。在Pwn题中,假若我们对程序的C语言代码分析不出什么,可以考虑更加深入一层,对汇编语言进行分析。这里推荐王爽老师的《汇编语言》,现在已经出第四版了。这本书将的是字长16位下的汇编语言,虽然现在都是在64位、32位下,但其作用就像C语言对整个高级编程语言一样。
注意别把汇编语言和编译原理弄混了,这是两个东西来着~
书籍:链接:https://pan.baidu.com/s/1L1iM2dH1qIbOIo6s3_UPGg 提取码:lele
学完这三门就可以考虑慢慢接触pwn题以及学习常见的漏洞利用手法了。或者如果你喜欢的话,可以先浅尝几道pwn题,了解一下这整个过程,学起来可能会更有目标性。
后期的提高可以学习《数据结构与算法》并且可以分析一些开源小项目,提高开发能力。搞安全,开发能力可不能差。再后者的话,可以学习操作系统、读内核代码去分析原理的实现等等。
下面会介绍pwn的环境搭建配置和总结pwn的学习资源。
在进行安全研究时,应该避免在真实的物理机上进行操作。
这里会先讲用到什么,再讲讲他们的作用,最后讲一下怎么去配置。
VMware:虚拟PC的一个软件;
Ubuntu 20.04:Linux操作系统;
Linux系统中需要配置的工具:
IDA Pro:Windows系统下的一个静态分析工具;
一个虚拟PC的软件或者说是平台,可以上面部署多个操作系统,用软件去模拟操作系统的硬件环境,我们会在这个上面配置Ubuntu 20.04版本的操作系统。
目前glibc(C语言的标准库)普遍版本为glibc 2.23 ~ glibc 2.36 ,其对应到Ubuntu系统版本为Ubuntu 16.04 ~ Ubuntu 22.04,经过权衡,Ubuntu 20.04最佳。
具体过程参考:https://blog.csdn.net/weixin_41805734/article/details/120698714
配置完后需要检测主机与虚拟机之间的数据传输功能是否没问题,包括文字的复制粘贴(主机是Ctrl + c/v ,虚拟机是Shift + Ctrl + c/v)和文件的复制粘贴(看看拖拽是否可以)。还要确保是否能够上网。
上面文章中VMware-tools采用的是命令行的方式,如果不可以的话,可以试试:https://blog.csdn.net/weixin_41805734/article/details/120698714
实在不行的话,可以采用共享文件夹的方式。
配好之后,可以花点时间捣鼓捣鼓Linux系统,学习一下常用的shell命令。
一个程序静态分析工具,具有强大的反汇编功能,见汇编代码反汇编成源代码。我们在分析程序的第一步就是先静态分析反汇编,分析程序的源代码,宏观上了解程序的执行过程。
网盘:链接:https://pan.baidu.com/s/1kEkm-xjDMNNudC61V-rKMg 提取码:lele
安装完后上网找教程自行学习!
这一步是最难搞的,怎么也得报几个错,所以要做好心理准备!环境的配置要时刻清楚直接在干嘛,不要一股脑的复制粘贴执行,在运行前先大概了解了执行命令是干嘛的,需不需要备份什么东西。这样子就算报错了也容易分析问题大概是什么导致的?或者有没有替代的方法?
hitcon-lab项目中安装命令:https://github.com/to-lele/HITCON-Training/blob/master/env_setup.sh
(以下命令为对该项目的安装命令的相关改进!)
在家目录创建一个Pwn-tools文件夹,在该文件右键打开终端:
# 包的更新(有的需要你确认是否安装)
sudo apt-get update
sudo apt-get upgrade
# 一些重要的模块和依赖
sudo apt-get install binutils nasm
sudo apt-get install gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install git
sudo apt-get install libc6-dbg libc6-dbg:i386
sudo apt-get install python-pip libssl-dev
sudo apt-get install gdb
sudo pip install --upgrade pip
# !(若显示找不到pip命令,则sudo apt install python3-pip进行安装)
# 还有注意区分下python2和python3的问题,python3是对python2的不兼容更新!
sudo pip install --upgrade capstone
sudo pip install ropgadget
# pwntools
sudo pip install --upgrade pwntools
# 检测:打开python, from pwn import *引入模块,没报错即可
# 还有,在终端执行checksec --help看看该工具是否已经安装
# 有的版本下,是pwntools自带的
# 没有的话:
sudo apt install checksec
# pwndbg
# 这个工具和https://github.com/scwuaptx/Pwngdb.git很像,不过个人感觉不太好用
# 按下面安装即可
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
# 检测:在终端执行命令:gdb
# 如果底部颜色花花绿绿的,带有"pwndbg>"命令指示头即可
# ROPgadget
git clone https://github.com/JonathanSalwan/ROPgadget.git
cd ROPgadget
sudo python setup.py install
# 检测:ROPgadget --help
# one_gadget
sudo apt -y install ruby
sudo gem install one_gadget
# 检测:one_gadget --help
# seccomp-tools
sudo apt install gcc ruby-dev
sudo gem install seccomp-tools
# 检测:seccomp-tools --help
# LibcSearcher
# (该工具听说有时不太准,也可以用这个网站代替:https://libc.blukat.me/ )
git clone https://github.com/lieanu/LibcSearcher.git
cd LibcSearcher
sudo python setup.py develop
# 检测:和pwntools类似,在python中from LibcSearcher import *没报错即可
#剩下的工具:glibc-all-in-one和patchelf在堆的学习才会用到
#需要的参考:https://toleleyjl.github.io/2022/10/12/%E6%9B%B4%E6%8D%A2%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6glibc%E7%89%88%E6%9C%AC%E7%9A%84%E6%9F%90%E4%B8%80%E6%AC%A1%E6%8C%A3%E6%89%8E/
当遇到问题时,可以先分析大概原因所在,不能自己解决的话,要学会利用搜索工具,上网找资料找相应的博客文章来尝试解决问题。
不要遇到解决不了的问题就自闭两三天噢!
https://ctf-wiki.org/pwn/linux/user-mode/environment/
https://www.bilibili.com/video/BV1854y1y7Ro
攻防世界:https://adworld.xctf.org.cn/challenges/list
Buuctf:https://buuoj.cn/challenges
ctfshow:https://ctf.show/challenges#
NSSCTF:https://www.ctfer.vip/problem
pwnable.tw:https://pwnable.tw/
pwnable.kr(国外):http://pwnable.kr/index.php
pwncollege:https://pwn.college/ (国外的一个pwn练习平台,听说适合新手)
FreeBuf:https://www.freebuf.com/
SecWiki:https://www.sec-wiki.com/index.php
seebug:https://paper.seebug.org/
R4bb1t师傅:https://n0va-scy.github.io/
Leof师傅:https://le0f.github.io/
e4l4师傅:https://blog.e4l4.com/
https://caffeine.darkflow.top/
还有很多没列出来,可以自行在师傅们的博客中的友链一栏进行探索。
glibc源码查看:https://elixir.bootlin.com/glibc/glibc-2.27/source/malloc/malloc.c
这个也可以,不过好像没有各种版本:https://codebrowser.dev/glibc/glibc/
pwntool的使用:https://pwntools-docs-zh.readthedocs.io/zh_CN/dev/index.html
必看书籍(个人认为):
《程序员的自我修养——链接、装载与库》
链接:https://pan.baidu.com/s/1tmSHyHHh5lWjwv4kckyy8Q 提取码:lele
CSAPP:
链接:https://pan.baidu.com/s/1GM6EpbAO9hm1Sc2utd22Wg 提取码:lele
CTF赛事时间表:https://www.ctfhub.com/#/calendar
很方便的在线编程平台:https://lightly.teamcode.com/dashboard
↶ 返回首页