FTZ level14

2022. 3. 8. 02:57Site/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