ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Challenge 1.
    Web hacking training/webhacking.kr 2017. 9. 17. 22:06

    풀이해보겠습니다.


    배점이 200점이나 되는군요 



    처음 페이지에 들어가보면 level : 1 과 그 밑에 index.phps 가 링크가 걸려있어서 누르게 되면


    이러한 php 소스코드를 볼 수 있게 됩니다.


    처음 소스코드를 접했을때 지레 겁먹고 이게 뭐야... 했는데 보다보면 c언어의 문법 구조와 흡사한것을 느끼실 겁니다.


    하지만 저는 php를 배운적이 없기때문에 조금 어려움이 있었습니다. ㅠ.ㅠ


    설명 들어갑니다~(기초부터 차근차근)


    소스코드를 보시다보면 html과 php가 있는데 php부분만 보시면 되겠습니다. 저 html 코드에서는 font color와 index.phps 의 링크 코드 밖에 없기때문입니다. 


    그리하여 php 소스부분을 보면 위쪽에서 


    이곳 부터 설명을 해드리겠습니다. 


    if문은 다들 아시겠지만 조건을 만족해야 실행되는 문법이라고 할 수 있겠습니다. 저 조건부분에 !가 들어감으로서 $_COOKIE[user_lv] 값이 0이 되면 참이되고 0이 아니라면 부정을 의미하겠군요.


    여기서 if문이 통과하면 SetCookie() 함수를 볼 수 있습니다.


    이 함수의 원형은 SetCookie(쿠키명,쿠키값,만료시간,경로,도메인,보안,httponly) 입니다. 여기서 인자값에 쿠키명은 필수적이며 나머지는 아닌듯합니다.


    이제 다시 문제로 돌아가보면 user_lv라는 이름을 가진 쿠키에 값 1을 넣는 것을 하는것이 보이실겁니다.

    또한 밑의 echo(하나 이상의 문자열 출력 / 함수 x)로 새로고침을 해주는 것을 보실 수 있습니다.


    여기까지만 보면 어떻게 공격해야할지 감이 잡히지 않습니다. 


    그리하여 밑의 php 소스를 해석해 보겠습니다.

    아래부분의 소스는 이러합니다. 


    $password 라는 변수에 문자열 "????" 를 넣어줍니다. 참고로 php에서 $ 이 달러 기호는 변수라는 것을 의미해준다고 배웠습니다.


    또 더 아래 if문 조건들을 보면 eregi라는 함수를 이용하여 0~9의 숫자는 제외(^ 이 기호가 제외를 의미합니다.) 하며 양쪽 값을 비교하여 참일때 쿠키에 값 1을 넣어줍니다. 

    즉 문자열을 검사하여 0~9가 아닌 다른 쿠키값이 들어가있다면 쿠키값을 1로 바꿔버린다고 이해하시면 될것같습니다. 


    ------eregi() 함수의 추가 설명------

    원형은 eregi(string,$pattern,string $string[array&sregs]) 고, 여기서 이 문제를 풀기위한 개념만 파악합시다. ㅎ

    string -> 검색문자열, $pattern ->패턴지정 (일치 패턴 -> true/ 불일치 -> false반환)

    쉽게 설명하여 eregi("찾고자 하는 문자","임의의 값") 으로 두개의 값을 비교하여 같다면 1을 반환하고, 같지 않다면 0을 반환합니다. 

    ------------------------------------------------------------------------------------------------------------------------


    또 만약 쿠키값이 6일때도 1로 바꿔주네요 ㅎㅎ


    제일 중요하다고 여기는 solve(); 부분의 조건을 보시면 쿠키값이 5보다 크면 solve()를 호출하게 되어있는것을 확인할 수 있습니다. 또한 조건이 맞지 않는다면 echo로 쿠키값의 변화에 따라 어떤 값이 쿠키에 들어갔는지 출력을 해주기도 하네요.


    이제 소스 해석은 다 했으니 조건에 맞는 쿠키값을 넣어주면 문제가 풀릴것입니다.


    어떤 값을 넣어야할까요?

     어떻게 넣어야할까요?! 


    일단 solve()를 호출하여야 하는데 조건이 이러하답니다. 


    - 0~9에 속하지 않는 값을 넣으면 안된다.

    - 6보다 크거나 같아도 안된다.

    대충 감이 잡힙니다. 0~9 에 속하고 6보다는 커도 안되고 같아도 안됩니다.

    그렇다면 5.1 ~ 5.9 까지의 아무값이나 넣으면 가능할 것으로 보입니다.


    저는 이 값을 넣는데에 EditThisCookie 라는 chrom에서 제공하는 확장프로그램을 이용하였습니다.



    이제 이것을 사용하여 쿠키값을 변조해보겠습니다. 



    저는 적당하게 5.5라는 수를 넣어봤습니다. 초록색 체크를 누르고 새로고침을 해보면 풀었다는 확인이 나올것입니다. !! (저는 한번 풀어서 이미 풀었다는 텍스트를 출력해주더군요) 


    이상 Challenge 1. 풀이를 마치겠습니다. 





      


     




    반응형
Designed by Tistory.