ldd 安全问题 | 更换链接器

转:https://blog.csdn.net/kwuwei/article/details/24721281
转:https://blog.csdn.net/buaa_shang/article/details/8929077

ldd介绍

ldd本身不是一个程序,而仅是一个shell脚本

$ file /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script text executable

ldd命令其实是依靠设置一些环境变量而实现的(也就是说ldd的作用只是设置一些环境变量的值)
如:LD_TRACE_LOADED_OBJECTS
只要设置其值非空即可。

$ export LD_TRACE_LOADED_OBJECTS=1
$ ls /usr
linux-gate.so.1 =>  (0xb7fac000)
/lib/ld-linux.so.2 (0xb7fad000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7df0000)

撤销该环境变量,ls即又可以恢复正常使用:

$ unset LD_TRACE_LOADED_OBJECTS
$ ls  /usr/
bin  games  include  lib  lib32  lib64  local  sbin  share  src  X11R6

例如: 执行ldd /bin/ls
ldd 在执行的时候,首先是设置LD_TRACE_LOADED_OBJECTS 环境变量,然后调用ld-linux.so.2链接器,去输出ls文件的依赖
如果我们直接运行 /lib/ld-linux.so.2 /bin/ls 可以发现ls是执行成功的。
也就是说当执行ld-linux.so.2时候,它会先判断LD_TRACE_LOADED_OBJECTS有没有被设置,如果有,就输出依赖关系,如果没有,就执行命令本身

问题

如果我们更换一个链接器,让链接器不对LD_TRACE_LOADED_OBJECTS环境变量做判断,无论什么时候都执行命令本身,那么此时的ldd命令就有很大的风险了
具体例子看这个:https://blog.csdn.net/buaa_shang/article/details/8929077

更换链接器

-Wl,–dynamic-linker,$L/lib/ld-uClibc.so.0 — 指定一个新的装载器。

linux@Ubuntu1:~/app/test$ mips-linux-gnu-gcc test.c -Wl,--dynamic-linker,/mylib/ld-hello.so
linux@Ubuntu1:~/app/test$ mips-linux-gnu-ldd a.out 
checking sub-depends for 'not found'
	libc.so.6 => not found (0x00000000)
	/mylib/ld-hello.so => /mylib/ld-hello.so (0x00000000)
linux@Ubuntu1:~/app/test$ 

观察到,elf文件的链接器已经变了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_kerneler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值