-->

[LOB] level6, wolfman -> darkelf 풀이

LOB, wolfman -> darkelf 문제 확인

저번 문제와 다른점은, argv[1] 길이체크를 한다는 것이다. 

 

 

 

점점 제약조건이 추가되고 있는데 정리하자면 아래와 같다.

 

  • 환경변수 초기화
  • 버퍼 초기화
  • arvg[1] 길이체크
  • 48번쨰 바이트 \xbf

 

 

LOB, wolfman -> darkelf 풀이

현재 스택 상황은 아래와 같다. 참고로 argc, argv[1], argv[1], ... 는 RET 뒤 어딘가 오게된다.

 

i (4)
buffer (40)
SFP
RET
...
argc
argv[0]
argv[1]

 

 

 

RET 뒤에 argv 값들의 위치가 정확히 어떻게 되는지 확인해보기 위해 argv[1]과 argv[2]에 A와 B를 각각 넘겨주었다.

 

 

 

쭉쭉 내리다보면 아래 부근에서 0x42 값을 확인할 수 있다. argv[2]는 길이체크를 하지 않기 때문에 argv[2]에 nop과 쉘코드를 넣어주면 된다.

 

 

 

LOB, wolfman -> darkelf 익스플로잇

따라서 argv[1]에 더미 44바이트와 argv[2] 부근의 적당한 주소를 주고 argv[2]에 nop과 쉘코드를 넣어주면 아래와 같이 패스워드를 얻을 수 있다.

 

 

댓글

Designed by JB FACTORY