2022. 3. 8. 02:57ㆍSite/FTZ
이번시간에는 level14에 대하여 풀어보겠습니다
공부를 하는 입장이니 틀린게 있어도 양해부탁드리겠습니다
ls -al을 통해 전체목록을 확인해보니 이번에도 attackme라는 파일이 존재합니다
cat hint를 통해 hint내용을 보니 위같은 소스코드가 나와있습니다
보이는건 buf에 20bytes가 할당되어있는데 fgets함수를 통해 45bytes 입력받으면 버퍼오버플로우 취약점이 발생합니다
또 이번에는 check와 0xdeadbeef를 비교하여 일치하면 level15권한으로 바꿔주고 shell을 실행시켜주네요
접근방법은 check에다 0xdeadbeef만 넣어주면 권한을 얻을수있으니
buf와 check의 거리를 구해서 사이에 쓰레기값을 넣고 check의 위치에다가 0xdeadbeef를 넣어주어서 권한을 얻어보겠습니다
*
int형변수 crap선언
int형변수 check선언
char형 buf배열에 20bytes할당
fgets함수를 통해서 buf에 문자열 45bytes 만큼 입력받음
만약check의 값이 0xdeadbeef라면
level15 id
/bin/sh 실행
*
gdb를 통해서 attackme를 실행시켜줍니다
main+6에서[4bytes] 총 70bytes공간확보
main+9에 stdin, main+15에 45, main+17 ebp-56을 eax에 복사하여 fgets함수에 전달
함수인자를 stack에 전달할때는 역순이므로 stdin, 45, buf순이 되겠고 마지막 push가 buf의 시작주소 = ebp-56
main+29 ebp-16과 0xdeadbeef 비교 -> ebp-16이 check의 주소값인걸 예상할수있겠네요...
결론 : buf와 check의 거리 = 총 40bytes -> [buf((20bytes) + dummy(20bytes) + check(4bytes)]
-> buf + dummy에 40bytes를 쓰레기값로 채워준다음 check에 해당하는 4bytes에 0xdeadbeef넣어줌
다음시간에는 level15를 풀어보겠습니다...
'Site > FTZ' 카테고리의 다른 글
FTZ level16 (0) | 2022.03.09 |
---|---|
FTZ level15 (0) | 2022.03.09 |
FTZ level13 (0) | 2022.03.07 |
FTZ level12 (0) | 2022.03.06 |
FTZ level11 (0) | 2022.03.04 |