먼저, 파일 목록을 확인해보겠습니다.



hint 파일이 있습니다.




hint 파일을 읽어보겠습니다.



엄청나게 깁니다.



그리고 level 4의 권한을 가진 파일을 찾아보겠습니다.



/bin/autodig 입니다!




hint에서는 autodig 파일의 소스가 제공됩니다.


이 파일의 소스를 해석한 뒤, 아래에 주석을 적어놓았습니다.




이번 문제는 Command Injection 문제입니다.



먼저 원리 설명을 먼저 하겠습니다.

리눅스상에서 ; 를 명령어 중간에 넣으면, 다른 명령어를 함께  실행할 수 있습니다.



예를 들어

cat hint;cat blabla

를 입력하게 되면, hint 파일을 읽고 나서, blabla 파일을 읽을 수 있습니다.



다음은, 여러 특수문자(띄어쓰기 등)가 포함된 문자열을 한개의 인자로  주는 방법입니다.

여기서 인자란, 명령어를 실행하면서 넘겨주는 입력입니다.



인자는 프로그램 실행 구문 뒤에 문자열입니다.



main 함수의 매개변수를 보면



처럼 되어있습니다.



여기서 argc 는 argv의 길이를,

argv는 명령어 실행줄이 들어있습니다.



예를 들어보겠습니다.

아까 cat hint 를 생각해볼 수 있습니다.


이때, argc, argv는 각각




가  들어있게 됩니다.



위의 예시 처럼 인자의 구분은 스페이스바를 통해서 하게 됩니다.

하지만 스페이스바를 포함한 인자를 넘겨주고 싶다면...


"(큰따옴표)를 통해서 전달해줄 수 있습니다.


cat "give me hint" 와 같이 입력하게 되면




와 같이 들어가게 됩니다.

(만약 " 안에서 "를 넣고싶다면, \" 를 하면 되고, \를 넣고싶다면 \\를 하시면 됩니다.)



자, 이제 다시 메인으로 돌아와서,

프로그램의 소스를 해석해보면,



를 실행하는 프로그램입니다.



하지만 여기서,

; my-pass ; 를 입력하게 되면,



가 되어, 




명령어가 나뉘게 됩니다.



즉, my-pass를 실행할 수 있게 되는 것입니다.

이게 바로 커맨드 인젝션입니다.



하지만, 여기서 생각해봐야 할 점이 있습니다.


만약,



를 입력해서 인자를 주게 되면, autodig 와 my-pass로 나뉘게 됩니다.


그래서 아까의 "(큰따옴표) 를 사용해서 인자를 묶어주면,



다음과 같이 level 4의 비밀번호를 얻을 수 있게 됩니다.

'Security > HackerSchool FTZ' 카테고리의 다른 글

FTZ Level 4  (0) 2017.09.11
FTZ Level 2  (0) 2017.09.05
FTZ Level 1  (0) 2017.09.05

+ Recent posts