chipkkang9's story

[FTZ HackerSchool] Level 3 write-up 본문

Wargame/FTZ HackerSchool

[FTZ HackerSchool] Level 3 write-up

chipkkang 2022. 8. 13. 22:22

level3 접속

 

level3 문제에 접속해보도록 하자.

level3 / can you fly? 이다.

 

level3 / can you fly -> ls

 


 

level3 문제해결

마찬가지로 접속해보니 hint 파일이 있었다. 한 번 열어보자.

 

cat hint

이번엔 힌트가 웬 코드로 주어진다.

코드를 분석해보자.

 

우선 첫 세 줄을 보니, C언어 파일임을 짐작해볼 수 있다.

int main(int argc, char **argv){
    char cmd[100];

 

첫 줄은, main 함수로 argc와 argv 인자를 받는다. 그 다음, cmd 인자에 100짜리 길이인 문자열을 선언한다.

argc, argv란?
main 함수의 매개변수를 의미한다. 다른 함수의 경우, 함수를 실행시킬 때 소괄호() 안에 매개변수를 넘겨준다.
main 함수 또한 마찬가지인데, argc, argv 두 가지로 이루어져 있다.

1) int argc
이것은 main 함수에 전달되는 정보(인자)의 개수를 의미한다.

2) char** argv
이것은 메인함수에 전달되는 실질적인 정보로, 문자의 배열을 의미한다. 첫 번째 문자열은 프로그램의 실행경로로 항상 고정되어있다.

 

if( argc != 2 ){
    printf( "Auto Digger Version 0.9\n" );
    printf( "Usage : %s host\n", argv[0] );

    exit(0);
}

 

if문은 argc 즉, main함수로 전달된 인자의 개수가 2가 아닐 경우에 if문 안에 있는 내용을 실행한다.

그런데, 이를 실행하는 동시에 level4의 bash를 얻을 수 있는 길은 없는 것 같아서 argc 값은 항상 2로 고정되어야 하는 것을 알 수 있었다.

(if문을 우회하기 위해)

 

그러면 어떤 값을 넣어주어야 할까? 뒤의 코드를 따라가보면 알 수 있을 것 같다.

 

strcpy( cmd, "dig @" );
strcat( cmd, argv[1] );
strcat( cmd, " version.bind chaos txt" );

system( cmd );

 

어떤 코드인지 파악은 되지만, 어떤 의도로 이 코드를 넣어놓은지는 파악되지 않는다.

 

우선 코드의 역할은, cmd 변수에 dig @를 넣은 후, argv[1] 값을 이어붙인 후에 version.bind chaos txt를 이어붙인다.

그 후 cmd 문자열을 system 명령어로 실행시킨다.

 

뒤를 더 읽어보자. 추가힌트가 있다.

 

more hints.
- 동시에 여러 명령어를 사용하려면?
- 문자열 형태로 명령어를 전달하려면?

 

힌트로 두 가지가 주어졌다. 그리 어려운 고민들은 아니라, 하나씩 답을 해보자.

 

1) 동시에 여러 명령어를 사용하려면?

Command Injection이 생각나는데, ";, &&, ||"와 같은 특수문자를 사용해주면 동시에 여러 명령어를 사용할 수 있다.

 

2) 문자열 형태로 명령어를 전달하려면?

간단하게 double quotes(")를 사용하면 문자열 형태로 전달할 수 있다. (물론, single quote, backtik 또한 가능하다.)

 

이를 종합해보면, argv[1]에 전달되는 값을 문자열의 형태로, 여러 명령어(my-pass)를 실행할 수 있는 값으로 넣어주면 될 듯하다.

 

결국 넣어줄 값은, ";my-pass" 면 될 것 같다.

 

그 전에, level4의 권한을 가진 파일을 열어보도록 하겠다.

이전에 썼던 명령어로 같이 level4 특수 권한을 가진 파일을 찾아보자.

 

find / -perm -4000 -user level4 2> /dev/null

 

그러면 bin 폴더에 autobig을 실행해서 위에서 생각해 둔 명령어를 실행해보자.

 


level4 Password 획득

 

cd /bin → ./autodig ";my-pass"
level4 password 획득

 

level4의 password는 "suck my brain"이다.

Comments