관리자 계정으로 로그인 하라는 것 같다.
소스코드
<?
$maxid = 640; // 640 should be enough for everyone
function isValidAdminLogin() { /* {{{ */
if($_REQUEST["username"] == "admin") {
/* This method of authentication appears to be unsafe and has been disabled for now. */
//return 1;
}
return 0;
}
/* }}} */
function isValidID($id) { /* {{{ */
return is_numeric($id);
}
/* }}} */
function createID($user) { /* {{{ */
global $maxid;
return rand(1, $maxid);
}
/* }}} */
function debug($msg) { /* {{{ */
if(array_key_exists("debug", $_GET)) {
print "DEBUG: $msg<br>";
}
}
/* }}} */
function my_session_start() { /* {{{ */
if(array_key_exists("PHPSESSID", $_COOKIE) and isValidID($_COOKIE["PHPSESSID"])) {
if(!session_start()) {
debug("Session start failed");
return false;
} else {
debug("Session start ok");
if(!array_key_exists("admin", $_SESSION)) {
debug("Session was old: admin flag set");
$_SESSION["admin"] = 0; // backwards compatible, secure
}
return true;
}
}
return false;
}
/* }}} */
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: natas19\n";
print "Password: <censored></pre>";
} else {
print "You are logged in as a regular user. Login as an admin to retrieve credentials for natas19.";
}
}
/* }}} */
$showform = true;
if(my_session_start()) {
print_credentials();
$showform = false;
} else {
if(array_key_exists("username", $_REQUEST) && array_key_exists("password", $_REQUEST)) {
session_id(createID($_REQUEST["username"]));
session_start();
$_SESSION["admin"] = isValidAdminLogin();
debug("New session started");
$showform = false;
print_credentials();
}
}
if($showform) {
?>
<p>
Please login with your admin account to retrieve credentials for natas19.
</p>
<form action="index.php" method="POST">
Username: <input name="username"><br>
Password: <input name="password"><br>
<input type="submit" value="Login" />
</form>
<? } ?>
세션값을 확인한다. admin의 세션값을 알아야 로그인할 수 있을 것 같다. 세션은 1~640사이의 값이다.
세션을 1부터 640까지 넘겨봐야 할 것 같다.
버프스위트 기능중에 인트루더 기능을 이용해 1부터 640까지 보내볼 것이다.
https://blog.naver.com/crehacktive3/221073816663
보내는 과정에서 length순으로 정렬했더니 하나만 1370이 나와서 이 부분을 확인했더니 비밀번호가 나왔다.
세션값은 119였다. 근데 중간에 나오면 끝까지 안해도 되긴하지만 너무 오래걸려서 파이썬으로 자동화 프로그램을 만드는 게 더 빠를 것 같다.
4IwIrekcuZlA9OsjOkoUtwU6lhokCPYs
'Over the Wire > natas' 카테고리의 다른 글
[OvertheWire:Natas] natas 19 → 20 / natas20 (0) | 2021.07.11 |
---|---|
[OvertheWire:Natas] natas 18 → 19 / natas19 (0) | 2021.07.01 |
[OvertheWire:natas] Natas level 16 → 17 / natas 17 (0) | 2021.06.27 |
[OverTheWire:natas] Natas 15 → 16 / Natas 16 (0) | 2021.06.25 |
[OvertheWire : natas] level 14 → 15 (0) | 2021.05.29 |