ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] old_18
    2021/Write-Ups 2022. 2. 22. 20:13

    1팀 남채림

    문제 (webhacking.kr old_18)

    제출을 눌러도 변하는 것은 없다.

    초록색 view-source를 누르면 아래와 같은 php 코드가 나온다.

    이 부분의 중간에 solve(18)이라고 적혀있는 것을 보니 if($_GET['no'),  if($result['id]=="admin" ) 조건이 만족되면 해결될 것이다.

     

     

    페이지의 스스코드를 확인해보았다.

    키워드가 되는 부분은 없다. 

    다시 php 코드로 돌아가보면,

     

     

    no 값을 가져온 뒤, prag_match 함수로 일치 확인 후 (prag_match는 검색해보니 값을 대조하여 감지가 되면 1을 반환하고 감지되지 않으면 0을 반환하는 함수이다)  감지되면 no hack으로 빠지므로 감지를 피하여야한다. 

    감지되지 않으면 다음 조건문으로 넘어가 $result['id]가 guest이면 hi guest,  admin이면 문제가 풀린다.

    $resut에 대한 코드를 보면

    admin's no =2 라는 주석을 확인할 수 있다. Get방식이므로  url을 통해 값을 입력한다.

    url에 no=2로 변경해준다.

    그러나 변경하여 새로고침해도 변화가 없다.

    다시 확인해보니 selet 문에서 chall18 테이블에서 id='gest' 와 no=$GET[no]를 and로 동시에 만족하는 곳에서 값을 가져온다. 그러면 guest's no 또한 2여야 한다. 그러나 no=2일때 반응이 없었으므로 guest no는 2가 아니다. (아무 값이나 입력하다보니 guest's no가 1이라는 것을 알게 되었지만 정공법도 아니고 별로 도움이 되는 정보는 아니다.)

    그렇다면 앞의 조건을 무효화하는 방법을 사용해야한다. 저번 라이트업중에도 똑같은 방식이 있었던 것 같다. or을 사용해서 앞의 조건을 무효화하는 것이다. A and B or C 의 형태로 바꾸어 A and B가 flase여도 C 가 true 면 전체 조건이 true가 되도록 하는 것이다. no=2가 아니라 no=1 or no=2로 바꾸어준다( 1은 무엇으로 대체되던지 상관 없다)

     

    그래도 변화가 없다. 뭐가 잘못된 건지 곰곰히 생각해봤더니 무시했던 조건이 하나 있다. 위에서 확인했던 prag_match에서 %20(띄어쓰기)이 감지된 것 같다. %0a으로 대체해준다. (줄바꿈)

    18번을 해결했다.

    '2021 > Write-Ups' 카테고리의 다른 글

    [ctf-d] 거래 조건 알고 있잖아요?  (0) 2022.02.22
    [ctf-d] 사진 속에서 빨간색이...  (0) 2022.02.22
    [ctf-d] Find Key (butterfly)  (0) 2022.02.22
    [CTF-D] 저는 플래그를 이 파일에..  (0) 2022.02.22
    [ctf-d] GrrCON 2015 #1  (0) 2022.02.17