webhacking.kr - old52

2021. 4. 10. 14:09WarGame/webhaking.kr

처음 문제를 접속하면 위와 같이 나오고, admin_page에 접속을 시도해보면

 

로그인 창이 나옵니다.

당연히 id 비번을 모르는 상황이니 로그인을 시도해보면

로그인이 안되고 위와 같이 뜹니다.

코드를 확인해보면

<?php
include "config.php";
if($_GET['view_source']) view_source();
if($_GET['logout'] == 1){
  $_SESSION['login']="";
  exit("<script>location.href='./';</script>");
}
if($_SESSION['login']){
  echo "hi {$_SESSION['login']}<br>";
  if($_SESSION['login'] == "admin"){
    if(preg_match("/^172\.17\.0\./",$_SERVER['REMOTE_ADDR'])) echo $flag;
    else echo "Only access from virtual IP address";
  }
  else echo "You are not admin";
  echo "<br><a href=./?logout=1>[logout]</a>";
  exit;
}
if(!$_SESSION['login']){
  if(preg_match("/logout=1/",$_SERVER['HTTP_REFERER'])){
    header('WWW-Authenticate: Basic realm="Protected Area"');
    header('HTTP/1.0 401 Unauthorized');
  }
  if($_SERVER['PHP_AUTH_USER']){
    $id = $_SERVER['PHP_AUTH_USER'];
    $pw = $_SERVER['PHP_AUTH_PW'];
    $pw = md5($pw);
    $db = dbconnect();
    $query = "select id from member where id='{$id}' and pw='{$pw}'";
    $result = mysqli_fetch_array(mysqli_query($db,$query));
    if($result['id']){
      $_SESSION['login'] = $result['id'];
      exit("<script>location.href='./';</script>");
    }
  }
  if(!$_SESSION['login']){
    header('WWW-Authenticate: Basic realm="Protected Area"');
    header('HTTP/1.0 401 Unauthorized');
    echo "Login Fail";
  }
}
?><hr><a href=./?view_source=1>view-source</a>

 

id를 확인하는 부분에서 

> $query "select id from member where id='{$id}' and pw='{$pw}'";

 

id = admin'-- - 

으로 쿼리 우회가 가능할 것 같습니다.

 

 

우회 후에는

 

위와 같이 뜨네요.

127.0.0.1 어드민 ip가 아니여서 안된다고 합니다.

그럼 이 부분을 검증하는 코드를 다시 확인해보면

$_SERVER['REMOTE_ADDR'] 부분이니까 서버 자체에서 서버에게 요청을 하는 구문을 만들어야겠습니다.

 

 

처음에 있던 창에서 proxy메뉴를 검색하면 위와 같이 뜨는데

 

> webhacking.kr:10008/proxy.php?page=%0d%0a1234

 

 

CRLF 취약점이 발생하는 것을 확인할 수 있습니다.

즉 이 proxy를 이용해서 서버에게 session과 auth 를 넣어주면 인증이 가능합니다.

auth인 인증정보는 처음에 admin'-- -으로 접속할 때 프록시를 걸어주면 확인 가능합니다.

 

 

여기서 Authorization 부분을 확인할 수 있습니다.

 

 

 

 

프록시 창에서 위와 같이 CRLF 취약점을 이용해서 요청을 보내게되면 flag를 확인할 수 있습니다.

'WarGame > webhaking.kr' 카테고리의 다른 글

webhacking.kr - old55  (0) 2021.04.12
webhacking.kr - old22  (0) 2021.04.11
webhacking.kr - old60  (0) 2021.04.07
webhacking.kr - old53  (0) 2021.04.07
webhacking.kr - old35  (0) 2021.04.06