ls 명령어로 어떤 파일이 있는지 확인하였다. flag 파일과 실행파일인 random, 소스코드인 random.c 파일이 있다. random.c 소스코드를 먼저 읽어보았다. 함수는 main 뿐이며 먼저 random 변수를 선언했다. random 함수를 사용하여 난수를 생성하고, 이를 random 변수에 대입한다. srand(time(NULL))이 아닌 random을 사용하고 있으므로 불규칙적인 seed 없이 난수가 생성되고 있다. key 변수를 선언하고 scanf 함수를 사용하여 사용자로부터 입력을 받는다. if 문을 통해 key 값과 random 값을 XOR 한 값이 0xdeadbeef와 일치하는지 확인하고 일치할 시에 "Good!"과 함께 flag 값을 출력한다. * random..
먼저 ls 명령어로 어떤 파일이 들어있는지 확인하였다. flag, passcode, passcode.c 파일이 들어있다. 가장 먼저 passcode 파일을 실행하 보았다. 이름을 입력하면 환영한다는 인사말이 나오고 비밀번호를 입력했더니 segmentation fault가 난다. passcode.c 파일의 내용을 확인했다. 먼저 passcode1, passcode2 변수를 선언하고 사용자에게 값을 입력받아 각각 두 변수에 대입한다. if 문을 통하여 passcode1은 338150, passcode2는 13371337값과 비교한 후 두 값이 모두 일치할 경우 로그인이 되고, flag를 출력한다. 그렇지 않을 시 로그인이 실패했다는 내용을 출력하고 종료한다. * fflush 함수 - 스트림에 ..
이번 문제는 FTZ 문제풀이를 하면서 가장 많이 다뤘던 BOF 문제이다. 먼저 다운로드 받으라고 나와있는 파일을 다운로드 받았다. wget 명령어는 웹브라우저에서 파일을 다운받기 위한 명령어이다. 파일이 다운로드 된 것을 보고, 권한을 확인했다. 두 파일 모두 읽기만 가능하고 실행은 할 수 없다. 이렇게 되면 페이로드를 작성해서 실행하는 방법이 없지만 문제에 보면 nc pwnable.kr 9000으로 bof에 nc를 걸어놓았을 것을 짐작할 수 있다. 먼저 bof.c 파일을 읽어보면 func와 main 함수가 정의되어 있다. main 함수에서 func에 key 인자로 0dbeadbeef를 넘겨준다. func 함수에서는 overflowme를 32byte 만큼 정의하였고 get..
다음 문제는 collision ! ls 명령어로 디렉토리 내에 있는 파일을 먼저 살펴보았다. 내 권한은 col 이므로 col 파일은 실행 / col.c 파일은 읽기 / flag는 아무것도 할 수 없다. 먼저 읽을 수 있는 파일을 파악해야 실행 파일을 활용할 수 있을 것 같아 col.c 파일을 읽어보았다. unsigned long 형의 hashcode을 정의하고 16진수 21DD09EC를 대입했다. unsigned long 형의 check_password 함수를 정의했다. 함수는 인자를 int 형으로 변환하여 4byte 씩 5번 읽고, res에 추가한다. res를 return 하고 함수가 종료된다. main 함수로 넘어와보자. argc가 2 미만일 경우 즉 인자가 없을 경우에 ..