코드를 살펴보면 check 변수에 0xdeadbeef 값을 넣으면 shellout 함수가 호출되어
level19 shell에 접근이 가능하다 하지만 check 변수가 string 버퍼보다 이후에 선언되어
버퍼 오버플로우로는 접근이 불가능해 보인다.
대신 read 함수로 1byte씩 입력 받는 값이 0x08이면 count 변수가 마이너스가 되어
string 버퍼 주소의 마이너스 주소에 접근 할 수 있다.
gdb 분석을 위해 쓰기권한이 있는 tmp 디렉터리로 attckme 파일을 복사한다.
string 버퍼는 아래와 같이 ebp-100에 위치하였다.
check 변수는 아래와 같이 ebp-104에 위치하고 있다.
위를 토대로 스택을 표현하면 아래와 같다.
0x08 값을 4byte 넣어주면 string[-4]에 접근하게된다.
접슨한 주소는 위 스택에서와 같이 check 변수의 주소이고 check 변수에 0xdeadbeef 를 넣어
level19 Password를 획득할 수 있다.
[ftz] hacker school level20 풀이 (0) | 2020.04.28 |
---|---|
[ftz] hacker school level19 풀이 (0) | 2020.04.28 |
[ftz] hcaker school level17 풀이 (0) | 2020.04.28 |
[ftz] hacker school level16 풀이 (0) | 2020.04.28 |
[ftz] hacker school level15 풀이 (0) | 2020.04.28 |