MENU

patchelf 的几种用法

November 27, 2021 • Read: 1962 • Pwn,CTF

替换的必要性

在做题的时候能够保证本地的版本和远程一致非常重要,和远程一致可以保证不修改脚本也能进行攻击远程。不过还是要注意 libseccomp.so.2 这个文件,如果使用了这个文件来开保护沙箱,那么会在程序中创建各个堆块,这可能会导致远程和本地的堆空间的布局不一致。

几种用法

根据 patchelf 的提示,应该具有以下几种功能

syntax: patchelf
  [--set-interpreter FILENAME]
  [--page-size SIZE]
  [--print-interpreter]
  [--print-soname]        Prints 'DT_SONAME' entry of .dynamic section. Raises an error if DT_SONAME doesn't exist
  [--set-soname SONAME]        Sets 'DT_SONAME' entry to SONAME.
  [--set-rpath RPATH]
  [--add-rpath RPATH]
  [--remove-rpath]
  [--shrink-rpath]
  [--allowed-rpath-prefixes PREFIXES]        With '--shrink-rpath', reject rpath entries not starting with the allowed prefix
  [--print-rpath]
  [--force-rpath]
  [--add-needed LIBRARY]
  [--remove-needed LIBRARY]
  [--replace-needed LIBRARY NEW_LIBRARY]
  [--print-needed]
  [--no-default-lib]
  [--clear-symbol-version SYMBOL]
  [--output FILE]
  [--debug]
  [--version]
  FILENAME...

替换 libc 为 glibc-all-in-one 中的 libc

patchelf --set-interpreter libs目录下的ld文件 --set-rpath libs目录 文件名

提示无法找到文件或者版本不正确

如果还有提示文件无法找到的

image.png

或者提示版本不正确

image.png

可以用以下命令来指定库的位置,并且会覆盖之前的位置

其中 lib/x86_64-linux-gnu/liblua5.3.so.5.3 为文件所在的位置

patchelf --add-needed lib/x86_64-linux-gnu/liblua5.3.so.5.3 pwn

还原修改

还原以上的修改,可以用以下命令

patchelf --shrink-rpath pwn

其他

待补充

注意

使用 patchelf 替换后源文件会被修改,所以需要注意备份文件。其次这个文件所指向的链接库位置如果在其他电脑上没有,那么就会运行错误。有些比赛可能题目拿来无法运行,可能就是因为出题人忘记还原 patchelf 的内容了。

Last Modified: October 8, 2022
Archives QR Code
QR Code for this page
Tipping QR Code