OS/Linux [ftz] hacker school level20 풀이
  • 728x90
    반응형

    Free Training Zone level20 풀이


     

     

    cat 를 사용하여 hint 출력

    코드를 살펴보면 fgets에서 79로 입력 사이즈를 제한 함으로 버퍼오버플로우 로는 접근할 수 없다.

    printf 를 살펴보면 형식 지정자 없이 사용함으로 pritnf("%s", bleh);처럼 동작 될것을 예상 할 수 있다.

     

    위와 같이 형식 지정자를 이용해서 프로그램을 실행 시켜보면 %x 3번째 이후 AAAA의 값이 출력되는 것을 알 수 있다.

    이와같이 Format String Bug를 이용하여 level21 계정에 접근하면 되겠다.

     

     

    dotrs 주소 확인

    return 주소를 확인하기 위해 gdb로 main 함수를 disassembler 하려 했으나, 아래와 같이 접근이 막혀 있었다.

     

    이때 사용할 수 있는 것은 .dotrs의 주소 값이다.

    gcc 컴파일러는 컴파일 중에 .ctors.dtors 두 세그먼트를 생성한다.

    .ctors는 main 함수 전에 실행되고 .dtors는 main 함수 종료 후에 실행된다.

     

    아래와 같이 readelf명령을 사용하여 .dtors의 주소를 확인한다.

     

     

     

    shellcode 환경변수 등록 및 주소 확인

    아래와 같이 export명령을 사용해 환경변수에 41byte shellcode를 등록한다.

     

    아래와 같이 환경변수 shellcode 주소 확인 코드를 작성하고 주소를 확인한다.

     

     

     

    페이로드 코드 작성

    페이로드는 위와 같은 구조로 작성 할것이고 부분적으로 설명하자면 %x 3개는 위에서 테스트한 바와 같이 %x 3개 뒤부터 AAAA에 접근 할 수 있기때문에 넣은것이다.

     

    .dtors주소값 0x08049594에서 4byte 더한 주소에 Shellcode를 넣어 실행하면 되는데, shellcode 주소 값인 0xbffffc14 = 3221224468과 같이 큰값은 x86 pc에서 처리 할 수 없음으로 4byte씩 쪼개서 처리해 준다.

     

    %1234c와 같이 공백을 사용하여 %n으로 입력받는 값으로 sellcode 주소를 전달하는 방식으로 한다.

     

    4 + 4 + 4 + 4 + 8 + 8 + 8 = 16 + 24 = 40
    0xfc14 = 64532 - 40 = 64492
    0xbfff = 49151 = (0x1bfff)114687 - 64492 = 50195 - 40 = 50155

     

     

     

     

     

    728x90
    반응형

    'OS > Linux' 카테고리의 다른 글

    [Fedora] 메모리 보호 기법 확인  (0) 2020.05.08
    [ftz] hacker school level19 풀이  (0) 2020.04.28
    [ftz] hacker school level18 풀이  (0) 2020.04.28
    [ftz] hcaker school level17 풀이  (0) 2020.04.28
    [ftz] hacker school level16 풀이  (0) 2020.04.28
상단으로