https://dreamhack.io/wargame/challenges/900
드림이는 ff 파일의 내용을 약간 수정해서 fs 파일로 저장했습니다. 드림이가 수정한 부분은 어디였을까요?
수정한 부분이 포함된 라인의 전체 문자열을 획득하고 DH{ } 중괄호 안에 넣어서 인증해 주세요.
Hint : ff 파일과 fs 파일의 다른 점을 찾아 보세요.
char filter[] = {'&', ';', '|', '$', '`', '*','[', ']', '{', '}', '\\', '^', '~', '?', '#', '!'};
코드에서 커멘트 인젝션을 막기위해 특정 기호들을 필터링 해둔 것을 확인할 수 있었습니다. 다행히 우리가 할 공격과는 상관이 없었습니다.
initialize();
system("ls -al");
printf("Input Command: \n");
scanf("%20[^\n]", input);
접속하자마자 확인할 수 있는 초기 설정입니다. ls를 통해 현재 디렉토리의 모든 파일을 다 보여주고 있다는 것을 확인할 수 있습니다.
-r--r----- 1 root chall 3445 Jul 27 2023 ff
-r--r----- 1 root chall 3445 Jul 27 2023 fs
출력되는 ls -al 목록에서 ff와 fs 파일 또한 확인 가능했습니다.
3. ff를 수정한 fs파일의 전체 문자열을 획득하는 것이 목표이니 cat fs 를 통해 fs의 내용을 접근해보았습니다.
Input Command:
cat fs
9c9
< b1651c307aa6263ecf94fed58b44d90bba293a0944b102e52528bac139f4b9e5
---
> b1651c307aa6263ecf94fed58b44d90bba293a0944bl02e52528bac139f4b9e5
Terminated
매우 쉽게 문자열을 획득할 수 있었습니다...
<는 수정전의 ff, >는 수정 후의 fs 내용일거라 생각하고, 플래그를 제줄해 보았더니 문제가 풀렸습니다.


diff ff fs 를 통해서도 풀이가 가능하다고 합니다. diff는 파일의 차이점을 찾아주는 유닉스/리눅스 명령어입니다. 주로 텍스트 파일 두 개를 비교하여, 어떤 라인이 추가, 삭제 또는 변경되었는지 알려줍니다.ff (original) and fs (modified).ls -al, allowing the user to see existing files including ff and fs.system(), so simply running cat fs prints the contents of the modified file.fs contains one modified character compared to ff.fs in the format DH{ ... } solves the challenge.diff ff fs command can also show the changed line.