ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [FTZ] FTZ level3 문제 풀이 ( write up )
    정보보안/CTF write-up 2020. 4. 25. 04:09

     

    FTZ level3 문제를 풀어보도록 하겠습니다.

     

     

    힌트 체크 

     

    level3로 로그인하여 ls -l 리스트 명령어를 입력하니, 이번에도 hint 파일이 있습니다.

     

     

    이번 hint는 autodig의 소스코드와 두가지 힌트가 더 있습니다.

     

    int main(int argc, char **argv)

    우선 소스코드를 보면 autodig라는 프로그램은 main에서 매개변수로 argv에 값을 받은 다음 처리하는 것을 알 수 있습니다.

     

    if( argc!=2 )

    이 인수의 개수는 파일 실행을 포함하여 두 개가 아니면 안 됩니다.

     

     

    인수를 1개 이상 입력하면 Autodig 사용법을 출력하는 소스가 있습니다.

    ./autodig aaaa

    이러한 형식으로 인수 한 개만 받는 것을 알 수 있습니다.

     

     

    strcpy는 두번째 인자를 첫 번째 인자로 복사하는 함수이고,

    strcat는 두 번째 인자를 첫 번째 인자에 결합하는 함수입니다.

     

    따라서 이 소스에서는 cmd 라는 변수에

    dig @(argv[1]) version.bind chaos txt

    가 들어감을 알 수 있습니다..

     

    여기서 dig라는 프로그램은 윈도우의 nslookup과 같이 도메인 주소를 ip주소로 변환해주는 프로그램입니다.

    dig [@server]

    라고 사용하면 됩니다.

     

     

    첫 번째 힌트인 동시에 여러 명령어를 사용하기 위해서는 세미콜론( ; )을 사용해주시면 됩니다.

     

    명령어1 ; 명령어2

    라고 입력하시면 명령어1을 수행한 후에 명령어2를 수행하게됩니다.

     

    두 번째 힌트인 문자열 형태로 명령어를 전달하기 위해서는 따옴표( " / ' / ` )를 사용해주시면 됩니다.

     

    쉘에서 띄어쓰기나 세미콜론, 파이프를 동반하여 문자열을 입력할 경우,

    각각을 하나의 인수로 인지하기 때문에 동시에 하나의 문자열로 전달하기 위해서는 주위에 따옴표를 달아주어야합니다.

     

     

     


    문제풀이 

     

    이제 힌트를 모두 확인하였으니 문제를 풀어보겠습니다.

     

     

    find 명령어를 사용하여 setuid가 걸린 autodig라는 프로그램을 찾아주면

    /bin 디렉토리 안에 있다는 것을 알 수 있습니다.

     

     

    인자 없이 autodig를 실행하니 autodig와 호스트 주소를 적어달라고 나옵니다.

     

     

    다시 이 코드를 보면 argv에 들어가는 값을 호스트 주소가 아닌 다른 값을 넣어 쉘을 실행시켜준다면,

    setuid가 걸려있는 파일이므로 level4의 권한을 얻을 수 있습니다.

     

     

    위와 같이 두 구문으로 나눌 수 있습니다. 이를 각각 적으로 수행하고, 그 사이에 제가 원하는 명령을 입력할 수 있습니다.

     ; (명령어) ; 

    가 들어가면 원하는 명령을 사이에 넣을 수 있습니다.

     

    그리고 이는 세미콜론으로 각각의 명령어로 인식되기 때문에 전체에 따옴표를 씌어주셔야합니다.

     

     "

    id를 넣어 수행이 되는지 확인 해보겠습니다.

     

     

    우선 빨간 네모에서 dig @; 이 수행된 것을 확인 할 수 있습니다.

     

    그 다음 파란 네모에서 id; 가 수행되어 출력된 것을 볼 수 있습니다.

     

    마지막 초록 네모에서 version.bind chaos txt는 없는 명령어이기에 수행하지 못한 것까지 확인할 수 있습니다.

     

    추가적으로 id를 보시면, setuid가 걸렸기 때문에, userID가 일시적으로 level4로 바뀐 것을 확인 할 수 있습니다.

     

     

    이번에는 쉘을 입력하여 권한을 유지시켜보았습니다.

    whoami를 입력하니 level4로 변경된 것을 확인 할 수 있습니다.

     

    이제 my-pass를 입력하여 다음 level의 비밀번호를 알 수 있습니다.

     

     

    이상 해커스쿨 FTZ level4 풀이였습니다. 감사합니다^^

     

    반응형
Designed by Tistory.