ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LEVEL 12 darkknight write-up
    System hacking training/Hackerschool LOB 2018. 4. 22. 03:42

    golem -> darkknight


    오늘은 golem을 풀이를 작성해보겠다.


    [문제 + 힌트]



    문제를 보니 main()에서 하는 일은 인자가 2개 이상인지 검사하는 일뿐

    나머지의 처리는 problem_child()에서 처리한다.


    그리하여 problem_child() 를 보니 기존의 bof 와는 다르게 strncpy()를 이용하여 입력의 길이를 제한했는데

    buffer 는 40byte임에 불구하고 41byte 입력을 받을 수 있게 설계가 되어있다.


    따라서 SFP의 하위 바이트 1byte를 Overflow(Overwrite) 할 수 있다.


    그래서 뭘 할 수 있을까 생각하던 중 힌트 부분의 FPO가 보인다.


    FPO에 대해 알아봤는데 결정적인 힌트였다.




    FPO 란? ==> [Link]


    Frame Pointer Overflow(Overwrite)의 약자로 SFP의 1byte를 오버플로우 하는 기법이다.

    해커가 SFP의 1byte를 조작함으로서 ret명령 실행시 원하는 주소로 실행흐름을 조작할 수 있다.


    이 기법에 대해서는 좀 더 상세하게 포스팅하겠다.




    따라서 SFP의 1byte를 조작하여 원하는 주소로 return할 수 있다.


    FPO의 원리에 따라 SFP의 1byte를 Overflow하여야 하는데

    쉘코드가 위치한 주소보다 -4 에 위치한 주소로 SFP를 조작하면 된다.


    따라서 페이로드는 이렇게 구성된다.


    `python -c 'print "쉘코드의 시작 주소" + "NOP Sled + shellcode" + "쉘코드의 시작주소 - 4"'`


    이제 직접해보자.


    먼저 buffer에 쉘코드를 넣기 위해 buffer의 시작 주소를 알아보자.



    0x41414141이 eip 에 들어갔기 때문에 segmentation fault가 뜨고 core 파일을 생성하였다.



    0x41414141이 들어간 첫 주소를 스택을 확인하여 찾아내었는데

    buffer의 첫 주소는 0xbffffab4이다.


    다시 페이로드를 보자.


    `python -c 'print "쉘코드의 시작 주소" + "NOP Sled + shellcode" + "쉘코드의 시작주소 - 4"'`


    여기서 우리는 eip에 들어가는 값을 쉘코드의 첫 주소로 해야하는데

    buffer의 시작 주소에 +4를 해야 정확한 쉘코드가 있는 위치의 주소가 ret(pop eip / jmp eip) 과정에서 esp 값이 eip 로 들어가기 때문에

    쉘코드의 시작 주소에 buffer의 시작 주소 - 4한 위치의 주소를 넣어줘야한다.


    그리고 11byte의 Nop Sled와 쉘코드를 넣고

    SFP에 쉘코드의 시작 주소 즉 buffer의 시작 주소 -4한 주소의 마지막 바이트를 넣어줘야한다.


    이제 buffer의 첫 주소를 알았으니 공격을 해보자.



    쉘을 띄우는데 성공하였다.


    이제 디렉토리를 옮겨서 다시 익스하면



    darkknight의 권한을 가진 쉘을 띄울 수 있다.


    이로써 풀이를 마친다.


    FPO에 대한 개념은 추후 포스팅을 하겠다.

    반응형

    'System hacking training > Hackerschool LOB' 카테고리의 다른 글

    LEVEL 14 giant write-up  (0) 2018.05.12
    LEVEL 13 bugbear write-up  (0) 2018.04.26
    LEVEL 11 golem write-up  (0) 2018.04.20
    LEVEL 10 skeleton write-up  (0) 2018.04.11
    LEVEL 09 vampire write-up  (2) 2018.04.04
Designed by Tistory.