2017. 5. 30. 09:15ㆍSystemHacking/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 해결했습니다.
'SystemHacking > Neblua' 카테고리의 다른 글
Exploit-exercises Nebula level06 [ John the Ripper ] (0) | 2017.05.30 |
---|---|
Exploit-exercises Nebula level05 [ SSH key , tar ] (0) | 2017.05.30 |
Exploit-exercises Nebula level04 [ Link ] (0) | 2017.05.30 |
Exploit-exercises Nebula level01 [ 환경변수 ] (0) | 2017.05.30 |