用给定的libc进行调试

  • 首先根据题目给你的libc,查找相应版本的连接器

    在这里插入图片描述

  • 然后去glibc-all-in-one中下载相应的ld文件

    • glibc-all-in-one安装步骤

      https://github.com/matrix1001/glibc-all-in-one
      
    • 使用

      • 查看各unbuntu版本的glibc

        ./update_list
        cat list
        

        在这里插入图片描述

      • 下载对应版本的glibc

        ./download 2.27-3ubuntu1_amd64
        

        在这里插入图片描述

      • 下载好的glibc在lib文件夹中

        在这里插入图片描述

      • 然后复制ld文件到pwn题目录下,此命令我是在题目终端下执行的,题目文件夹下面应该有这三个文件

        cp ~/ctf2021/tools/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/ld-2.27.so ./ld-2.27.so
        

        在这里插入图片描述

  • 有了libc文件和ld文件,就可以使用patchelf,修改pwn文件的执行环境

    • patchelf安装,可以直接下载realse版本

      https://github.com/NixOS/patchelf
      
    • 查看,pwn原本的libc和ld

      ldd ldd Mynote_Max
      

      在这里插入图片描述

更新!这里需要生成符号连接然后再patchelf!【2021/9/26】

  • 可以直接对源文件操作
sudo ln ld-2.26.so /lib64/ld-2.26.so
#然后设置解释器和libc,这样就能进行debug
#设置解释器
patchelf --set-interpreter /lib64/ld-2.26.so ./gundam
#设置libc
patchelf --replace-needed libc.so.6 ~/2.26-0ubuntu2_amd64/libc-2.26.so ./gundam
  • 也可以直接在exp启动的时候操作
p = process(['/home/xuehuzhou/2.27-3ubuntu1_amd64/ld-2.27.so', './gundam'], env={"LD_PRELOAD":'/home/xuehuzhou/2.27-3ubuntu1_amd64/libc.so.6'})
  • 替换libc文件

    patchelf --replace-needed libc.so.6 ./libc-2.27.so ./Mynote_Max
    -------------------------原本的libc----要替换的libc-----pwn文件       
    

    在这里插入图片描述

  • 设置ld文件

    patchelf --set-interpreter ./ld-2.27.so ./Mynote_Max
    ---------------------------对应的ld文件----pwn文件
    

    在这里插入图片描述

  • 执行一下文件,应该是可以运行的,如果不行,很可能是ld与libc不对应,也可能是ld和libc没有执行权限

    在这里插入图片描述

最后,如果想用gdb进行调试,显示一些堆栈格式的话,需要在gdb中设置debug文件夹

  • 不设置的话会出现如下的问题

    在这里插入图片描述

  • glibc-all-in-one中复制.debug文件夹到题目目录中

    cp -r ~/ctf2021/tools/glibc-all-in-one/libs/2.27-3ubuntu1_amd64/.debug/ ./debug
    
  • 在gdb中设置debug file,就能正常使用gdb的功能了

    set debug-file-directory debug/
    

    在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐