LOB_번외.my-pass파일을 공격해서 한번에 마지막까지 뚫기
해킹/LOB 2016. 1. 27. 19:54
LD_PRELOAD에 대해서 공부하면서 알게된 사실인데 my-pass파일은 매우 취약하다.
이 프로그램은 geteuid를 해서 사용자의 euid에 맞는 패스워드를 출력해준다.
그런데 LD_PRELOAD라는 환경변수는 특정한 함수를 미리 등록해 둘 수 있다.
그 함수와 같은 이름의 함수를 나중에 libc에서 만나더라도 LD_PRELOAD에 있는 함수를 우선적으로 사용한다.
즉 geteuid가 원하는 단계의 uid를 리턴하도록 LD_PRELOAD를 사용해서 조작할 수 있다.
그러면 my-pass는 조작된 geteuid의 결과에 따라 다른 아이디의 비밀번호를 뱉어낼 것이다.
먼저 gate로 로그인해서 my-pass를 읽어봤다. 500~ 520까지가 LOB의 각 단계를 나타내는 uid들이다.
이런식으로 getuid라는 함수를 단순히 520을 뱉도록 정의하는 geteuid.c 파일을 만들었다.
gcc -o geteuid -shared -fPIC geteuid.c
이런식으로 LD_PRELOAD에 등록할 수 있도록 컴파일을 해준뒤 등록하고 my-pass를 실행시키니
geteuid함수가 520이라는 값을 돌려줘서 my-pass가 최종 비밀번호인 got the life를 뱉는것을 확인했다.
'해킹 > LOB' 카테고리의 다른 글
LOB_13.darkknight->bugbear (0) | 2016.01.29 |
---|---|
LOB_12.golem->darkknight (0) | 2016.01.28 |
LOB_11.skeleton->golem (0) | 2016.01.27 |
LOB_10.vampire->skeleton (0) | 2016.01.22 |
LOB_9.troll->vampire (0) | 2016.01.22 |