write-up/pwnable

[ftz] level2: hacker or cracker

여니두 2019. 7. 25.

텍스트 파일 편집 >> VI 편집기

쉘 명령 실행 >> VI 편집기 기능 중 "명령어 실행" 기능!

 

√ vi 명령어 실행 기능

- ":!명령어" 형식

(!: 강제로 실행. 나는 ! 없이 실행시켰다.)

- 명령어 앞에 r 옵션을 추가하면 추가 작업 없이 본문에 바로 실행 결과를 붙여넣을 수 있음

 

setuid 권한을 가진 텍스트 파일을 찾아보자.

/usr/bin 위치로 이동하여 editor를 실행해보자.

editor란 이름의 실행 파일을 실행시키니, VIM이 나왔다.

'vi 실행파일'을 다른 이름으로 복사한 것인지 한번 이 파일과 vi, vim을 비교해보자.

 

vi, vim과는 전혀 다른 크기임을 알 수 있다. 오히려 크기가 훨씬 작다.

 

√ gdb로 소스코드 분석

- procedure prelude 과정

: <main+0> main() 진입 전 EBP 주소 저장

: <main+1> 현 ESP를 EBP에 저장

: <main+3 ~ +16> main()에서 사용할 변수 공간 확보

 

>> setreuid(3003, 3003)

: 실행되면 /usr/bin/editor 파일은 일시적인 level3의 EUID 권한 갖음

 

>> system("/bin/vi")

 

 

- 결론

level3의 UID를 부여 후, system("/bin/vi")를 이용해 VI 편집기를 실행한다.

따라서 실행 파일의 크기는 당연히 /bin/vi, /usr/bin/vim보다는 작지만 VI가 실행되게 된다.

 

 

 공격

VI 명령어 입력창에서 쉘 실행 명령어를 넣어보았다.

(바로 :!my-pass 를 이용하여 실행시켜도 된다.)

완전한 셸을 얻으려면 VI 명령어 입력창에 반드시 셸을 실행시켜야 한다!

level3 권한을 얻을 수 있었다.

 

Level 3 Password = "can you fly?"

 

 

의문점: procedure prelude == 함수 프롤로그 ?

'write-up > pwnable' 카테고리의 다른 글

[ftz] level5: what is your name?  (0) 2019.08.12
[ftz] level4: suck my brain  (0) 2019.07.28
[ftz] level3: can you fly?  (0) 2019.07.28
[ftz] level1: find local shell backdoor  (0) 2019.07.25
메모리 레이아웃 기초  (0) 2019.07.24

댓글