Small Tricks - Vol-2026-03
Small Tricks - Vol-2026-03
用patchelf设置binary路径
使用 --set-interpreter可以设置解释器路径,--set-rpath设置搜索动态库的路径。其中$ORIGIN是一个特殊的值,意为“根据当前的目录,相对地寻找lib”. 但是注意,这个选项对于–interpreter无效。
一个错误示范:
1
2
3
4
5
6
7
8
9
10
11
12
(venv14) woc@myarch:ehaxCTF/revenge_womp $ ls .
handout handout_revenge_of_womp_womp.zip pwn
(venv14) woc@myarch:ehaxCTF/revenge_womp $ ls handout
ld.so libc.so.6
(venv14) woc@myarch:ehaxCTF/revenge_womp $ sudo patchelf --set-rpath '$ORIGIN/handout' ./pwn
(venv14) woc@myarch:ehaxCTF/revenge_womp $ sudo patchelf --set-interpreter '$ORIGIN/handout/ld.so' ./pwn
(venv14) woc@myarch:ehaxCTF/revenge_womp $ ldd ./pwn
linux-vdso.so.1 (0x00007f8599851000)
libc.so.6 => /ctf/ehaxCTF/revenge_womp/handout/libc.so.6 (0x00007f8599600000)
$ORIGIN/handout/ld.so => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f8599853000)
(venv14) woc@myarch:ehaxCTF/revenge_womp $ ./pwn
zsh: no such file or directory: ./pwn
上面错误地对interpreter设置了无效的$ORIGIN,导致其fallback到了系统路径。
正确做法:
1
sudo patchelf --set-interpreter "$(pwd)/handout/ld.so" pwn
查看libc字符串
1
strings -a ./libc.so.6 | rg 'GNU C Library|release version|glibc'
This post is licensed under CC BY 4.0 by the author.