Information Security

[FTZ] Level 9 본문

INTERLUDE/System Hacking

[FTZ] Level 9

sohexz 2021. 11. 9. 19:26

Level 9

 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

main(){

  char buf2[10];
  char buf[10];

  printf("It can be overflow : ");
  fgets(buf,40,stdin);

  if ( strncmp(buf2, "go", 2) == 0 )
   {
        printf("Good Skill!\n");
        setreuid( 3010, 3010 );
        system("/bin/bash");
   }

}

해석해보자

 

buf2라는 배열 10칸

buf라는 배열 10칸

 

fgets를 입력받은 값을 buf에 저장해주는데 40이하여야 한다

 

setreuid(ruid, euid) 

ruid: Real User ID의 약자로 실제 본이느이 프로세스 id를 의미한다

euid: Effective User ID의 약자로 SetUID 모드의 프로세스가 실쟁 중일 때 부여되는 파일 소유자의 id를 의미한다

=> Set Real and Effective user ID의 약어로 Real user ID와 Effective user ID를 설정하는 역할

SetUID가 설정된 파일에서 setreuid(geteuid(),geteuid())를 사용하면 ruid가 euid로 변경 후

bash 등 명령을 실행하면 ruid(현재 euid로 변경된) 실행

함수의 원형 -> int setreuid(uid_t* ruid*, uid_t*euid*);

출처: https://blog.naver.com/emmaeunji/222082272535

 

setreuid의 개념

setuid는 질리도록 들었는데, setreuid는 정말 개념 설명 해준 곳이 없더라. 그래서 개인적으로 괜찮은 설...

blog.naver.com

 

strncmp : 문자열이 같은지

buf2와 "go"가 앞 2개가 같으면

Good Skill!을 출력하고 

권한 얻고

/bin/bash 실행

 

overflow를 이용하여 풀어야 하는 문제이다

 

buf 10개 buf2 10개 에 문자를 줄 수 있는데 fgets를 이용해 40개의 문자를 받을 수 있다

내가 0123456789를 받으면 buf는 꽉 차게 된다

 

buf2의 앞 부분 2개가 go여야 하기 때문에

만약 0123456789go를 받게 되면?

buf 0123456789

buf2 go

이렇게 값이 들어가게 될 것이다

 

/usr/bin/bof를 실행시켜서 0123456789go 를 입력해 넣어보자

아무런 반응이 없다

buf와 buf2 사이에 거리가 있다는 뜻이다

buf

l

l

l

buf2

 

0123456789와 go 사이에 다른 문자들을 하나씩 늘려가면서 실행해보자

 

012345 6자리를 더 넣어주니 Good Skill!이 나오면서 실행되었다

buf와 buf2의 사이 거리는 6이었나 보다

 

level10이 권한을 얻었으니 my-pass를 이용해 비밀번호를 알아내자

 

 

level 10 비밀번호 획득 성공!

 

 

'INTERLUDE > System Hacking' 카테고리의 다른 글

[FTZ] Level 11  (0) 2021.11.18
[FTZ] Level 10  (0) 2021.11.11
[FTZ] Level 8  (0) 2021.11.04
[FTZ] Level 5 -7  (0) 2021.11.02
[FTZ] Level 4 - 5  (0) 2021.10.28