Exploit-exercises Nebula level02 [ system()함수 ]

2017. 5. 30. 09:15SystemHacking/Neblua


 


해당 소스코드는 flag02의 소스코드입니다


 < 그림 2.1 >


asprintf( &buffer, "/bin/echo %s is cool" , getenv("USER") );

getenv함수는 해당 이름에 해당하는 환경변수의 값을 가져오는 함수입니다

USER라는 이름으로 level02가 환경변수에 저장되어있어서 level02 가 %s 에 들어가게 됩니다

asprintf함수에 의해서 buffer라는 변수에 "/bin/echo level02 is cool" 이라는 변수가 저장됩니다

그리고 system함수에 의해서 ehco 명령어가 실행된다. 


아래는 /home/flag02/flag02의 실행화면이다


< 그림 2.2 >


어떻게 flag02의 권한을 가질 수 있을까? 이번 문제는 system()함수의 취약점을 이용하는 문제이다


[1] flag02의 uid를 알아보자 ( $cat /etc/passwd )


< 그림 2.3 >


[2] 쉘코드 획득 소스작성


< 그림 2.4 >


[3] 환경변수 USER 조작

환경변수 USER의 값이 system의 인자로 들어가서 작동하기 떄문에 USER를 이용한 공격을 시도하자

" ; " 기호는 " and " 와 같은 의미의 기호이다. 즉, " A ; B " A명령어 실행 후 B명령어를 실행하라 의 의미를 가진다


< 그림 2.5 > 


eh.c 라는 쉘코드를 획득하는 소스를 작성하고 eh파일로 컴파일 시켜놓습니다

그리고 환경변수 USER에 eh파일을 실행시킬 수 있도록 바꿔주었습니다. 처음에 ' "" ' 가 없어서 USER=hello~ 가 적용되고 eh파일이 level02의 권한으로 쉘이 얻어졌습니다

다시 USER="hello~;/home/level02/eh;" 로 바꿔준 후 /home/flag02/flag02 파일을 실행시켜주면 flag02의 권한이 얻어지고 쉘이 떨어집니다


[ 동작과정 ] system("/bin/echo hello~"); 이 수행된 후 system("/home/level02/eh"); 가 실행되어서 쉘이 떨어집니다


< 그림 2.6 >




level02 해결했습니다.