IT 그리고 정보보안/Write-up

LOB Level 11 (skeleton)

plummmm 2021. 4. 12. 19:07
반응형

golem.c 를 열어봅시다.

 

 

눈씻고 봐도 페이로드를 올릴 곳이 보이지 않는다..

맨 아래 스택 파괴자 부분 때문에 golem이 LOB 문제 중에서도 악명 높다고 한다..

그냥 우리가 하던 방식으로는 불가능 한듯 하다.

 

이건 솔직히 잘 몰라서 검색을 한번 해보고 했다.

근데 검색해도 답이 없다. 공유 라이브러리를 이용??

그래서 공유라이브러리 부터 공부 다시함 ㅡㅡ;

 

결론적으로. 공유 라이브러리를 임의로 제작하여 그 이름으로 페이로드를 올리고

그걸 LD_PRELOAD 라는 환경변수에 정확한 경로를 지정해주면 프로그램이 등록한

공유 라이브러리 부터 링크 시키게 된다.

공유 라이브러리 영역에 제작한 라이브러리가 쌓이므로 그 곳에 페이로드가 올라간 셈이다.

이 원리를 이용해서 공격한다.

공유 라이브러리 영역은 아래 그림처럼 스택 아래에 있다.

 

그럼 이제 풀이를 해보자.

 

먼저 임의의 공유 라이브러리 파일을 만들기 위해 abc.c에 example() 이라는 텅텅빈 함수를 만들었다.

여기서!!! #include <stdio.h>를 해버리면 굉장히 골아프다;

표준 라이브러리를 불러 오도록 해버리면 우리가 만든 라이브러리가 공유 라이브러리 영역 어디에 위치한지

찾을 때 굉장히 곤욕스러울 것이다. ( 거기에다가 RET를 줄거니까.)

 

다음 gcc에 여러 옵션을 주어 공유 라이브러리 파일을 만든다. 이 때 이름에 nop 50개와 셸코드를 삽입 했다.

이유는 위에서 설명했다.

(위에 걸린 링크를 따라 들어가면 설명을 볼 수 있따.)

그 다음 export로 LD_PRELOAD 환경 변수에 제작한 공유 라이브러리를 등록한다.

위에서 말했듯이, 페이로드를 이름으로 했으므로 공유 라이브러리 영역에 페이로드가 올라가 있는 셈이다.

이제 이 위치를 찾아 RET를 그쪽으로 돌려주면 될 것이다.

 

공유 라이브러리 영역 주소대를 정확하게 몰라서 노가다 뛰었다.

ebp-5000 부터 엔터를 수십번 때리니까 아까 넣은 nop 부분이 나오는군..

이제 NOP sled 중 하나에 리턴 어드레스를 주면 셸이 올라오지 않을까 싶은데. 해봅시다.

 

반응형

'IT 그리고 정보보안 > Write-up' 카테고리의 다른 글

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