github blog addr
文章目录
Pwn从入门到入狱
Copyright © 2020 arttnba3,XDSEC
FOR BETTER READING EXPERIENCE, CLICK HERE
简介:什么是Pwn?
Pwn这个词本身其实是一个拟声词,最初来源于黑客们设想中的完全获取一台设备的控制权后便会发出“砰”的一声,Pwn因此而得名,即利用挖掘到的二进制漏洞对设备或系统发起攻击,并最终拿到shell(获取控制权)
Pwn也是最能代表原教旨主义黑客的一个安全研究方向同时也是最容易进监狱的一个方向
预备知识
作为二进制安全的分支之一,Pwn需要你熟练掌握如下基础知识:
- 主流平台汇编语言,包括但不局限于X86、MIPS等
- C语言
- 计算机组成原理
- 计算机操作系统
- 静态分析(IDA)&动态调试(GDB)
- Python
- 编译原理
- …
看完你可能会感觉有一丶丶头大,不过少有人是先把计科专业本科的内容全部学完才开始学pwn的,大家都是一边比赛一边学习的,所以不用担心因为自己0基础导致无法入门的情况的发生
CTF TO LEARN, NOT LEARN TO CTF
Pwn的解题过程?
- 题目的二进制文件一般会被部署到服务器上,使用
nc xx.xx.xx.xx(ip) xxxx(端口)
命令可以与服务器进行交互。并且该二进制文件的副本(与服务器上的完全相同或者基本相同)将作为附件形式被提供给选手下载。 - 你需要逆向分析二进制文件副本中存在的可利用漏洞,针对其编写
Exploit
(漏洞利用脚本),然后向服务器发起攻击,拿到服务器上保存的flag文件或字符串
,将其提交至本平台。 - 注意命令行中的
nc
并不是做题工具,你需要在Linux下安装pwntools
库(或者其它),用于编写可用性较高的Exploit
。至于如何安装,如何使用,就需要聪明的你发挥自己的学习能力啦~
0基础入门:新人的第一个安全漏洞的利用——栈溢出——ret2text
前置知识要求:
- C语言基本语法
- Python语言基本语法
能大致看得懂C程序、有写简单的Python程序的能力即可
前置环境要求:
Windows
Linux
我们的一部分工作需要在Windows上完成,另一部份工作则需要在Linux中完成
你可以在windows上运行Linux虚拟机,也可以直接在真机运行linux
注:linux环境下由于默认的远程软件库是国外的源,下载速度可能会比较慢
百度“Linux 换源”与“pip 换源”更换Linux下的软件源为国内的软件源,提高下载速度
不同的Linux发行版本(如Ubuntu、Kali、manjaro等)请自行将搜索框内的“linux”换为对应的发行版名称
以下内容将通过几个样例简单地帮助你入门Pwn
以下内容操作环境位于Linux:
我们现在来看这样的一个程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
void backdoor(void)
{
system("/bin/sh");
}
void func(void)
{
char str[20];
puts("tell me your name plz:");
gets(str);
}
int main(void)
{
func();
}
我们使用-fno-stack-protector
、