해킹 공부/시스템 해킹

해커스쿨 LOB level 2

O'bin 2022. 3. 20. 23:53

id : gremlin

pw : hello bof world

 

 

 1.  파일 목록 확인, 소스코드 분석

 

 

파일 목록 확인(ls)을 했더니 cobolt라는 실행파일과 c소스파일이 나왔다. 

우선 cobolt.c의 내용을 확인해봤다(cat).

level1과 같은 형식의 문제인데 buffer의 크기가 16으로 매우 작다는 것이 포인트이다.

 

 

cobolt 프로그램을 실행(./)하면 argv error라고 출력되고, 입력값의 크기를 너무 크게 넣으니 Segmentation fault가 나왔다.

 

 

 2.  tmp 디렉토리 생성, 환경변수 확인

 

 

환경변수 확인 등의 작업을 위해 tmp 디렉토리를 생성(mkdir) 후 tmp디렉토리로 이동(cd)했다.

25byte쉘코드로 시도해봤는데 계속 오류가 나길래 인터넷 검색 후 41byte 쉘코드를 사용했다.

 

41byte 쉘코드↓

더보기

 

\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

 

 

환경변수 export 후 env명령을 환경변수 목록을 확인하니 내가 가져온 환경변수 EGG가 올라와있다. 글자가 좀 깨지지만 문제푸는덴 지장 없음.

 

 

 

 

환경변수를 가져오는 프로그램을 만들기 위해 newenv.c라는 소스파일을 만든다.

getenv는 환경변수를 가져오는 함수이다. 내가 등록한 환경변수 EGG를 함수에 넣어주면 된다.

작성한 소스파일 컴파일 후 실행파일로 만든다(gcc -o 실행파일이름 소스파일이름.c)

 

 

 

newenv를 실행하면 환경변수값이 나온다.

 

 

 

 

 3.  쉘코드 실행 후 비밀번호 획득

 

 

다시 cobolt프로그램이 있는 gremlin디렉토리로 이동한다(cd .. : 한단계 상위 디렉토리로 이동)

의미없는 A값을 넣어 버퍼를 덮어 쓴 후 환경변수 주소를 입력하면 쉘이 실행된다.

id를 한번 확인해 보고, my-pass로 비밀번호 획득 성공!

 

비밀번호 : hacking exposed