📖 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 함수이다.
먼저
'스터디 그룹 > ProjectH4C' 카테고리의 다른 글
ProjectH4C 3개월 3주차 과제 (pwnable.kr - flag) (0) | 2021.04.05 |
---|---|
ProjectH4C 3개월 3주차 과제 (pwnable.kr - bof) (0) | 2021.03.31 |
ProjectH4C 3개월 3주차 과제 (pwnable.kr - fd) (0) | 2021.03.30 |
ProjectH4C 3개월 2주차 과제 (UNIT 51, 52, 53) (0) | 2021.03.28 |
ProjectH4C 3개월 2주차 과제 (해커스쿨 ftz - 8) (0) | 2021.03.28 |