$ 시스템 해킹 $/Los Of BufferOverflow

Level19 (nightmare -> xavius)

ws1004 2020. 1. 1. 14:47

 

이번 문제의 키워드는 arg 입니다.

 

stack영역 사용 불가능, binary 영역 사용 불가능

leave 와 ret로 끝나는 libc 함수도 사용 불가능 합니다.

stack도 RET를 제외하고 모두 초기화를 시킵니다.

 

또한 취약한함수로 fgets 를 사용하고 stdin 을 사용합니다.

\xbf , \x08 로 시작하는 값은 이용할 수 없기 때문에 stdin 영역이 사용하는 주소가 \xbf, \x08이 아니라면 쉽게 해결할 수 있을 것 같습니다.

 

먼저 stdin 부분에 break를 걸어서 stdin 중에서 어디에 데이터가 들어가는지 알려가보겠습다.

 

3번째 push 된 값인 ds:0x08049a3c가 stdin 이라는 것을 알 수 있습니다.

 

fgets 전과 후를 break 해서 비교해 보도록하겠습니다.

 

먼저 fgets 를 call 하는 부분인 0x8048729 에 break 를 해서 $esp 를 확인해 보면 잘들어가 있는것을 볼수 있습니다.

 

stdin 인 0x8049a3c를 확인해 보면 0x401068c0 이 있는 것을 알수 있고, 해당 주소를 한번 확인해 보겠습니다.

 

위와 같이 들어있는 것을 확인할 수 있습니다.

 

fgets 를 한뒤에는 어떻게 변할지 확인해 보겠습니다.

 

0x40015000 ~ 0x4001500a 에 넣어준 값이 들어가 있다고 한다.

 

해당 값을 이용해서 exploit을 하면 될것 같습니다.

[Dummy 19 byte] + [shellcode 25 byte] + [stdin 주소 (실행파일 RET)]

 

 

login : xavius

password : throw me away