[시스템해킹] LOB - BOF 문제풀이

sheiskone·2022년 10월 4일

시스템해킹

목록 보기
6/6
  1. gate > gremlin
  • gremlin.c 코드를 보면 buffer에 256byte가 할당되어 있음을 알 수 있음. argv[1]이 256byte보다 크면 BOF가 발생할 것. strcpy 함수 때문.
  • 공격 시나리오: 인자로 쉘코드를 전달해 buffer에 쉘코드 저장. 쉘코드가 위치한 주소, 즉 buffer의 시작 주소를 return address를 넣어주면 될 것 같음.
  • gdb로 buffer의 시작 주소를 알아내면 됨.
  • strcpy를 호출한 이후 상태를 확인할 것. b *main+59의 시점을 확인함. 메모리상태를 확인해보면, 버퍼의 시작 주소를 알 수 있음. 0xbffffa28.
  • 쉘코드(25바이트)+NOP(235바이트)+버퍼시작주소(4바이트)를 입력하면 됨
  1. gremlin > cobolt
  • 쉘코드 저장할 수 있는 곳: 버퍼, 환경변수, ret 뒤의 공간, argv[1], argv[0](파일이름, 심볼릭 링크로 연결), 다른 segment 영역, 공유 라이브러리
  • 버퍼의 크기가 16바이트로 줄어듦. 버퍼 이외의 곳(환경변수)에 쉘코드를 저장해 쉘코드 위치 주소를 return address에 넣어줄 것.
  • 환경변수 주소 위치 이용하면 공격 성공.

0개의 댓글