Lord of BOF_6_Darkelf

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

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

argv[0]의 길이가 77이어야 한다는 조건이 추가되었다.

일반적으로 argv[0]은 프로그램을 실행한 경로가 들어간다.

프로그램에서 직접 프로세스를 실행시킬 때에는 인자를 달리 줄 수도 있다. 프로그램을 실행할 때 이름을 길게 넣어서 우회했다.

orge의 비밀번호는 timewalker 이다.


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