ssh로
fd@pwnable.kr port - 2222로 접속을 한 뒤 pw guest를 입력해주면
위와 같은 이쁜 친구를 만나볼 수 있다
목록들을 확인해보니 fd fd.c flag peda~ 가 존재하였고 flag는 실행 시 퍼미션 디나이드가 발생하는 상태이다.
fd.c를 열어봤더니 소스가 잇었다 .
자 먼저 들어가기전에 중요한 핵심 함수들을 정리해보자
atoi ( str ) = 문자열을 정수로 변환해줍니다 필요한 헤더는 stdlib.h 입니다.
read (a, b, c) = [ a = 데이터를 전송할 파일 디스크립터 b = 수신 한 데이터를 저장할 버퍼를 가리키는 포인터 c = 수신할 최대 바이트 수)
Strcmp(a , b) = a 와 b 문자열을 비교합니다
if 부분에 system("\bin\cat flag")를 호출해주네요 ! 저기 부분을 맞춰줘야지 풀 수 있는 문제라고 예상가능합니다
헌데 argv[1]부분을 0x1234로 빼버리죠? 그렇다면 read함수에서 buf에 정상적으로 값을 전달 해 줄 수가 없으므로
0x1234를 십진수로 변환한 4660을 넣어줘서 4660 - 4660 = 0으로 초기화 해줍니다.
그리고 strcmp 부분에서 LETMEWIN과 버퍼에 입력된 문자열이 동일하면 system함수가 열어지네요
이렇게 답을 얻은것을 확인할 수 있습니다.