시스템 해킹

 1576, 1/79 회원가입  로그인  
   pk920207
   buffer overflow에서 NOP 썰매 관련 기법에 대해 질문드립니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1668 [복사]


ret 값 추측해서 공격하는 방법.. NOP 썰매라고 불리는 이 방법에서

ret 값을 추측하기 위해

#include<stdio.h>
int sp()
{__asm__("movl %esp,%eax");}

void main()
{
int esp;
esp=sp();
printf("%p\n",esp);
}

코드를 많이 쓰더군요..

무슨 값을 얻어내기 위한 코드인가요 .. 어디서도 답을 찾아볼 수가 없군요.

그리고 추가로 프로그램 실행시마다 주소가 바뀌니.. 그런 .. 이해를 하기가 어렵습니다.

그에 관한 자료를 보고 싶으나 bufferoverflow에 관한 문서는 너무 방대하고

이해하기가 어려운 감이 있어서 질문드립니다.

참고할 만한 문서라도 있으면 꼭 추천해주세요 ㅠ.ㅠ

  Hit : 5306     Date : 2013/04/28 04:04



    
cd80 movl %esp, %eax는 저 인스트럭션이 수행될 그 당시의 esp값을 eax에 넘겨주는건데
x86 아키텍쳐에선 함수의 리턴값을 eax에 넣어 전달합니다
그래서 저 함수는 그냥 말그대로 현재 esp의 값을 알아오는 함수입니다
디버깅해보시면 sp()함수가 끝난 직후 eax값이 esp값하고 같거나 얼마 차이가 나지 않는걸 보실 수 있습니다
2013/04/28  
pk920207 감사합니다. 하나 더 질문드려도 될까요?
이 공격이 쉘코드 이전에 할당된 NOP 부분에 걸칠 주소값을 찾아야 하는데
esp 값이랑 무슨 관련이 있나요?
{90909090909090shellcode} -- > 버퍼에 이렇게 들어갔다고 할 때,
저기서 얻어낸 esp값이 왜 저기 NOP부분에 걸쳐지는지 궁금합니다.. 아 질문을 잘 못하겠네요
2013/04/28