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
Tags
Social