본문 바로가기

30./36. Exploit-Exercises

[exploit-exercises] Nebula level 01

Nebula level01


About

There is a vulnerability in the below program that allows arbitrary programs to be executed, can you find it?


To do this level, log in as the level01 account with the password level01 . Files for this level can be found in /home/flag01.


Source code


1#include <stdlib.h>

2#include <unistd.h> 3#include <string.h> 4#include <sys/types.h> 5#include <stdio.h> 6 7int main(int argc, char **argv, char **envp) 8{ 9 gid_t gid; 10 uid_t uid; 11 gid = getegid(); 12 uid = geteuid(); 13 14 setresgid(gid, gid, gid); 15 setresuid(uid, uid, uid); 16 17 system("/usr/bin/env echo and now what?"); 18}









실행해야하는 파일은 /home/flag01 디렉토리 아래 있다.



flag01을 실행하면 "and now what?"을 확인 가능하다.




이번문제는 $PATH weaknesses 를 이용하는 문제로




현재 실행되고 있는 shell(/bin/sh)이 명령어를 검색할때 PATH에 설정된 디렉토리에서 먼저 검색해온다.




쉘어 $PATH에 /tmp 경로를 추가해준다.


/tmp의 경우 sticky bit가 설정되어 특별한 권한이 생긴다.

[sticky bit]

사용자가 아무나 파일을 넣어 놓을 수 있는 디렉토리를 가지고 있다면 어느 누구나 다른 사람의 파일을 지울 수 있다. 이때, sticky bit를 설정하게 되면, 아무나 해당 디렉토리에서 파일을 삭제할 수 없게 되며, 파일을 삭제할 수 있는 사용자는 다음과 같다.

> 파일의 소유자

> 디렉토리 소유자

> 슈퍼 유저






/bin/bash를 심볼릭 링크를 걸어서 /tmp/echo를 만들고 실행한다.

하지만, system안에 작성된 "and now what?"을 파라미터로 인식하여 실행되지 않는다.

 


간단한 bash script를 작성하여 파라미터로 인식되는 부분을 무시한다.