Write-Up/FTZ

FTZ: Level 5

NONE_31D 2019. 9. 19. 17:39

가장 먼저 힌트를 읽어본다.

 

힌트에서 명시한 파일을 ls를 통해 살펴보니 setuid가 설정되어 있었다. 파일의 소유주가 level6이니, level6에 대한 권한이 주어진 것을 알 수 있다.

 

위와 같이 생성될 level5.tmp 파일에 대한 심볼릭 링크를 만들어두면 usr/bin/level5 에서 level5.tmp 파일을 만들고 삭제해도, 만든 내용은 심볼릭 링크를 통해 tmp에 저장되어있을 것이다.

위와 같이 /usr/bin/level5 를 실행한 후, tmp 파일을 열어보면 다음 비밀번호가 저장되어 있는 것을 확인할 수 있다. 

 


이 문제가 레이스 컨디션 공격 조건을 갖춰서 그 방법으로도 진행해봄

 

*헛짓거리 해서 조사한 레이스 컨디션 개념

...더보기

레이스 컨디션이라는 공격은 setuid를 이용하여 권한이 상승된 상태로 임시파일을 생성하고, 이를 변경하고자 하는 목표 파일로 만들어 동작시킬 수 있는데 두가지 조건이 필요하다. 원하는 권한에 대한 setuid가 설정되어 있어야하고 (이건 이미 확인했다.) 임시 파일의 이름을 알아야 한다. 임시 파일의 이름은 힌트에서 알려줬기 때문에, 레이스 컨디션 공격을 실행할 수 있는 조건이 갖춰졌다.

 

이제 공격 코드를 만들어볼텐데, 다음과 같은 내용이 들어가야 한다.

1. /tmp 아래에 tmp라는 파일 만들기. 파일은 my-pass 를 실행하는 내용이 있어야 한다.

2. /usr/bin/level5를 실행하기

3. 만들어진 level5.tmp를 삭제하기

4. my-pass를 실행하는 내용으로 파일 덮어씌우기

 

공격 코드는 다음과 같다. 

익스플로잇 코드는 단순히 /usr/bin/level5를 실행한 후, 생성된 level5.tmp 를 지우고 만들어둔 tmp 파일을 level5.tmp로 변경하는 것이다. 결과는 성공적으로 만들어졌지만, 한번만 실행될 때는 setuid가 적용된 프로그램이 끝난 후이기 때문에 출력문이 나오지는 않는다.

레이스 컨디션이라는 공격은 setuid를 이용하여 권한이 상승된 상태로 임시파일을 생성하고, 이를 변경하고자 하는 목표 파일로 만들어 동작시킬 수 있는데 두가지 조건이 필요하다. 원하는 권한에 대한 setuid가 설정되어 있어야하고 (이건 이미 확인했다.) 임시 파일의 이름을 알아야 한다. 임시 파일의 이름은 힌트에서 알려줬기 때문에, 레이스 컨디션 공격을 실행할 수 있는 조건이 갖춰졌다.

 

이제 공격 코드를 만들어볼텐데, 다음과 같은 내용이 들어가야 한다.

1. /tmp 아래에 tmp라는 파일 만들기. 파일은 my-pass 를 실행하는 내용이 있어야 한다.

2. /usr/bin/level5를 실행하기

3. 만들어진 level5.tmp를 삭제하기

4. my-pass를 실행하는 내용으로 파일 덮어씌우기

 

공격 코드는 다음과 같다. 

익스플로잇 코드는 단순히 /usr/bin/level5를 실행한 후, 생성된 level5.tmp 를 지우고 만들어둔 tmp 파일을 level5.tmp로 변경하는 것이다. 결과는 성공적으로 만들어졌지만, 한번만 실행될 때는 setuid가 적용된 프로그램이 끝난 후이기 때문에 출력문이 나오지는 않는다.

공격 코드 1.

level5 파일을 생성 후, 이 파일을 원본으로 하는 level5.tmp 파일을 만든다.

 

공격 코드 2.

1번 공격코드에서 링크 파일이 이미 생성이 되어 있기 때문에 이 코드에서 해당 파일을 실행해도 추가로 만들어지지 않음. 프로세스에서 1번 코드가 만든 level5.tmp를 링크파일로 판단, 해당 파일의 원본이라고 지정해놓은 level5에 내용 작성. 2번 프로그램이 끝나면서 level5.tmp는 사라지지만 원본인 level5가 남아 내용 확인 가능.

 

이와 같은 시나리오가 진행되기 위해 프로세스의 순서를 꼬이게 하기 위해서 10000번 (충분히 많은 횟수면 다른 숫자여도 상관 x) 반복을 하게 해주고, 공격코드 1번과 2번을 동시에 실행한다.

 

그냥 실행하면 쉘 에러 출력때문에 스크롤이 심하게 올라가므로 2> 옵션을 통해 에러는 쓰레기통에 넣고, 출력물만 확인하면 비밀번호를 확인할 수 있다.

'Write-Up > FTZ' 카테고리의 다른 글

FTZ: Level 7  (0) 2019.09.26
FTZ: Level6  (0) 2019.09.26
FTZ: level4  (0) 2019.09.19
FTZ: Level1  (0) 2019.09.19
FTZ: level2  (0) 2019.09.19