0. PWN概述

什么是PWN?

  • 破解、利用成功(程序的二进制漏洞)
  • 攻破(设备、服务器)
  • 控制(设备、服务器)

几个简单名词:

  • exploit
    • 用于攻击的脚本与方案
  • payload
    • 攻击载荷,是对目标程序被劫持控制流的数据
  • shellcode
    • 调用攻击目标的shell代码

CTF中PWN题常见模式:

  1. 根据提供的IP及其端口,连接至目标漏洞服务器
  2. 然后根据漏洞,编写exp脚本发送payload给漏洞服务器进行攻击操作
  3. 攻击操作一般目的为调取一个shell
  4. 通过shell控制远程服务器
  5. 通常为读取远程服务器上的flag文件

[!info] 什么是Shell?
Shell 俗称壳(用来区别于核),是指为使用者提供操作界面的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。

核指的是计算机操作系统内核(Kernel),内核是管理 CPU、内存等硬件的核心软件。

Shell 是一个命令语言的同时,它也是一种程序设计语言。

作为命令语言时,它可以使用一个操作界面,交互式地解释和执行用户输入的命令。

交互式是指用户输入一个指令时,Shell 能马上提供反馈结果,Shell 可以与用户进行实时交互。

作为程序设计语言时,它支持定义各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支,并支持函数编程,给用户提供脚本编写的功能。

Shell 是操作系统最外面的一层,是文字操作系统与外部最主要的接口,管理用户与操作系统之间的交互。

Shell分为两大类:图形Shell(GUI Shell)<如windows文件管理器>和命令行Shell(CLI Shell)<如cmd、PowerShell>

[!info] 什么是Bash?
Bash是一个为GNU计划编写的Unix Shell的一种,简单来说,它就是一个命令处理器,用来执行用户输入的各种指令

现代大多数的Linux系统的Shell命令控制终端都默认为Bash,为用户提供包括交互式命令执,Shell脚本编写等功能

1. 二进制基础

1.1 程序的编译与链接

  • 编译
    • 由C语言代码生成汇编代码
  • 汇编
    • 由汇编代码生成机器码
  • 链接
    • 将多个机器码的目标文件链接成一个可执行文件

1.2 什么是可执行文件

  • 广义:文件中的数据是可执行代码的文件
    • .out、.exe、.sh、.py
  • 狭义:文件中的数据是机器码的文件
    • .out、.exe、.dll、.so

可执行文件的分类:

  • windows:PE(Portable Executable)
    • 可执行程序
      • .exe
    • 动态链接库
      • .dll
    • 静态链接库
      • .lib
  • Linux:ELF(Executable and Linkable Format)
    • 可执行程序
      • .out
    • 动态链接库
      • .so
    • 静态链接库
      • .a

2. ELF文件格式

  • header 1
    • ELF header:记录整个ELF文件的结构分布
    • Program Header table:记录一些段信息

      [!info] 段视图与节视图

      • 段视图:程序加载到内存一个成为进程中来进行读写执行权限划分的视图
      • 节视图:ELF文件存放在磁盘中进行不同功能区域划分的识图
  • sections(节)
    • Code:以机器码的形式存储的多块ELF文件分区,对应不同的功能,划分为不同的代码节
    • Data:记录数据节,根据不同功能划分,不可被执行
    • Sections’ names:段表,记录各个节的节名

      [!note]
      用户定义机器码对应的代码节是.text
      用来进行动态链接、实际地址解析的代码节是.plt

  • header 2
    • Section Header table:记录节的信息

不同的节功能不同但是作用相同,因此同属于一个段,段是加载成为进程后起作用的