webhacking.kr - old52
2021. 4. 10. 14:09ㆍWarGame/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 |