본문으로 바로가기

[해커스쿨 ftz - 12] level9 풀이

category 해킹/FTZ 2016. 6. 28. 02:02


level9의 힌트입니다.

fgets(char *s, int size, FILE *stream)

strncmp(const char *s1, const char *s2, size_t n)

만약에 buf2값 2칸과 문자열"go"를 비교해서 맞다면 Good Skill!를 출력하고 3010,3010권한으로 bash를 실행시켜주는것같습니다. 3010,3010은 level10권한 이겠죠?


이문제를 풀 떄 사전지식으로 BOF에대해서 알아야합니다. BOF에 대한 설명은 http://reverserbobt.tistory.com/attachment/ik2.pdf (출처 : 달고나)이곳에 잘 나와있습니다.


(구성 : buf[10] + 쓰레기값 + buf2[10] - 받을 수 있는 총량 40, 입력값의 최대 바이트와는 다르게 총 입력할 수 있는 바이트의값이 크므로 취약점 발생.)

기본적인 개념은 buf[10]과 buf2[10]이 있는데 buf가 10바이트지만 buf에 10바이트보다 더 큰 수를 집어넣음으로써 그수보다 더크게 넣어져서 buf2에도 값이 침범해서 들어가는것입니다. ( 정확하진않으며 제가아는 상식에서 적었습니다. )

그런데 메모리는 1워드로 들어가니까 10개의 값을받으려면 12바이트 즉 12개이상의 값부터 하나씩 늘려가면서 go를 입력해준다면 어느순간 쓰레기값을 넘어서고 buf2[10]부분에 앞쪽에 go가 들어가서 레벨10의 권한을 얻게됩니다.



직접 해보니까 아무거나 16번입력후 그다음 go를해주면 level10의 쉘을 얻을 수 있습니다.

그후 my-pass를 입력해보면~

끝났습니다.




'해킹 > FTZ' 카테고리의 다른 글

[해커스쿨 ftz - 11] level8 풀이  (0) 2016.06.27
[해커스쿨 ftz - 10] level7 풀이  (1) 2016.06.26
[해커스쿨 ftz - 9] level6 풀이  (0) 2016.06.25
[해커스쿨 ftz - 8] level5 풀이  (0) 2016.06.25
[해커스쿨 ftz - 7] level4 풀이  (0) 2016.06.21