pwn速查手册(长期更新)

文章目录

  • 前言
  • 一、一般程序结构
  • 二、checksec
    • RELRO
    • Stack
    • NX
    • PIE
    • Fortify
    • Debuginfo
    • Stripped
    • Symbols
    • SHSTK
    • IBT
  • 三、系统调用
    • 1、系统调用名与系统调用号查询
    • 2、系统调用参数查询
    • 3、系统调用参数顺序
    • 4、常用系统调用
  • 四、ShellCode
    • 快速生成

前言

有很多琐碎的东西,常用又难记,停用一段时间又容易忘,放在哪一篇文章里都不好查,所以专门开一篇用于记录和查阅。随学习进度长期更新。


一、一般程序结构

pwn速查手册(长期更新)_第1张图片

二、checksec

RELRO

Relocations Read-Only。控制 GOT(全局偏移表)是否可写,防止 GOT 覆盖攻击。

说明
Full RELRO GOT 表完全不可写(只读),需在链接时启用 -Wl,-z,relro,-z,now
Partial RELRO GOT 表部分不可写(部分条目可写),需在链接时启用 -Wl,-z,relro
No RELRO GOT 表完全可写,无保护

Stack

栈保护,检测是否启用了栈溢出保护

说明
Canary found 启用栈保护(编译器选项 -fstack-protector)
No canary found 未启用栈保护

NX

不可执行堆栈。控制堆栈和堆内存是否可执行,防止 shellcode 注入。

说明
NX enabled 堆栈不可执行(依赖硬件支持,如 Intel 的 XD 位)
NX disabled 堆栈可执行(危险)

PIE

地址空间布局随机化。程序的加载地址是否随机化(Position Independent Executable)

说明
PIE enabled 启用 PIE(编译时使用 -fPIE,链接时使用 -pie)
No PIE 未启用 PIE(基地址固定)

Fortify

库函数保护。检测是否启用了 Fortify Source(编译器增强的库函数保护,如 __fgets_chk 替代 fgets)

说明
Yes 启用 Fortify(编译时使用 -D_FORTIFY_SOURCE=2)
No 未启用 Fortify

Debuginfo

编译器在生成二进制文件时插入的调试信息,用于帮助调试器(如 GDB)定位源代码与机器指令的对应关系。编译时使用-g。

Stripped

指的是通过工具(如 strip)从二进制文件中移除调试信息,以减小文件体积或防止逆向工程。剥离后,二进制文件不再包含符号表、源码路径等信息。

Symbols

符号表。二进制文件是否保留调试符号(如函数名、变量名、类型信息等)。可以将内存地址映射为可读的函数名或变量名。

SHSTK

Intel CET(Control-flow Enforcement Technology) 的核心组件之一。通过在硬件层维护一个 影子栈(Shadow Stack)来保护控制流的完整性。影子栈记录函数调用的返回地址,独立于主栈,并在函数返回时验证返回地址是否合法。

IBT

Intel CET(Control-flow Enforcement Technology) 的核心组件之一。通过跟踪间接跳转(如 call 或 jmp 指令)的目标地址,确保这些跳转只能指向合法的代码位置(如函数入口点),防止攻击者利用间接跳转执行恶意代码。


三、系统调用

1、系统调用名与系统调用号查询

  • github 查看 Linux 源码
  • Linux 内查询:
    x86架构:
    cat /usr/include/asm/unistd_32.h
    
    x86_64架构:
    cat /usr/include/asm/unistd_64.h
    

2、系统调用参数查询

man 2 <syscall>

syscall 表示要查询的系统调用

3、系统调用参数顺序

x86:

参数序号 使用寄存器
1 eax
2 ebx
3 ecx
4 edx
5 esi
6 edi

x86_64:

参数序号 使用寄存器
1 rax
2 rdi
3 rsi
4 rdx
5 r10
6 r8
7 r9

4、常用系统调用

系统调用名 功能 x86调用号 x86_64调用号
read 读取文件或标准输入 3 0
write 写入到标准输出或文件 4 1
open 打开文件 5 2
close 关闭文件 6 3
execve 执行新程序 11 59
mmap 内存映射区域申请 90 9
fork 进程赋值机制 2 57

四、ShellCode

快速生成

  • pwntools生成:
    from pwn import *
    shellcode = asm(shellcraft.sh())
    
    需要在全局配置设置架构和系统信息
  • msf生成:
    msfvenom -p <os>/<bit>/exec cmd=<command> -f <format>
    
    os 表示操作系统,例如 linuxwindows
    bit 表示位数,例如 x86x64
    command 表示要执行的命令,linux用 /bin/bash,windows用 cmd
    format 输出格式,常用 hexcpython
    更具体的可以使用 -h 选项查阅。

你可能感兴趣的:(pwn速查手册(长期更新))