문제 서버에 접속하면 다음과 같이 flag 파일이 있고, set uid가 걸려있는 파일이 있다.

flag 파일은 fd 계정으로는 읽을 권한이 없어서 setuid가 걸린 fd를 통해 flag파일을 확인할 수 있을 것 같다. fd의 소스코드로 보이는 fd.c의 내용은 다음과 같다.

fd를 실행할 때 인자가 없으면 pass로 시작하는 문자열을 출력하고 프로그램을 종료한다.

fd를 argv[1] - 0x1234로 초기화하고 len에 read함수로 buf에서 32바이트를 읽어오고 있다. read함수의 첫번째 인자는 fd(파일 디스크립터)라고 한다. 파일 디스크립터는 0은 표준 입력, 1은 표준 출력, 2는 표준 에러 이다. 따라서 위 소스에서 fd가 0이 되면 입력 받을 수 있고, 입력받은 내용이 buf에 들어간다. 그리고 buf가 LETMEWIN이라면 시스템 함수로 flag를 출력한다.

fd가 0이되려면 0x1234는 4660이므로 인자로 4660을 넣으면 fd가 0이되서 표준 입력으로 read함수를 실행하기 때문에 LETMEWIN을 입력하면 조건문을 만족시켜 플래그가 출력된다.

'Project H4C Study Group' 카테고리의 다른 글

[Project H4C][pwnable.kr] bof  (0) 2021.04.01
[Project H4C][pwnable.kr] collision  (0) 2021.03.30
[Project H4C] FTZ 12  (0) 2021.03.29
[Project H4C] FTZ (8 ~11)  (0) 2021.03.27
[Project H4C] FTZ (1 ~ 7(문제오류))  (0) 2021.03.24

+ Recent posts