本文主要是介绍PWN入坑指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
CTF的PWN题想必是很多小伙伴心里的痛,大多小伙伴不知道PWN该如何入门,不知道该如何系统性学习
0x01开篇介绍
PWN 是一个黑客语法的俚语词 ,是指攻破设备或者系统 。发音类似"砰",对黑客而言,这就是成功实施黑客攻击的声音--砰的一声,被"黑"的电脑或手机就被你操纵了 。
斗哥认为解决PWN题就是利用简单逆向工程后得到代码(源码、字节码、汇编等),分析与研究代码最终发现漏洞,再通过二进制或系统调用等方式获得目标主机的shell 。
0x02 解题步骤
1. 逆向工程:
逆向是PWN解题的第一步,但不是PWN题的重点。所以只要知道简单的逆向工具的使用步骤。最终目的是得到代码(源码、汇编等)。
掌握工具:
IDA Pro
2. 分析代码:
分析代码步骤也就是漏洞挖掘,这是PWN解题最重要的一步。
对逆向工程的结果进行静态分析或对程序进行动态调试,找出程序中存在的漏洞。大多数PWN题都存在常见的漏洞 。
掌握工具:
静态分析:IDA Pro
动态调试:gdb(with peda or gef)、windbg、ollydbg
掌握技能:
1. C语言:变量声明、常见函数的使用、熟悉常见漏洞函数等
2. 汇编语言:程序执行、函数栈帧、函数调用等
3.漏洞利用:
根据分析代码步骤得出的漏洞点,使用漏洞利用方式对漏洞进行利用,编写初步的exp。
掌握工具:
pwntools、zio
掌握技能:
1. 熟悉程序各种保护机制的绕过方式
2. 掌握ELF文件基本概念
3. 熟悉Linux系统如何加载ELF程序
4. getshell:
到了getshell步骤 ,PWN题基本已经解出来了,把我们漏洞利用步骤的exp替换成获取系统shell的code形成最终exp,就可以拿到主机的shell权限获取flag。
分两种情况:
(1) 内存程序中有getshell函数或指令时,直接调用/劫持。
(2) 存程序中没有getshell函数或指令时, 就要编写shellcode。
getshell函数如:system("/bin/sh")
掌握工具:
pwntools、zio
掌握技能:
1. 系统调用方式
2. 学习shellcode基本原理
3. 学习如何编写shellcode
4. 学习plt & got表在程序运行时的功能
0x03 常见的漏洞介绍
在分析代码步骤时,有些漏洞是经常出现,所以我们应该事先了解常见的漏洞,这样可以让我们在分析代码时事半功倍。
下面斗哥简单列举一些漏洞,相关漏洞的详细介绍可以到Wiki学习。
1. 缓冲区溢出:
缓冲区溢出包括:堆溢出、栈溢出、bss溢出、data溢出。这些溢出通常覆盖指针,造成程序执行劫持。其中栈溢出是出题最多的一个缓冲区溢出漏洞,也是斗哥PWN系列文章的重点。
2. 整数溢出:
整数溢出通常是指:无符号型与有符号的转换 、整数加减乘除法。整数溢出通常会进一步转换为缓冲区溢出、逻辑漏洞等其他漏洞。
3. 格式化字符串:
格式化字符串通常是指:程序使用printf(s),sprintf(s),fprintf(s)等函数格式字符且未作任何处理。可能导致任意地址读写 、泄露函数地址。
4. 逻辑漏洞:
逻辑漏洞主要形成原因是程序访问时,或者处理数据不当而引发的漏洞。主要漏洞有访问控制,协议漏洞,条件竞争等。
0x04 小小总结
主要介绍PWN的解题步骤和每个步骤需要学习的工具与知识点,以及常见漏洞介绍
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取
读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)
同时每个成长路线对应的板块都有配套的视频提供:
大厂面试题
视频配套资料&国内外网安书籍、文档
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)
特别声明:
此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。
这篇关于PWN入坑指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!