2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level11 풀이과정
자.. 뭘해야될지.. 알지?...요? 힌트를 보장~
level11이랑 비슷하게 보이지만, 다르다.(당연히 다르니까 level12겠지!!)
level11은 인자값으로 문자열을 입력받았다면, level12은 gets함수를 통해서 문자열을 입력 받는다.
level12도 str(256) + dummy(8) + SFP(4) + RET(4) 이렇게 메모리 구조가 되겠다.
level11과 똑같은 구조이지만, 입력받는 방식이 다르다는 차이점이다. <그림 11-2>와 <그림 12-3>을 비교해보면 알 수 있다.
따라서, 문자열을 입력시키는 방법만 다르게 하면 문제는 level11과 똑같이 풀릴것이다.
그래서 우린 Pipe('|')를 이용할 것이다. Pipe명령어는 왼쪽 표준출력을 오른쪽의 표준입력으로 넘겨주는 역할을 한다.
그림 <12-4>를 보면 환경변수 주소값을 출력하는 env파일의 출력을 attackme에 입력값으로 넘겨 주어서 attackme가 출력하는 것을 볼 수있다.(물론 쓰레기값도 출력되었지만...)
그래서 level11과 같이 python 코드로 "A"268개와 환경변수 주소값을 넘기면 되지 않을까?
환경 변수에 관한 내용은 level11풀이 참조. (http://eunice513.tistory.com/56)
생각 처럼 되지 않은 것 같다. 뭔가 되는것 같지만, 권한을 획득하지 못했다. 그래서 알아본 결과 저렇게 하면 ./attackme가 표준입력을 받지 못한다. 그래서 cat을 함께 써줘야 된다.
우린 동시에 두가지 명령어를 쓰는 방법을 level3에서 배웠다. 바로 ';' 세미콜론을 이용하는 방법이다.
그리고 두가지의 명령어를 통해 나온 한가지의 표준입력을 Pipe 명령어를 통해 오른쪽으로 넘겨야 되기 때문에 괄호로 묶어 주면 될 것 같다.(뭔가 복잡한...설명)
다시 정리해보면,
① Pipe는 왼쪽의 표준출력을 오른쪽의 표준입력으로 넘겨준다.
② 표준 입력을 지원하는 명령어 cat과 python을 함께 쓰기 위해 ';'(세미콜론)을 사용한다.
③ python과 cat의 조합으로 나온 표준출력을 한번에 넘기기 위해 '(', ')'(괄호) 사용