警告
本文最后更新于 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目录 文件名
|
提示无法找到文件或者版本不正确
如果还有提示文件无法找到的
或者提示版本不正确
可以用以下命令来指定库的位置,并且会覆盖之前的位置
其中 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 的内容了。