FTZ 15 Level
ID : level15
Passwd : guess what
접속해서 ls 명령어로 파일과 디렉터리를 확인합니다.
cat 명령어로 hint를 열어보면 level14와 다른 점이 하나 있습니다. level14에서는 check 변수가 int형이였지만 level15에서는 check 변수가 int * (포인터) 형이라는 것입니다.
level14에서는 ebp-56 ~ ebp-16 만큼 dummy 값을 채워주고 check 값을 0xdeadbeef로 변조합니다.
level15에서는 ebp-56 ~ ebp-16 만큼 dummy 값을 채워주고 check 값을 0xdeadbeef를 담고있는 메모리 주소로 변조합니다.
그럼 0xdeadbeef가 어디에 위치하고 있을까요?
데이터를 코드 내부에 직접 입력하는 것. 기술적으로는 데이터가 실행 바이너리(exe 파일 등)에 합쳐져 있는 상태를 말한다. 프로그램의 소스 코드에 데이터를 직접 입력해서 저장한 경우, 즉 모든 '상수'는 하드코딩이다. (출처 : 나무위키)
코드에 상수 0xdeadbeef와 *check를 비교하는 부분이 있습니다. 그럼 main 함수의 코드에 0xdeadbeef 라는 값이 위치하고 있을 수도 있겠네요.
tmp에 복사하고 gdb로 main 함수의 메모리를 봅시다.
정말 0xdeadbeef 라는 값이 위치하고 있습니다. 코드 영역은 변동이 없어서 정확한 주소를 찾아내고 전달해줄 수 있습니다.
더 정확한 위치를 찾아봅시다.
0xdeadbeef가 있는 주소는 0x080484b2 입니다. 페이로드를 짜봅시다.
payload : (python –c ‘print “A”*40 + “\xb2\x84\x04\x08”’; cat) | ./attackme
이렇게 구성되겠네요. 원본 파일에 공격을 시도하겠습니다.
exploit!
감사합니다.
'System&Write up > FTZ' 카테고리의 다른 글
FTZ level17 -> level18 Write up (0) | 2017.09.27 |
---|---|
FTZ level16 -> level17 Write up (0) | 2017.09.25 |
FTZ level14 -> level15 Write up (0) | 2017.09.25 |
FTZ level13 -> level14 Write up (0) | 2017.09.25 |
FTZ level12 -> level13 Write up (0) | 2017.09.24 |