해킹 공부/시스템 해킹

해커스쿨 LOB level 4 goblin

O'bin 2022. 3. 27. 23:34

id : goblin

pw :  hackers proof

 

 

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

 

ls로 파일 목록 확인,

orc와 orc.c가 눈에 띈다.

우선 orc가 어떻게 동작할지 미리 파악하기 위해 orc.c의 내용을 살펴봤다.

 

 

 

 

 

 

 

 

 

입력값의 길이가 2보다 작으면

argv error 출력 후 실행 종료

 

 

(1)

 

(2)

 

 

 

 

(3)

 

 

 

 

 

 

 

 

 

(1) memset은 리눅스에서 메모리를 초기화하는 함수이다.

environ 배열이 인자로 들어있는데, 이 부분으로 보아 환경변수를 쭉 초기화 하는 것으로 예상된다.

 

(2) 입력값의 index [1][47] 값이 \xbf이지 않으면 stack is still your friend. 문구 출력 후 프로그램이 종료된다. \xbf는 주소값일테니, 인자를 넣을 때 이것을 신경 써야 프로그램이 종료되지 않고 아래 strcpy 함수로 넘어갈 것이다. 

 

(3) strcpy가 실행되어야 BOF를 일으키는 것이 가능하기 때문에, 위에서 프로그램이 종료되지 않고 쭉 내려오도록 페이로드를 짜야 한다.

 

 

간단하게 동작을 확인해봤다.

 

 

 

 2.  gdb로 메모리 주소 확인

 

 

파일 내용 수정이나 확인을 편하게 하기 위해 orc.c와 내용이 똑같은 myorc.c를 vi편집기로 생성(vi myorc.c)

myorc.c 생성 후 컴파일 해 myorc 실행파일을 생성했다.(gcc -o)

 

 

 

gdb로 메모리 구조를 살펴봤다. strcpy가 시작되는 곳을 찾아야하는데, 안보여서 당황했다. 

 

위 사진처럼 return을 입력하면 아래로 뒷 내용이 쭉쭉 나온다.

 

strcpy 함수 call 아래 add되기 시작하는 부분의 주소를 보니 \x80485c2이다.

 

 

 

 

\x80485c2에 breakpoint를 걸고

python으로 A를 47개 넣고 버퍼의 주소를 실행했다.

 

gdb에서 r은 run(실행) 명령으로 실행 중 이상이 발생했을때의 파일과 지점을 출력해준다고 한다. 

프로그램을 시작하면 내가 걸어놓은 breakpoint가 걸린다.

 

x/24x $esp 명령은 stack의 가장 윗부분의 24개의 words를 16진수로 출력(e'x'amine)한다.

출처 : https://stackoverflow.com/questions/48427724/what-is-x-24x-esp-mean

 

 

0x41이 시작되는 지점의 주소가 버퍼가 입력되기 시작하는 지점이다. (A의 아스키코드 0x41이기 때문)

이 지점의 주소는 0xbffffac0이므로, 이것을 가지고 BOF를 일으켜 보기로 했다.

 

 

 

 

25byte 쉘코드를 넣고 nop을 19개, 그리고 위에서 구한 버퍼의 주소를 넣었는데, 쉘 획득에 실패하고 segmentation fault가 나왔다. 아무래도 실제 파일을 실행했을 때의 버퍼 주소는 이게 아닌 것으로 보인다.(매번 바뀌나?)

 

 

 

다시 vi 편집기를 열어(vi myorc.c + i(insert mode)) myorc.c의 코드에 buffer의 주소를 출력하는 코드를 추가했다.

 

 

gcc -o Myorc myorc.c로 컴파일 후 Myorc를 실행했더니 주소가 나왔다. 위에서 gdb로 분석한 것과 다른 주소여서 쉘 획득이 안 된 것으로 보인다. 이 주소로 다시 쉘 획득을 시도해보겠다.

 

 

 3.  BOF 발생시켜 비밀번호 획득

 

 

buffer 주소를 얻은 페이로드로 시도했는데, 쉘 획득은 되는데 권한이 504(orc)로 넘어가지 않고 503(goblin)로만 쉘이 열렸다. 계속 시도해보다가 도저히 안되길래 인터넷 검색 후 다른 형식의 페이로드를 넣었더니 드디어 비밀번호를 획득했다!!

 

pw : cantata

 

 

 


지난 level까지는 환경변수를 조작해서 쉘을 열 수 있었는데, 이번 문제의 의도가 환경변수 말고 다른 방법으로 푸는 것이었다. 좀 어려웠지만 차근차근 따라가니 이해할 수 있었고, 역시 더 공부를 해야겠다는 생각을 하게 만드는 난이도였디..^^

'해킹 공부 > 시스템 해킹' 카테고리의 다른 글

[해커스쿨 LOB] level 6_wolfman  (0) 2022.04.07
해커스쿨 LOB level 5 orc  (0) 2022.04.03
해커스쿨 LOB level 3  (0) 2022.03.22
해커스쿨 LOB level 2  (0) 2022.03.20
해커스쿨 LOB level 1  (0) 2022.03.20