System/FTZ2017. 5. 20. 01:17

▲힌트 내용. 드디어 BoF문제가 나타나고 있다. 잘 안보이니 아래를 보고 분석해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//다음은 /usr/bin/bof의 소스이다.
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
main(){
 
  char buf2[10];
  char buf[10];
 
  printf("It can be overflow : ");
  fgets(buf,40,stdin);
 
  if ( strncmp(buf2, "go"2== 0 )
   {
        printf("Good Skill!\n");
        setreuid( 30103010 );
        system("/bin/bash");
   }
 
}   
 
//이를 이용하여 level10의 권한을 얻어라.
 
cs

▲보면 buf2배열과 buf배열을 각각 10씩 주고있다.

입력값은 buf에 40개를 받는데 비교는 값을 받지 않는 buf2를 비교한다. 이게 어찌된 일일까?

메모리 구조를 보며 생각해보자.

Low 

buf [10] 

buf2 [10] 

SFP [4] 

RET [4] 

 High

▲BoF는 값을 넘치게 입력하여 다른 변수의 값을 덮어 버릴 수 있는 공격이다.

즉 buf에 10바이트 넘는 값을 입력하게 되면 buf2로 넘어가게 된다.

그러므로 10개의 아무값이나 입력 하고 go를 입력해주면 된다.





▲근데 뭘까? 입력했는데 아무런 반응이없다. 당황할 수 있다.

하지만 사실 메모리 구조에는 더미값이라는 쓰레기값이 사이사이 존재한다.

현재 상황에서는 더미값이 몇바이트인지 정확히 알기는 귀찮으니

그냥 go를 덮어주면 더미값을 넘어 buf까지 도착할 것이다



▲ Correct!

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

[FTZ school] level 11  (0) 2019.03.19
[FTZ school] level 10  (0) 2019.03.17
[FTZ school] level 8  (0) 2017.05.20
[FTZ school] level 7  (0) 2017.05.20
[FTZ school] level 6  (0) 2017.05.20
Posted by BadSchool