Pwn 从入门到入坟

2022-10-10
  1. 0x00:pwn介绍
  2. 0x01:前置知识
  3. 0x02:Pwn环境搭建配置
  4. 0x03:Pwn资源汇总

0x00:pwn介绍

“Pwn”是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似”砰”,对黑客而言,这就是成功实施黑客攻击的声音–砰的一声,被”黑”的电脑或手机就被你操纵了 。

在CTF比赛中,pwn题通常会直接给一个已经编译好的二进制程序(通常是Linux下的ELF文件)。然后参赛选手需要对二进制程序进行分析来找到可利用的漏洞点,并编写利用代码(exp)。一般会先在本地pwn通后,再连接远程环境执行代码进行攻击,最终拿到目标机器的shell夺取flag。

Pwn方向会涉及到大量计算机底层的知识,如果你对这个方面感兴趣,想要深入计算机底层一探究竟,欢迎加入对Pwn的学习,在这里会找到你想要的~

以下内容更加偏向于计算机小白,内容若存在错误或者认为不妥的地方,麻烦与我联系我(抱拳!) 当然,如果你有任何其它想法或者遇到什么问题,也欢迎与我交流~

小企鹅号:1623093551


0x01:前置知识

C语言:

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)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。

源代码到可执行程序的过程:

puc01

图中的目标汇编程序即是由汇编语言编写。汇编语言会更加地贴近机器语言,可以说是”包裹机器语言的第一层膜“。在Pwn题中,假若我们对程序的C语言代码分析不出什么,可以考虑更加深入一层,对汇编语言进行分析。这里推荐王爽老师的《汇编语言》,现在已经出第四版了。这本书将的是字长16位下的汇编语言,虽然现在都是在64位、32位下,但其作用就像C语言对整个高级编程语言一样。

注意别把汇编语言和编译原理弄混了,这是两个东西来着~

书籍:链接:https://pan.baidu.com/s/1L1iM2dH1qIbOIo6s3_UPGg 提取码:lele


后言:

学完这三门就可以考虑慢慢接触pwn题以及学习常见的漏洞利用手法了。或者如果你喜欢的话,可以先浅尝几道pwn题,了解一下这整个过程,学起来可能会更有目标性。

后期的提高可以学习《数据结构与算法》并且可以分析一些开源小项目,提高开发能力。搞安全,开发能力可不能差。再后者的话,可以学习操作系统、读内核代码去分析原理的实现等等。

下面会介绍pwn的环境搭建配置和总结pwn的学习资源。


0x02:Pwn环境搭建配置

在进行安全研究时,应该避免在真实的物理机上进行操作。

这里会先讲用到什么,再讲讲他们的作用,最后讲一下怎么去配置。

VMware:虚拟PC的一个软件;

Ubuntu 20.04:Linux操作系统;

Linux系统中需要配置的工具:

IDA Pro:Windows系统下的一个静态分析工具;


VMware + Ubuntu 20.04:

一个虚拟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命令。


IDA Pro:

一个程序静态分析工具,具有强大的反汇编功能,见汇编代码反汇编成源代码。我们在分析程序的第一步就是先静态分析反汇编,分析程序的源代码,宏观上了解程序的执行过程。

网盘:链接:https://pan.baidu.com/s/1kEkm-xjDMNNudC61V-rKMg 提取码:lele

安装完后上网找教程自行学习!


Linux上的工具配置:

这一步是最难搞的,怎么也得报几个错,所以要做好心理准备!环境的配置要时刻清楚直接在干嘛,不要一股脑的复制粘贴执行,在运行前先大概了解了执行命令是干嘛的,需不需要备份什么东西。这样子就算报错了也容易分析问题大概是什么导致的?或者有没有替代的方法?

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/

当遇到问题时,可以先分析大概原因所在,不能自己解决的话,要学会利用搜索工具,上网找资料找相应的博客文章来尝试解决问题。

不要遇到解决不了的问题就自闭两三天噢!


0x03:Pwn资源汇总

CTF Wiki —— Pwn初中期学习路线:

https://ctf-wiki.org/pwn/linux/user-mode/environment/


一个B站视频,很适合入门:

https://www.bilibili.com/video/BV1854y1y7Ro


IT业博客平台:

博客园:https://www.cnblogs.com/

CSDN:https://www.csdn.net/


Pwn刷题网站:

攻防世界: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练习平台,听说适合新手)


安全社区:

安全客:https://www.anquanke.com/

看雪:https://www.kanxue.com/

跳跳糖:https://tttang.com/

FreeBuf:https://www.freebuf.com/

SecWiki:https://www.sec-wiki.com/index.php

seebug:https://paper.seebug.org/


大佬博客:

Ex师傅:http://blog.eonew.cn/

R4bb1t师傅:https://n0va-scy.github.io/

Leof师傅:https://le0f.github.io/

e4l4师傅:https://blog.e4l4.com/

https://www.z1r0.top/

https://ray-cp.github.io/

https://x3h1n.github.io/

https://a1ex.online/

https://ch4r1l3.github.io/

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

返回首页