webhacking.kr 24번, 26번 풀이

julia·2021년 3월 15일
0

1주차 마지막 두 문제들!! 개인적으로 24번 문제 스타일이 재밌다. 뭔가 내가 replace되는 값을 거꾸로 생각하는? 그런 유형을 좋아하는 것 같기도ㅎㅎ 26번은 생각보다 어려웠고 브라우저와 php에 대한 새로운 개념을 알게 해준 문제였다.

💡 24번 문제 풀이

우선 php 소스코드이다.

<?php
  extract($_SERVER);
  extract($_COOKIE);
  $ip = $REMOTE_ADDR;
  $agent = $HTTP_USER_AGENT;
  if($REMOTE_ADDR){
    $ip = htmlspecialchars($REMOTE_ADDR);
    $ip = str_replace("..",".",$ip);
    $ip = str_replace("12","",$ip);
    $ip = str_replace("7.","",$ip);
    $ip = str_replace("0.","",$ip);
  }
  if($HTTP_USER_AGENT){
    $agent=htmlspecialchars($HTTP_USER_AGENT);
  }
  echo "<table border=1><tr><td>client ip</td><td>{$ip}</td></tr><tr><td>agent</td><td>{$agent}</td></tr></table>";
  if($ip=="127.0.0.1"){
    solve(24);
    exit();
  }
  else{
    echo "<hr><center>Wrong IP!</center>";
  }
?>

해석해보면.. 대충 REMOTE_ADDR 값이 존재한다면 특정 문자들을 치환해서 저장하고 ip가 127.0.0.1이면 문제가 해결된다는 뜻.
개발자 도구를 확인해보니 쿠키에 REMOTE_ADDR 값이 없길래 직접 추가해주었다(추가해주기까지 사실 꽤 오랜 시간이 걸렸다ㅋㅋㅋ '어라 REMOTE_ADDR 값이 도대체 어디 있다는거지?' 이 생각만 주구장창했다ㅜㅜ). value에는 직관적으로 우선 127.0.0.1을 넣어봤는데 예상대로 답은 아니고, 밑의 사진처럼 client ip 칸에 1이 출력되었다.

12~7.~0.~0.~1 여기서 물결 단위로 각각 두 자씩 공백으로 대체된 것이다.
따라서 우리는 .과 숫자들을 잘 조작해서, 즉 거꾸로 생각해서 client ip를 127.0.0.1로 만들어야 한다.
공백으로 대체되는 것을 막기 위해 예를 들어 1122를 입력해보면,, 가운데의 12만 삭제되므로 양 옆의 12는 남게된다. 이 점을 이용해 구한 답은 :
112277...00...00...1
1(12)27(7.)..0(0.)..0(0.)..1 여기서 괄호친 것들은 삭제되고 ..은 .으로 대체되기 때문이다!!



💡 26번 문제 풀이

26번의 php 소스 코드는 이러하다.

<?php
  if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
  $_GET['id'] = urldecode($_GET['id']);
  if($_GET['id'] == "admin"){
    solve(26);
  }
?>

그냥 단순히 id가 admin이면 되는 문제같지만,,ㅎㅎ 예상 외로 난관이 많았던 문제ㅋㅋㅋ 쉬운 문제 같아서 대충 보고 url 을 https://webhacking.kr/challenge/web-11/?id=admin 이렇게 만들었더니

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ세상 단호하게 no! ....
알고보니 php에 urldecode가 있더라,, 그래서 admin 값을 반대로 인코딩해 %61%64%6D%69%6E 이라는 값을 얻었고, 이를 대입해보니 또 안됐다ㅜㅜ
찾아봤더니 웹 서버와 브라우저가 데이터를 교환할 때 브라우저는 입력받은 값을 자동으로 인코딩해 php로 보내고, php는 그 값을 자동으로 디코딩하기 때문이라고 한다.
따라서 우리는 값을 한번 더 인코딩해주어 다시 원점으로 돌아오지 않도록 해주면 될 것이고, 결국 답은 %2561%2564%256D%2569%256E 가 된다.
url을 https://webhacking.kr/challenge/web-11/?id=%2561%2564%256D%2569%256E 로 변경해주면 성공~~

profile
Move Forward

0개의 댓글