시스템 해킹

 1576, 1/79 회원가입  로그인  
   램깍는노인
   "해킹 : 공격의 예술" 의 버퍼 오버플로우 exploit_searchnote에 관한 질문입니다.

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


안녕하세요. "해킹 : 공격의 예술" 책으로 혼자 공부하고 있는 학생입니다. 버퍼 오버플로우를 공부하다보니 막히는 부분이 있어 이 책을 가지고 이전에 공부하셧던 분들의 조언을 얻고자 질문을 올립니다.

제가 막히는 부분은 버퍼 오버플로우 챕터의 exploit_notesearch 프로그램입니다. 저는 이 프로그램을 버퍼 오버 플로우 시킬 아규먼트를 제작하고 notesearch로 보내는 프로그램으로 이해하고 있습니다. notesearch로 보내고 나면 char searchstring[100]변수를 이용하여 notesearch의 main이 return되는 주소를 shell code가 저장된 주소(정확히는 NOP썰매의 일부)로 리턴시키는 방식으로 프로그램 진행 방향을 쉘코드로 바꿔서 루트 권한을 획득 한다고 알고 있습니다. 그런데, 블로그의 설명과 책의 설명을 보면 리턴 주소를 exploit_notesearch의 main함수의 스텍프레임에 있는 i를 이용하여 얻습니다. 제가 이해하기로는 exploit_notesearch과 notesearch는 서로 다른 프로세스니까 서로 다른 메모리 영역을 가지고 있는데 그렇다면 리턴하는 주소를 exploit_notesearch의 스텍프레임에 있는 i를 기준으로 만드는 것이 아니라 notesearch의 스텍프레임에 있는 어떤 변수를 기준으로 만들어야 하는것이 아닌가 생각했는데 이부분이 달라서 좀 헷갈립니다. 그래서 생각해본것이 어차피 notesearch 프로그램의 스텍어딘가에 있을 NOP썰매의 주소를 exploit_notesearch프로그램의 스텍에 있는 i의 주소에서 오프셋을 대충 빼가면서 때려맞춰 찍어보는것은 아닌가 생각을 해봣는데 이게 맞는 추측인가요? 만약 이 추측이 맞다면 혹시라도 notesearch프로그램 어딘가에 있을 NOP썰매의 주소가 exploit_notesearch의 i보다 높은 주소에 있는 경우는 i에서 offset을 빼가면서 상위 스텍으로 찾아가는것이 헛수고가 되는데 이 부분은 어떻게 생각하시는지도 궁금합니다.

추가적으로 실제로 gdb로 exploit_notesearch의 메모리를 검사해본 결과 NOP썰매가 있는 리턴주소로 0xbffff6e6을 썻는데 notesearch분석결과 0xbffff6e6은 실제로 searchstring보다도 앞에 있는 주소였습니다(searchstring 은 0xbffff760에 존재). 따라서 0xbffff6e6으로 리턴해버리면 NOP썰매를 만날수 없는데 이게 어떻게 된걸까요?

작은 조언이라도 해주시면 감사하겠습니다. 이 의문이 풀리지 않아 4일째 머릿속에서 이 생각만 합니다. 작은 조언이라도 이 부분을 돌파하는데 큰 도움이 될것 같습니다. 읽어주셔서 감사합니다.

  Hit : 4654     Date : 2013/07/15 12:17



    
manorgass NOP가 overflow된 memory address는 exploit_notesearch의 i보다 높은 주소에 있을 수 없습니다.

해당 예제에서 notesearch 프로그램은 exploit_notesearch.c 안의 system함수에 의해 호출됩니다.

stack 구조상 높은주소 -> 낮은주소 로 크기를 확장시켜 가므로 당연히 exploit_notesearch가 사용중이던 stack의 꼭대기 즉, esp register가 가리키고 있는 주소를 바닥으로 작아지는 형태로 메모리에 적제될 것입니다. 따라서 notesearch의 멤버변수들은 모두 exploit_notesearch의 지역변수인 unsigned int i 보다 낮은 주소에 위치하게 되는 것이죠.
2013/07/15  
manorgass 설명이 부족하다면 manorgass@gmail.com으로 메일 주세요. 이해하실 수 있도록 도움드리겠습니다. 2013/07/15  
램깍는노인 메일 드렸습니다. 2013/07/15