ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <wargame.kr> strcmp
    Wargame/wargame.kr 2021. 10. 22. 21:41

     

    strcmp

    strcmp 함수를 우회하면 인증 키 값을 얻을 수 있다고 한다.

    우선, 소스코드를 살펴보자

    file_get_contents("/var/lib/dummy_file")는 "/var/lib/dummy_file" 파일을 문자열로 반환한다.

    그 후, 랜덤 한 값과 위의 문자열을 md5 해시 계산하여 32자의 16진수로 반환한다.

    이 해시값과 랜덤한 값을 sha1 해시 계산하여 40자의 16진수로 반환한 것을 $password로 한다.

     

    'password' 입력 폼 값이 있으면 브루프포스 공격을 방지하기 위해 1초 대기한다.

    그리고 'password' 입력 폼 값과 $password의 값을 비교하여 같다면, 인증 키 값을 얻게된다.

     

    <풀이 방법>

    위의 단계를 거꾸로하면 풀 수 있을까? 했는데 rand()가 있기때문에 거의 불가능한 방법이다.

    이 문제는 strcmp()의 취약점을 이용하면 풀 수있다. 특정한 PHP버전에서 strcmp()의 인자 값으로 배열을 넣는 경우 NULL 값이 반환된다. 또한, PHP에서 NULL과 0을 ==연산자를 이용하여 비교했을때 True를 반환한다. ==연산자는 느슨하게 검증을 수행하기 때문이다.

     

    개발자 도구(F12)를 통해 'password' 입력 폼 값을 password[]의 배열 형태로 변경하여 전송할 수 있다. 그러면 아무 값이나 보내도 결과적으로 필터링을 우회할 수 있다.

    PHP에서는 "==="연산자를 지원한다. "==="연산자는 "=="에 비해 훨씬 엄격하다. "==="연산자를 이용하면 비교하는 두 값과 타입이 모두 같아야만 True값을 반환한다.

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

    <wargame.kr> DB is really GOOD  (0) 2021.10.25
    <wargame.kr> md5 password  (0) 2021.10.24
    <wargame.kr> fly me to the moon  (0) 2021.10.21
    <wargame.kr> WTF_CODE  (0) 2021.10.20
    <wargame.kr> login filtering  (0) 2021.10.19
Designed by Tistory.