GDB指北

GDB - 调试利器

官方文档:(Debugging with GDB) (sourceware.org)

多看文档 动手实践 积累记录!

必备插件:

  • pwndbg (功能丰富,接口友好,依赖较多)
  • Pwngdb (基于 pwndbg 开发, 常用)
  • gef (一个文件 依赖少)
  • peda (经典插件 依赖少)
  • gdb-dashboard (适合单独调试,IOT 设备)

调试组合推荐:

  • pwndbg + Pwngdb : 适用于 userland pwn
  • gef + Pwngdb : 适用于 qemu/kernel pwn

GDB- 基本认识:

GDB 命令

  • 运行
  • 步入、步过、步出、步止
  • 断点(设置、删除、显示)
  • 查看内存、寄存器、各种参数
  • 设置内存、寄存器、各种参数、加载文件
  • 远程调试
  • 其他辅助

如果没有插件时好用的命令:

查看寄存器:i r

常用功能:

  1. 断点、临时断点、条件断点、断点忽略
  2. 观察点(watchpoint)、捕捉系统调用(catchpoint)
  3. 信号处理
  4. 多进程调试
  5. 多线程调试
  6. 日志记录

寄存器

在 gdb 中查看: i r

步入/步过/步出/步止

  1. 步过:一行一行的往下走,不会进入到其他方法的内部 next nexti(配合finish使用)
  2. 步入:如果当前行有方法执行,可以进入方法的内部(不会进入官方定义的方法,仅能进入自定义的方法 step stepi
  3. 步出:从步入的方法内执行完该方法,然后退出到方法调用处。finish

断点

b main

查看/设置 内存

x | p | set

字节大小
BYTE 1  8  缩写b
WORD 2  16  缩写h
DWORD 4  32  缩写w
QWORD 8  64  缩写g

x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。

查看汇编:x/20i $rip
查看内存:x/20gx 0x7fxx10 x/20wx 0x7fxx10
查看字符:x/20s 0x7fxx20
查看变量:p __malloc_hookp &__malloc_hook
赋值: set *0x7fxx1 = 1set $rax = 1set *((unsigned int)$ebp) = 0x61


dq | dd | dw | db

dq 0x8048123

TMUX - 分屏复用

官方文档: https://man7.org/linux/man-pages/man1/tmux.1.html

tmux 使用手册: http://louiszhai.github.io/2017/09/30/tmux/#导读

~/.tmux.conf 文件配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
set-option -g mouse on

unbind C-b
bind C-a send-prefix
set-option -g prefix2 `
unbind '"'
bind - splitw -v -c '#{pane_current_path}' # 垂直方向新增面板,默认进入当前目录
unbind %
bind = splitw -h -c '#{pane_current_path}' # 水平方向新增面板,默认进入当前目录

# 绑定hjkl键为面板切换的上下左右键
bind -r i select-pane -U # 绑定k为↑
bind -r k select-pane -D # 绑定j为↓
bind -r j select-pane -L # 绑定h为←
bind -r l select-pane -R # 绑定l为→

windows terminal +tmux 鼠标选中后 按下 C-v 即可复制

tmux 分屏复用功能:

1
tmux send-keys -t 1:0.1 "date" Enter

反编译工具 IDA/Ghidra/jeb

IDA 帮助文档:

https://hex-rays.com/ida-pro/

Ghidra 帮助文档:https://ghidra-sre.org/

Jeb: https://www.pnfsoftware.com/

IDA

https://www.pediy.com/kssd/pediy12/ida.html 古老经典教程

IDA 常用快捷键

下断点的方式

远程调试 (idaserver)

docker

dokcer 的应用与实践:http://yeasy.gitbook.io/docker_practice/

  • pwndocker
  • debug_pwn_env

必备工具

checksec : 检查安全编译选项

libc-database : 详情查看它的 readme, 在百度网盘中已备份

ROPgadget/ropper: 寻找 gadget

[在线编译 Assembler]:https://defuse.ca/online-x86-assembler.htm

(找 syscall;ret gadget => 在 vscode 里搜索 0F05)

one_gadget: 特殊的 gadget, 一键 shell 的返回地址 (多加-l 2

seccomp-tools: 查看程序的沙箱/输出沙箱 C

glibc-all-in-one: 多版本 libc

patchelf: 改变程序链接库、装载库的路径(路径越短越好)

readelf: 分析 ELF 程序的工具

objdump: 分析二进制文件的工具

heaptrace/gef-tracemalloc : 用于定位堆的申请与释放

  • 程序混淆严重
  • 非 C/C++程序
  • 容器
  • ….

Decomp2dbg- 与 IDA 联动:

  • p /x $v8
  • tele 0x555555ed20

pwnpatch:

dl_dbgsym : 可弃用 glibc-all-in-one

pwninit :

alpha3: 用字母写 shellcode

GTFObins: 提权


GDB指北
https://k3ppf0r.github.io/2022/05/03/基础/GDB指北/
作者
k3ppf0r
发布于
2022年5月3日
许可协议