본문 바로가기
Hack/ftz

ftz 풀이 level14

by Choraengyi 2017. 1. 3.

 ftz level14 풀어보겠습니다.


힌트조회 입니다.



 fgets 함수가 있는것으로 보아 버퍼오버플로우문제임을 알 수 있습니다. 또한 attackme 실행시에 입력을 받으면 바로 종료되기 때문에 이를 방지하기 위한 cat과 파이프를 이용하여 명령어를 사용하는 방법도 생각할 수 있습니다. 그 전과 다른점은 0xdeadbeef 값이 존재할 경우에 쉘을 실행시켜줍니다. 이번에는 따로 쉘코드는 설정안해도 될거 같습니다.


우선 디스어셈블러로 대략의 구조를 보겠습니다.




버퍼에 56바이트를 할당하는데 위에 변수 두개가 있었으므로 대략 구조는 아래와 같이 생각할 수 있습니다.



20(배열)+(dummy)+4(crap)+(dummy)+4(check)+(dummy)=56


그리고 빨간표시로된 부분을 보게 되면 <main+17>에서  입력받는 값을 넣을 수 있는 주소를 0xffffffc8로 지정합니다. 그럼 저기서부터 56바이트를 쓴다고 생각할 수 있습니다. 그렇다면 0xffffffc8~0xffffffff(56Byte)를 사용한다고 보면될거 같습니다. 그 이후에 <main+29>에서는 0xfffffff0과 0xdeadbeef를 비교하게 됩니다. 0xfffffff0 은 저위의 범위에 포함되어있습니다. 그렇다면 0xfffffff0 에서부터 deadbeef의 값이 있으면 된다고 생각하면 됩니다. 논리적 위치를 구하기 위해 0xfffffff0-0xffffffc8 을 해주면 40이 나오게 됩니다. 그러면 40바이트는 아무거나 채우고 그 뒤에 deadbeef 값을 넣어주면 될거 같습니다. 최종 명령어는 아래와 같이 입력하여 실행 하면 attackme가 종료되지 않습니다.



ftz level14 풀어보았습니다.


728x90
반응형

'Hack > ftz' 카테고리의 다른 글

ftz 풀이 level16  (0) 2017.01.06
ftz 풀이 level15  (0) 2017.01.04
ftz 풀이 level13  (0) 2017.01.02
ftz 풀이 level12  (0) 2016.12.31
ftz 풀이 level11  (0) 2016.12.28

댓글