환경

    [해커스쿨] FTZ level14 풀이과정

    [해커스쿨] FTZ level14 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level13 풀이과정 보자보자!! 힌트를 보자!!!int 변수를 2개 선언하고, 20byte 배열 하나 선언하고 ... 그런데 45byte만큼 buf로 fgets 하네...check라는 변수에 0xdeadbeef가 들어있나 확인하네.. 정확하게 gdb로 파헤쳐보자. 보아하니.. 0x38(56byte)만큼 공간 할당하고, [ebp-56]에 fgets로 받은 문자열을 저장하고, [ebp-16]에 0xdeadbeef가 있구먼... fgets함수 바로 다음인 에 BP걸고 대충 아무 값인 "AAAAAAAA"을 넣고 실행해보니..일단 입력 받은 문자열이 들어가는 주소는 "0xbffff210"이네... 그런데 "0xdeadbeef"값이 안보인..

    [해커스쿨] FTZ level13 풀이과정

    [해커스쿨] FTZ level13 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level12 풀이과정 소스코드를 보니 long형 변수 i가 존재하고, i의 값이 0x1234567이 아니면 경고 메시지가 출력하는걸 볼 수 있다. 즉, i라는 변수의 값을 체크해서 오버플로우됬는지 판단하는 보안코드라고 볼 수 있겠다.하지만, 이는 너무 단순한 보안코드이다. 그러면 i형 변수가 가리키는 버퍼에 0x1234567을 넣으면 되지 않을까? 공격하자! gdb로 분석해보면, 일단 0x418(1048)만큼 공간을 확보하고, 0x1234567을 [ebp-12]에 저장한다.그리고 strcpy로 argv[1]인자를 복사하고나서 부분에 ebp-12의 값이 0x1234567의 값으로 잘 저장되어 있는지 체크한다.그럼 우리는 앞서 했던 ..

    [해커스쿨] FTZ level12 풀이과정

    [해커스쿨] FTZ level12 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level11 풀이과정 자.. 뭘해야될지.. 알지?...요? 힌트를 보장~ level11이랑 비슷하게 보이지만, 다르다.(당연히 다르니까 level12겠지!!)level11은 인자값으로 문자열을 입력받았다면, level12은 gets함수를 통해서 문자열을 입력 받는다. level12도 str(256) + dummy(8) + SFP(4) + RET(4) 이렇게 메모리 구조가 되겠다.level11과 똑같은 구조이지만, 입력받는 방식이 다르다는 차이점이다. 와 을 비교해보면 알 수 있다. 따라서, 문자열을 입력시키는 방법만 다르게 하면 문제는 level11과 똑같이 풀릴것이다.그래서 우린 Pipe('|')를 이용할 것이다. Pipe명령어..

    [해커스쿨] FTZ level11 풀이과정

    [해커스쿨] FTZ level11 풀이과정

    2017/01/11 - [Study :)/FTZ] - [해커스쿨] FTZ level10 풀이과정 힌트!!! 보자고~ attackme 라는 파일이 보이고, 힌트에는 어떤 소스코드가 들어있다. attackme 를 실행시켜 보니. 역시 소스코드데로 실행된다. 즉, 힌트가 attackme의 소스코드 인것이다. 그러면 이 문제는 어떻게 풀어야 될까... 소스 코드를 보니 단순히 256byte의 str배열을 선언하고 setreuid를 실행하고 argv[1]의 인자값을 str에 복사하고 str를 출력하는게 끝이다. 그런데.. strcpy를 사용하는 것을 보니 이또한 버퍼 오버플로우에 취약하다. level9 풀이(http://eunice513.tistory.com/54)를 보면 Buffer Overflow에 대한 설명..