level2/"hacker or cracker"(id/pw)를 입력 후, 로그인하여 ls 명령어를 입력하면 hint 파일이 보인다.

hint의 내용을 확인해보니 "텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데..."라고 적혀있다.



우선 level1에서 언급했던 find 명령어를 이용해 소유자가 level3이면서 setuid가 걸려있는 파일을 찾는다.

/usr/bin 경로에 editor라는 파일이 눈에 띈다.



editor 파일을 열어보면 vim(vi) 에디터 화면이 출력된다.



vim(vi) 에디터는 입력, 편집, 명령 등의 모드가 있어 각 모드에 따라 다른 동작을 한다.

에디터에 대한 자세힌 내용은 아래 링크의 위키백과를 참고하기 바란다.

https://ko.wikipedia.org/wiki/Vi


에디터의 실행 초기에는 명령 모드이다. 

명령 모드 상태에서 shell 또는 sh를 입력하게 되면 shell로 빠져나오게 되고, id를 입력해보면

uid가 level3인 것을 확인할 수 있다.



마지막으로 my-pass 명령어를 입력하면 level3계정의 비밀번호를 알 수 있다.





'wargame 풀이 > [F.T.Z]' 카테고리의 다른 글

[F.T.Z] level1 문제 풀이  (0) 2018.11.05

WRITTEN BY
CIP_Pooh

,

이번 시간에는 hackerschool에서 운영하는 F.T.Z 문제 중 level1 문제 풀이를 적어보고자 합니다.

앞으로 문제 풀이를 적는 데 있어서 제 개인적으로 고민하고 풀이를 작성한 것이라

다소 부족한 부분이 있을 수 있습니다. 언제든 지적 바랍니다~ :)



level1/level1(id/pw)를 입력 후, 로그인을 하여 ls 명령어를 입력하면 hint 라는 파일이 보인다.

cat 명령어를 통해 hint의 내용을 확인해보니 "level2 권한에 setuid가 걸린 파일을 찾는다"라고 적혀있다.



파일의 소유자가 level2이면서, setuid가 걸려 있는 파일을 찾기 위한 명령어는 다음과 같다.


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


위 명령어를 옵션별로 설명하면 다음과 같다.


 -user  [uname] : 특정 사용자의 소유권인 파일 또는 디렉터리 검색 시 사용

 -perm [mode] : 특정 퍼미션 값으로 설정된 파일 또는 디렉터리 검색 시 사용

 -2> /dev/null : 표준에러를 /dev/null로 리다이렉션 시켜 출력되지 않음


앞서 설명한 find 명령어를 통해 검색하면 bin 디렉터리에 "ExecuteMe"라는 파일이 눈에 띈다.

ls -al 명령어를 통해 확인해보니, 소유자가 level2이면서 setuid권한이 걸려 있는 것을 확인할 수 있었다.



찾은 ExecuteMe 파일을 실행시켜보도록 하자.



ExecuteMe를 실행하니 원하는 명령어 한 가지를 실행시켜 주겠다고 한다.

my-pass를 통해 바로 패스워드를 알아내고 싶지만, 사용이 불가능하므로, bash를 입력하여 쉘을 획득한다.

level2로 권한 상승이 되었는지 확인하기 위해, id를 입력하니 uid가 level2로 바뀐 것을 확인할 수 있다.



마지막으로 level2 패스워드를 알아내기 위해 다시 ExecuteMe 파일을 실행시키고, 쉘을 획득한 다음 

"my-pass" 명령어를 입력하면 비밀번호가 출력된다.





'wargame 풀이 > [F.T.Z]' 카테고리의 다른 글

[F.T.Z] level2 문제 풀이  (0) 2018.11.09

WRITTEN BY
CIP_Pooh

,

본 글은 SecurityPlus와 키콤백신 오픈소스 프로젝트 참여자 분들과 진행한 내용을 정리한 내용입니다.

 

키콤백신 가이드.pdf

 


WRITTEN BY
CIP_Pooh

,

const int * ptr  = #

                                             >>>>>>>>  const int * const ptr = #

int * const ptr = # 


위와 같이 두 가지 선언을 동시에 할 수 있다.


WRITTEN BY
CIP_Pooh

,
1
2
3
4
5
6
int main(void)
{
    int num;
    scanf("%d" , &num);
 
}



scanf 함수 내에서 외부에 선언된 변수 num에 접근 하기 위해서는 num의 주소 값을 


알아야 한다. 그래서 scanf 함수는 변수의 주소 값을 요구한다.


1
2
3
4
5
6
int main(void)
{
    char str[10];
    scanf("%s" , str);
 
}



위 코드와 같이 배열 이름 str앞에 & 연산자를 붙이지 않는 이유는


str은 배열의 이름이고 그 자체가 주소 값이기 때문에 & 연산자를 붙이지 않는다.


str을 전달함은 scanf 함수 내부로 배열 str 주소 값을 전달하는 것이다.


WRITTEN BY
CIP_Pooh

,