level8에서 얻은 ID, PW로 접속한다.

 

힌트를 읽었더니 이러한 코드가 나왔다.

buffer overflow를 이용하여 풀어야하는 문제인 것 같다.

buf2, buf 순서대로 변수가 선언되었으므로 스택에 아래처럼 저장된 것을 알 수 있다.

 buf2

 buf

buf의 메모리가 주어진 값보다 더 들어가게 될 경우 buf2의 메모리를 건드릴 수 있다.

 

메모리 할당은 8의 배수로 할당되기 때문에 아래 그림처럼 메모리가 할당된다.

   ┌-------------------    buf2   -------------------┐┌-------------------    buf   -------------------┐

 X

 X

 X

 X

 X

 X

 

 

 

 

 

 

 

 

 

 

 X

 X

 X

 X 

 X

 X

 

 

 

 

 

 

 

 

 

 

X부분은 사용하지 않는 구간이다.

 

주어진 코드를 해석하면 buf2의 첫 두자리가 go인 경우 level10의 권한으로 쉘이 실행된다.

따라서 데이터를 아래와 같이 입력한다.

   ┌-------------------    buf2   -------------------┐┌---------------------    buf   -----------------┐

 X

 X

 X

 X

 X

 X

 

 

 

 

 

 

 

 

 o

 g

 6

 5

 4

 3

 2

 1

 0

 9

 8

 7

 6

 5

 4

 3

 2

 1

즉, 앞 16자리는 아무 문자나 적어주고 그다음 두자리에 go를 적어주면 된다.

 

 

이렇게 입력한다. 그리고 my-pass를 입력해주면 패스워드를 얻을 수 있다.

 

 

'Challenge > FTZ' 카테고리의 다른 글

level8  (0) 2016.01.20
level7  (0) 2016.01.20
level6  (0) 2016.01.20
level4  (0) 2015.06.25
level3  (0) 2015.06.25

+ Recent posts