▲힌트 내용. 드디어 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( 3010, 3010 ); 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 |