원래 페이지의 소스코드
<?
function print_credentials() { /* {{{ */
if($_SESSION and array_key_exists("admin", $_SESSION) and $_SESSION["admin"] == 1) {
print "You are an admin. The credentials for the next level are:<br>";
print "<pre>Username: natas22\n";
print "Password: <censored></pre>";
} else {
print "You are logged in as a regular user. Login as an admin to retrieve credentials for natas22.";
}
}
/* }}} */
session_start();
print_credentials();
?>
admin을 1로 만들어야함을 알 수 있다.
하이퍼링크가 걸린 사이트로 들어가보았다.
해당 웹페이지의 소스코드
<?
session_start();
// if update was submitted, store it
if(array_key_exists("submit", $_REQUEST)) {
foreach($_REQUEST as $key => $val) {
$_SESSION[$key] = $val;
}
}
if(array_key_exists("debug", $_GET)) {
print "[DEBUG] Session contents:<br>";
print_r($_SESSION);
}
// only allow these keys
$validkeys = array("align" => "center", "fontsize" => "100%", "bgcolor" => "yellow");
$form = "";
$form .= '<form action="index.php" method="POST">';
foreach($validkeys as $key => $defval) {
$val = $defval;
if(array_key_exists($key, $_SESSION)) {
$val = $_SESSION[$key];
} else {
$_SESSION[$key] = $val;
}
$form .= "$key: <input name='$key' value='$val' /><br>";
}
$form .= '<input type="submit" name="submit" value="Update" />';
$form .= '</form>';
$style = "background-color: ".$_SESSION["bgcolor"]."; text-align: ".$_SESSION["align"]."; font-size: ".$_SESSION["fontsize"].";";
$example = "<div style='$style'>Hello world!</div>";
?>
이번에도 디버그를 출력해주길래 파라미터에 다음과 같이 입력했다.
?debug=true&admin=1
그러나 화면에는 나타나지 않았다. 새로운 세션을 추가하기 위해선 submit=Update라는 값이 추가되어야 한다.
해당 값을 추가하고 다시 로드하면
위와 같이 admin이 나타나는 것을 볼 수 있다.
최종 페이로드
?debug=true&align=center&fontsize=100%&bgcolor=yellow&submit=Update&admin=1
이제 이 사이트의 쿠키값을 메인 페이지에 넣어줄 것이다.
개발자도구로 세션값을 복사해서 메인페이지에 붙여넣었다.
패스워드를 얻을 수 있었다!
chG9fbe1Tq2eWVMgjYYD1MsfIvN461kJ
'Over the Wire > natas' 카테고리의 다른 글
[OvertheWire:Natas] natas 22 → 23 / natas 23 (0) | 2021.08.03 |
---|---|
[OvertheWire:Natas] natas 21 → 22 /natas22 (0) | 2021.08.01 |
[OvertheWire:Natas] natas 19 → 20 / natas20 (0) | 2021.07.11 |
[OvertheWire:Natas] natas 18 → 19 / natas19 (0) | 2021.07.01 |
[OvertheWire:Natas] natas level 17 → 18 / natas18 (0) | 2021.06.30 |