您的位置:首页 > 其它

【小镇的技术天梯】教你做黑客!LD_PRELOAD环境变量!

2016-02-24 11:13 821 查看
小镇今天要带大家来当一把黑客!告诉大家如何通过修改LD_PRELOAD变量来攻击服务器的。


【友情提醒:只是模拟一下而已,实际难度要大很多,而且这篇文章也是别的论坛上面看过来的,因为这个也是学习strace所需要了解的知识】

LD_PRELOAD这个环境变量是用来程序链接的。

【在linux的动态链接库中,它就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime
linker),它允许你定义在程序运行前优先加载的动态链接库。】


我们知道,Linux的用的都是glibc,有一个叫libc.so.6的文件,这是几乎所有Linux下命令的动态链接中,其中有标准C的各种函数。对于GCC而言,默认情况下,所编译的程序中对标准C函数的链接,都是通过动态链接方式来链接libc.so.6这个函数库的。

OK。还是让我用一个例子来看一下用LD_PRELOAD来hack别人的程序。

【小镇来亲自试下吧,玩玩嘛】

首先我们写一段程序,如下图所示:



【这是一段密码验证程序,大家都看得出来,password是正确密码,下面就强行让他所有的密码都能通过】
然后我们编译一下:gcc -o verfypasswd verfypasswd.c。
然后写一段用来hack的c语言文件hack.c,如下图所示:



然后将c文件编译成so链接库,命令:gcc -fPIC -shared -o hack.so hack.c
【-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),

则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意

位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。】

恩,好,关键的一部来了!改变LD_PRELOAD环境变量的值:export LD_PRELOAD="./hack.so"

好了,你随便运行个命令试试


哇擦!。。。。。。全是 I will hack you,baby这个字符串。。好吓人,而且文件的名称全部错误了。



然后我们运行刚刚的密码c文件试试,下图:



看见没,correct password,这样子密码就强行正确了!赶紧改回来。。export LD_PRELOAD=""
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: