Lord of BOF_7_Orge

핵심 알고리즘은 다음과 같다.

  • main함수 인자를 받는다.
  • main함수의 인자는 2개까지만 가능하다
  • environ 전역변수가 가리키는 주소에 저장된 주소가 가리키는 곳의 데이터를 0으로 바꾼다.
  • argv[1]의 48번째 글자가 \xbf가 아니면 종료한다.
  • argv[1]의 길이가 49보다 길 시 종료한다.
  • strcpy로 스택에 argv[1]을 복사한다.
  • memset으로 main 함수의 스택 프레임 내의 내용을 0으로 바꾼다.
  • memset으로 argv[1]의 내용을 0으로 바꾼다.

제한된 조건은 다음과 같다.

  • 메인함수 인자 개수
  • argv[1]의 길이
  • argv[1] 주소의 내용 사용 불가
  • 환경변수 사용 불가

조작 가능 요소

  • EBP backup
  • return address
  • argv[0] 내용!

argv[0]의 위치에 셸코드를 넣으면 되겠다.

일반적으로 프로그램을 실행하면 argv[0]을 변형할 수 없으므로, 직접 함수를 호출하여 프로그램을 실행해야 한다.

C언어 코드로 프로그램에 직접 인자를 넣어 실행하도록 했다.

troll의 비밀번호는 aspirin이다.


tags: writeup, pwnable, buffer overflow, stack overflow, memory corruption, elf file, linux, c lang, x86asm