jam 블로그

[bof 원정대] goblin -> orc (egghunter) 본문

해킹/시스템

[bof 원정대] goblin -> orc (egghunter)

kid1412 2012. 3. 19. 16:10
728x90
우리가 풀 문제의 소스이다.

 [그림 1]orc.c

소스분석
1.  buffer의 크기는 40
2.  인자값은 적어도 하나이상
3. 환경변수 초기화
4. 첫번째 인자값의 48번째 글자는 \xbf 이어야 함.
5. 첫번째 인자값을 buffer에 복사
6. buffer 출력.

여기서는 환경변수에 등록해서 공격할 수  없다. 그래서 환경변수에 넣지 않고 buffer 넣어서 공격할 것이다. 

 
우리가 해야할 과정이다.

0. bash2
1. buffer 크기인 40byte 보다 작은 shellcode 구하기 (앞에서 쓰던 shellcode는 40byte보다 큽니다.)
2. buffer의 리턴값을 구함.
3. bof 공격 

 
1. shellcode 구하기

구글링하여 24btye 크기인 shellcode를 찾았습니다.
 "\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52
\x53\x89\xe1\x8d\x42\x0b\xcd\x80"

 
2. buffer의 리턴값 구하기

buffer의 리턴값을 구하려면 문제 소스를 복사하여 다음과 같이 한줄 추가해 줍니다.

 [그림 2] 문제 소스 복사 후 buffer의 리턴값 구하는 소스 추가

 
컴파일 후 버퍼에 44만큼 아무값을 넣고 리턴값을 \xbf\xbf\xbf\xbf를 넣어줍니다.(48번째 값이 \xbf이면 됩니다.)
 
 [그림 3] buffer의 리턴값 구하기

coredump가 생기긴 했으나 무시하셔도 됩니다.  

 
3. bof 공격

1번의 shellcode와 2번의 리턴값으로 공격합니다.
 

 [그림 4] bof 공격

buffer에 20byte의 쓰레기 값과 24byte의 shellcode를 넣고 그 뒤에 buffer의 리턴값을 넣으면 됩니다.

ps. 주소값이 복사한 소스의 파일과 원본  파일의 주소값이 다를수 있습니다. "a"x20 말고 "\x90"x20(nop) 으로 바꾸시고 주소값을 앞뒤로 약간씩 변경하시면 됩니다.

 
Comments