PWN栈溢出段错误的坑

在PWN(exploit writing)过程中,使用GDB调试时可能会遇到段错误,原因在于调试程序和直接运行程序时环境变量的差异导致栈上局部变量地址变化。解决方案包括使用gdb的环境变量操作命令、通过env设置调试环境,以及利用wrapper程序控制传递给调试进程的环境变量,确保地址一致性。
摘要由CSDN通过智能技术生成
  • Author:ZERO-A-ONE
  • Date:2021-03-30

一、开头

相信很多PWNer/Biner在写EXP的时候都会遇上一个令人很抓狂的问题,就是自己明明在GDB里面调试得出的地址,经过自己十分精确的计算,一阵猛写EXP,打!然后进过一连串的跳动的命令行后,激动的开始准备夺取shell,然后,然后,segment fault(core dump),哦豁段错误,GG

这个是因为什么问题呢,其本质是因为正常程序运行时,会将环境变量字符串数组和命令行参数字符串数组存放在栈顶,而程序使用的局部变量等数据则位于这些字符串数组之后。环境变量字符串数组记录了诸如当前用户名、终端类型、搜索路径等环境信息

  • 程序直接运行时,程序进程继承的是运行其的shell的环境变量,
  • 程序通过gdb运行时,程序进程继承的是gdb的环境变量

这两者存在不同,从而会造成位于栈上的局部变量的地址发生改变。用户可在gdb中运行show environment命令获得环境变量参数

较之程序直接运行,通过GDB调试位于栈顶的环境变量主要有以下变化:

  • _环境变量的内容发生改变,在程序直接运行时,_变量存放的是程序的执行路径,而通过gdb运行程序时,_变量存放的是gdb的执行路径
  • 通过 gdb 运行的调试程序继承了 gdb 的环境变量,其中包含新加入的
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值