<html> <head> <!-- This stuff in the header has nothing to do with the level --> <link rel="stylesheet" type="text/css" href="http://natas.labs.overthewire.org/css/level.css"> <link rel="stylesheet" href="http://natas.labs.overthewire.org/css/jquery-ui.css" /> <link rel="stylesheet" href="http://natas.labs.overthewire.org/css/wechall.css" /> <script src="http://natas.labs.overthewire.org/js/jquery-1.9.1.js"></script> <script src="http://natas.labs.overthewire.org/js/jquery-ui.js"></script> <script src=http://natas.labs.overthewire.org/js/wechall-data.js></script><script src="http://natas.labs.overthewire.org/js/wechall.js"></script> <script>var wechallinfo = { "level": "natas18", "pass": "<censored>" };</script></head> <body> <h1>natas18</h1> <div id="content"> <? $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> <? } ?> <div id="viewsource"><a href="index-source.html">View sourcecode</a></div> </div> </body> </html>

소스를 보면 admin 세션의 값이 1이 되어야만 패스워드를 뱉어낸다는 것을 알 수 있습니다.

하지만 일반적인 로그인으로는 return 값이 없기 때문에 1이 될 수 없겠죠.

여기서 admin이 로그인 되어 있어 세션 값이 1인 세션이 존재할 경우, 그 세션만 탈취하여 적용시킨다면 패스워드를 알아낼 수 있습니다.



간단하게 스크립트를 짜서 돌려줍시다. Key 부분은 파싱을 잘못 해서 출력이 안됐네요.






'Wargame > Natas:OverTheWire' 카테고리의 다른 글

[Natas] Level19  (0) 2016.10.24
[Natas] Level17  (0) 2016.10.23
[Natas] Level16  (0) 2016.10.23
[Natas] Level15  (0) 2016.10.23
[Natas] Level14  (0) 2016.10.23

OverTheWire_Wargame Bandit

[ level18 -> level19 ]




이번 문제는 홈디렉토리에 readme라는 파일 안에 key 문자열이 들어있다고 하는데, 누군가 .bashrc 파일을 수정하여 SSH에 로그인 할 때마다 세션이 끊어진다고 합니다.

이 경우에는 일반적인 ssh 로그인으로는 문제를 풀 수 없고, ssh의 기능 중 원격 코드를 실행하는 것이 있는데 이 것을 이용하면 key를 얻어낼 수 있습니다.


ssh user@host "operation"


위와 같은 형식으로 원격 명령을 실행 할 수 있습니다.


직접 로그인을 한 것이 아니기 때문에 .bashrc는 실행되지 않고, key값만 출력 된 것을 확인 할 수 있습니다.


OverTheWire_Wargame Bandit

[ level17 -> level18 ]




이번 문제는 홈 디렉토리에 passwords.old, passwords.new로 2개의 파일이 존재하는데, passwords.new에 새로 추가된 한 줄의 문자열이 다음 레벨로 갈 수 있는 key라고 합니다.

여기서는 diff 명령어를 사용하도록 하죠.



< 의 경우 argv[1]에만 존재하는 문자열, >의 경우 argv[2]에만 존재하는 문자열입니다.

간단하게 key를 구하였으나.... 문제에도 나와 있듯이, level18로 로그인을 할 경우 "byebye !" 라는 문자열이 출력되고 세션이 종료된다고 나와 있습니다.

하지만 저는 이것까지 우회하는 것이 이 문제의 의도인줄 알고.. 4시간동안 삽질하다 다른분들의 write up을 보니 여기가 끝이었네요.


..쮸륵......

+ Recent posts