$ 시스템 해킹 $/Los Of BufferOverflow

Level2 (gremlin -> cobolt)

ws1004 2020. 1. 1. 14:12

소스 코드를 확인해 보겠습니다.

 

소스코드가 매우 level1과 같습니다.

 

똑같은 방식으로 풀이을 해보겠습니다.

 

이번에도 dummy 없이 정확히 16인것으로 보아 

Buffer + SFP + RET 형식으로 되어 있습니다.

 

환경변수에 쉘코드를 입력해 보겠습니다.

 

사용한 쉘코드는 25바이트의 쉘코드 입니다.

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80

 

 

해당 sh이름의 환경변수의 주소를 찾기 위해서 코드를 작성해 보겠습니다.

 

gcc -o 를 이용해서 컴파일해서 실행해 보겠습니다.

 

페이로드를 작성해 보겠습니다.

 

login : cobolt

Password : hacking exposed

 

 

==============================================================================================

환경 변수를 이용한 문제 풀이가 아닌 RET의 아래영역을 이용한 문제 풀이입니다.

 

해당 문제는 ebp-16 밖에 할당이 되어 있지 않습니다.

그래서 25바이트의 쉘코드를 직접 입력으로 사용할 수 없습니다.

 

 

buffer[16] + SFP 에 dummy 값을 넣고 RET에 &shellcode 즉, 쉘코드의 주소를 입력해서 쉘코드를 RET의 아래영역에 입력해서 호출해 오는  형식으로 문제를 풀이 할 수 있습니다. 

 

일단 쉘코드가 들어가는 주소를 알기 위해서 core dump를 만들어 봅시다.

 

먼저 cobolt 파일을 가지고 gdb를 사용할 수 없기 때문에 파일명의 길이가 같은 파일을 cp를 이용해서 만들어 보겠습니다.

그리고 A 16개 B 4개 C 4개를 넣고 그 뒤에 쉘코드 대용으로 S 25개를 입력해서 core dump를 만들어 보겠습니다.

 

53인 쉘코드 첫 주소가 다음과 같이 0xbffffc56인 것을 알 수 있었습니다.

 

그래서 이제 페이로드를 작성해 보겠습니다.

 

login : cobolt

Password : hacking exposed