pwndbg常用命令
一、基础调试命令(继承 GDB 核心,增强体验)Pwndbg 兼容大部分 GDB 基础命令,且优化了输出格式(如高亮指令、显示寄存器值),核心基础命令如下: 命令 功能说明 run/r [args] 启动程序(可带命令行参数),支持 r < payload 直接输入 payload。 start 程序启动后停在 main 函数入口(比 run 更适合快速定位主逻辑)。 continue/c 继续运行程序,直到下一个断点或程序结束。 next/n 单步执行(跳过函数调用,“逐行” 执行)。 step/s 单步执行(进入函数调用,“逐指令” 执行,适合跟踪子函数逻辑)。 finish 执行完当前函数并返回上一层(退出当前函数上下文)。 until/u [addr] 运行到指定地址 / 当前函数结束(避免逐步执行循环,直接跳至目标位置)。 break/b [addr/sym] 设置断点(支持地址 b 0x401000、函数名 b main、符号 b printf)。 tbreak/tb [addr] 临时断点(触发一次后自动删...
IDA与GDB中地址的区别
一、IDA 中看到的地址:静态分析的 “偏移基准”IDA 是静态反编译工具,显示的地址是基于 ELF 文件本身的虚拟地址(VA) 或相对偏移(RVA)(取决于程序是否开启 PIE 保护),核心作用是: 1. 定位关键函数 / 数据的 “偏移值” 找到漏洞函数(如gets/scanf/strcpy等危险函数)的位置,确定缓冲区溢出的偏移(比如栈上返回地址距离输入点的字节数)。 找到核心目标地址:比如system函数、/bin/sh字符串、main函数、exit函数等在程序 /libc 中的偏移(而非实际地址)。 找到 ROP gadget 的偏移:IDA 可以通过 ROPgadget 插件或手动查找各类指令片段(如pop rdi; ret)的偏移,这是构造 ROP 链的基础。 2. 识别程序的保护机制与内存布局 看程序的加载基址:如果 IDA 中.text段起始地址是0x08048000(32 位)或0x400000(64 位),说明程序未开启 PIE(位置无关执行),IDA 地址就是固定的;如果起始地址是0x00000000,说明开启了 ...
Linux 常用命令
一、Linux常用指令1. 基础文件操作这些命令用于浏览、查看和管理文件,是分析题目附件的基础。 命令 功能说明 示例或备注 ls 列出目录内容 ls -la显示详细文件信息(包括隐藏文件) cd 切换当前工作目录 cd /tmp cat 查看文件内容 常用于直接读取flag:cat flag或 cat /home/ctf/flag.txt find 查找文件 find / -name "pwn" 2>/dev/null在根目录下查找名为 “pwn” 的文件(忽略错误信息) grep 在文件中搜索特定字符串 grep -r "flag{" ./在当前目录递归搜索包含 “flag{“ 的文件 `strings binary \ file 查看文件类型 file pwn_binary判断文件是 ELF32 还是 ELF64,以及是否 stripped objdump 反汇编二进制文件 `objdump -d ./pwn_binary \ readelf 显示 ELF ...
PLT & GOT
PLT(过程链接表)属于代码段(.text 相关节),GOT(全局偏移表)属于数据段(.data/.bss 相关节) —— 这个分段设计是动态链接机制的核心基础,也直接决定 Pwn 攻击的核心思路(比如为什么能劫持 GOT 而不能直接劫持 PLT)。 结合 CTF Pwn 视角,我们深入拆解这个设计的「本质原因」和「攻击关联」: 一、先明确:代码段 vs 数据段的核心差异(Pwn 关键)ELF 文件的段(Segment)是操作系统加载内存时的权限控制单位,核心差异在于 权限属性 和 用途,这直接影响漏洞利用的可行性: 段类型 核心权限 典型节(Section) 用途 Pwn 相关性 代码段(Text Segment) 只读 + 可执行(RX) .text(程序自身代码)、.plt(PLT 表) 存储可执行指令(CPU 能直接运行的代码) 不可写 → 无法直接修改 PLT 指令,只能通过「跳转目标劫持」(如 GOT) 数据段(Data Segment) 可读 + 可写(RW) .data(初始化全局变量)、.bss(未初始化全局变量)、.got.plt(GOT 表)...
pwndbg中测量栈长度
前提:在ida中看过了程序的大致运行逻辑,找到进程的输入1 . 使用gdb运行程序。2 . 在main函数打断点,b main3 . 不断n直到运行到输入函数如read等函数4 . 在此处打断点,b *$pc5 . cyclic 200 生成规律数据,并复制6 . c 继续运行程序7 . 将规律数据填粘贴在输入框中8 . 查看栈信息,复制EBP处的值9 . 用下面语句获得栈长度,加上ebp的 4 , 以及rbp 的 8 得到栈偏移。 1cyclic -l EBP
pwntools常用脚本语句
接收远端传来的数据123456789101112131415interactive() : 在取得shell之后使用,直接进行交互,相当于回到shell的模式。recv(numb=字节大小, timeout=default) : 接收指定字节数。recvall() : 一直接收直到达到文件EOF。recvline(keepends=True) : 接收一行,keepends为是否保留行尾的\n。recvuntil(delims, drop=False) : 一直读到delims的pattern出现为止。recvrepeat(timeout=default) : 持续接收直到EOF或timeoutpayload = flat([变量1,变量2,变量n]) 将多个变量转换为二进制字符串 接收远端传来的数据123456789send(data) : 发送数据。sendline(data) : 发送一行数据,相当于在数据末尾加\n。sendlineafter("字符串",data) : 在这一串字符串结束之后发送数据send 和 sendline 的区别是: send...






