patchelf 的几种用法

警告
本文最后更新于 2022-10-08,文中内容可能已过时。

替换的必要性

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

几种用法

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

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

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

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

image.png

或者提示版本不正确

image.png

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

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

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

还原修改

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

1
patchelf --shrink-rpath pwn

其他

待补充

注意

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

0%