Post

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.