최대 1 분 소요


문제

image-20211222014137201

  • NX 기법 미적용 확인
    • 쉘코드 삽입 가능할 것으로 판단



소스코드

image-20211222014236428

  • initialize 함수에서 실행 이후 정해진 시간 초과시 alarm_handler 함수에 의해 “TIME OUT” 문자열 출력 후 종료
  • main 함수에서 buf 크기 128바이트로 할당
  • initialize 함수 실행 후 printf로 버퍼 출력하고 scanf로 141바이트 크기만큼 버퍼에 입력받음
    • buf의 크기는 128byte인데 141바이트를 입력받기 때문에 Buffer OverFlow 발생
      • Buffer OverFlow와 스택프레임 설명은 basic_expoitaion_001 참고
    • buf와 sfp에 쉘코드와 특정 값으로 132byte((buf=128) + (sfp=4))를 채워넣고
      • NX 기법 미적용으로 쉘 코드 삽입 가능
    • ret주소에 132byte(buf,sfp)에 있는 쉘 코드 주소를 넣어 쉘 코드를 실행하여 권한을 탈취해보자



KALI

image-20211222015336405

  • 서버를 연결했더니 buf의 주소가 뜸
  • 이 주소 처음 부분에 쉘코드를 넣고 나머지는 특정 문자로 채워넣는 payload를 작성해보자


image-20211222015559490

  • 먼저 서버로 원격접속을 위해 remote하고
  • main함수에서 출력할 때 buf = (0xfffeb628)로 출력되므로 “buf = (“ 를 제외하여 실 주소값만 취한다.
  • 그 다음 buf 주소 10자리를 16진수로 정수형으로 buf_addr에 저장하고
  • 먼저 26byte 쉘코드를 저장한 code를 선언해주고
    • 여기서 일반적으로 사용하는 25byte 쉘 코드를 사용하지 않는 이유는
    • scanf 함수의 \x09, \x0a, \x0b, \x0c, \x0d, \x20를 읽지 못하는 특징 때문이다.
  • 다음으로 132byte에서 26바이트를 제외한 106 바이트를 특정 값으로 채워주고
  • 마지막으로 리틀엔디안 패킹 방식(p32)으로 buf 주소값을 덮어 ret 에서 실행되도록 했다.


image-20211222020158228

  • python 코드를 실행하여 cat flag를 해보면
  • 정답을 도출할 수 있다.



결과

DH{465dd453b2a25a26a847a93d3695676d}

업데이트: