<?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.~가 되어야함
프록시를 줬음
벞스에서 보던거랑 거의 유사함
sql injection으로 admin으로 로그인한다
처음에 admin page에서 뭘 해보려다
삽질이란걸 알게됨
이 문제는 문제에서 준 proxy를 활용해야함
괜히 준게 아니였음
proxy로 바로 들어가면
Response에 메인화면과 같다
지금 url은 proxy.php?page=/
이렇게 되어있는데
proxy.php?page=/admin/
이렇게 주게되면
admin page의 response가 뜸
실제 admin page에 admin으로 로그인 했지만
여기선 Login Fail이 떠있음
실제로 벞스에서 /admin/으로 갈 때 request 내용을 보게되면
중간에
Authorization: Basic YWRtaW4nLS0gLToxMjM0
이런 부분이 보인다
YWRtaW4nLS0gLToxMjM0
이걸 base64로 디코딩하면
아까 내가 admin page에서 로그인하려고 쓴 injection코드가나온다
admin페이지에선 무슨짓을 해도 flag가 안뜬다
그래서 문제의 proxy에서 header injection하기로함
일단 proxy.php?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 |