ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pwnable.kr #2 collision
    Wargame Site/Pwnable.kr 2019. 2. 24. 22:19


    분야는 다르지만, pawnable.kr 이 los 보다 어려운 것 같다.





    이번에도 ssh 를 이용한 접근이다.









    우선 현재 접속한 계정정보를 알아보도록하자.






    'ls -l' 의 결과 다음과 같은 결과가 나왔고, 

    1 단계 문제와 마찬가지로 col 파일의 실행, 읽기 권한과 col.c 의 읽기 권한이 있는 것을 알 수 있다. 





    col.c 의 코드는 다음과 같았다.







    우선 인자를 넘겨주어야 한다는 점, 그리고 인자의 길이가 20 이여야 한다는 점 

    그리고 check_password ( 인자 ) 의 결과가 hashcode 와 같아야 한다는 제약조건이 있었다.




    hashcode 의 값은 0x21DD09EC 이고, 

    분석을 해보니 20 개의 char 를 int 를 가르치는 포인터로 변환했다. 

    그럼 기존의 char 들의 hex 값이 int 에 담기게 되는데,

    이 때, 1 바이트인 char 4 개를 하나의 인자로 취급한다.


    즉, input 값을 hex 로 변환했을 때, 4 바이트 씩 다섯개로 나눈 것을 모두 더해주는 함수가 되는 것이다.





    하지만 다섯 덩이를 더해줬을 때, 0x21DD09EC 인 것을 찾는 것보다 효율적인 방법이 있다.





    위의 예시와 같은 방식으로 출력값은 0x?21DD09EC 의 형태여도 상관없다.


    ? 가 2 였을 때를 가정하고 문제에 접근했다.



    221DD09EC 를 5로 나눴더니 0x6D2C352F ( +1 ) 가 나왔다.

    0x6D2C352F * 4 + 0x6D2C3530 = 0x221DD09EC




    하지만, 여기서 중요한 개념이 Little Endian 의 개념이다.



    Intel CPU에서는 리틀 엔디언 방식을 사용한다. 

    산술 연산과 데이터의 타입이 확장 / 축소될 때 더 효율적이라는 장점을 가지고 있다.







    0x6D2C352F  >  2F(/) 35(5) 2C(,) 6D(m) 로 넣어주어야한다.

     0x6D2C3530  >  30(0) 35(5) 2C(,) 6D(m) 로 넣어주어야한다.


    /5,m/5,m/5,m/5,m05,m 을 넣어주면 된다. ㅎㅎ










    0x21DD09EC 자체에 접근한 답도있다.



    -c 옵션은 파이썬 코드를 바로 실행해주는 옵션이다.

    이를 통해 인자로 넘겨주면 문제에 훨씬더 수월하게 접근할 수 있다.


    ./col `python -c 'print "\xC8\xCE\xC5\x06" + "\xC9\xCE\xC5\x06" * 4'`













    'Wargame Site > Pwnable.kr' 카테고리의 다른 글

    Pwnable.kr #5 cmd2  (0) 2019.04.11
    Pwnable.kr #4 cmd1  (0) 2019.04.09
    Pwnable.kr #3 bof  (0) 2019.03.08
    Pwnable.kr #1 fd  (0) 2019.02.24

    댓글

Designed by Tistory.