스터디 그룹/ProjectH4C

ProjectH4C 3개월 4주차 과제 (pwnable.kr - passcode)


📖 1) 문제 파악

우선 ssh로 접속해보자.

파일은 flag, passcode, passcode.c가 존재한다.

passcode.c를 읽어보자.

 

 

로그인을 담당하는 함수인 것 같다. 간단하게 보면 passcode1과 passcode2를 입력받는다.

그리고 passcode1 : 338150, passcode2 : 13371337 을 만족하게 된다면 /bin/cat flag를 실행하게 된다.

 

이 부분이 핵심인데, 문제는 passcode1과 passcode2를 받을 때 scanf 내에서 '&'가 빠졌다는 것이다.

그렇게 되면 Segmentation Fault가 발생할 수 밖에 없다.

 


📖 2) 문제 분석

scanf 함수에서 &가 붙어야 하는 이유, Call-By-Reference, Call-By-Value에 관해서는 다음에 정리를 해보자.

 

어쨌든, 위와 같이 Segmentation fault가 발생하는 이유가 무엇일까.

 

먼저 scanf 함수는 결국 인자로 passcode1의 주소를 받아야 한다.

하지만, passcode1의 초기화되지 않은 dummy값을 인자로 넘겼고, 그 dummy를 주소로 생각하여 값을 넣을려고 했기에

Segmentation fault가 발생하게 되는 것이다.

 

gdb로 분석해보자.

 

welcome 함수이다.

 

먼저