본문 바로가기
Wargame/The Lord of the BOF

LOB - 01 gremlin - (1)스택 구조 파악

by morae23 2019. 2. 1.

[simple BOF]

먼저 gremlin.c의 코드를 보면 다음과 같다.







buffer의 크기가 256인데 strcpy()를 사용하기 때문에
buffer overflow를 발생시킨다.


참고)
이 때 stack 상태는 다음과 같다.



따라서 buffer에 strcpy()하는 것을 이용하여 ret 부분을 덮으면 된다.
buffer ~ ret 직전까지 260바이트가 존재하는 것으로 보이지만
실제 size를 알아볼 필요가 있다.



실제로 buffer와 ret가 떨어진 바이트 수를 계산할 때는
(main 진입 직전의 esp) - (strcpy 호출 직전의 esp에 저장된 값) 을 이용한다.

main 진입 직전의 esp: push ebp를 하기 이전의 상태로 스택에 ret까지 쌓인 상태
strcpy 호출 직전의 esp에 저장된 값: buffer가 strcpy의 첫 번째 인자이므로 calling convention에 따라 마지막에 스택에 담기게 됨










위의 결과를 보면 실제로 떨어진 바이트 수도 260인 것을 알 수 있다.

따라서 argv[1]으로 “A”*260 + “B”*4를 주면 ret가 "BBBB"로 덮이게 된다.





'Wargame > The Lord of the BOF' 카테고리의 다른 글

LOB - 03 goblin  (0) 2019.02.01
LOB - 02 cobolt  (0) 2019.02.01
LOB - 01 gremlin - (3)마무리  (0) 2019.02.01
LOB - 01 gremlin - (2.2)쉘코드 수정  (0) 2019.02.01
LOB - 01 gremlin - (2.1)쉘코드 작성  (0) 2019.02.01

댓글