<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": "natas15", "pass": "<censored>" };</script></head> 
<body> 
<h1>natas15</h1> 
<div id="content"> 
<? 

/* 
CREATE TABLE `users` ( 
  `username` varchar(64) DEFAULT NULL, 
  `password` varchar(64) DEFAULT NULL 
); 
*/ 

if(array_key_exists("username", $_REQUEST)) { 
    $link = mysql_connect('localhost', 'natas15', '<censored>'); 
    mysql_select_db('natas15', $link); 
     
    $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\""; 
    if(array_key_exists("debug", $_GET)) { 
        echo "Executing query: $query<br>"; 
    } 

    $res = mysql_query($query, $link); 
    if($res) { 
    if(mysql_num_rows($res) > 0) { 
        echo "This user exists.<br>"; 
    } else { 
        echo "This user doesn't exist.<br>"; 
    } 
    } else { 
        echo "Error in query.<br>"; 
    } 

    mysql_close($link); 
} else { 
?> 

<form action="index.php" method="POST"> 
Username: <input name="username"><br> 
<input type="submit" value="Check existence" /> 
</form> 
<? } ?> 
<div id="viewsource"><a href="index-source.html">View sourcecode</a></div> 
</div> 
</body> 
</html> 


Blind SQLi인것 같습니다.


그래서 돌렸습니다.



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

[Natas] Level17  (0) 2016.10.23
[Natas] Level16  (0) 2016.10.23
[Natas] Level14  (0) 2016.10.23
[Natas] Level13  (0) 2016.10.23
[Natas] Level12  (0) 2016.10.23

OverTheWire_Wargame Bandit

[ level15 -> level16 ]




이번 레벨에서는 openssl의 heartbleed 취약점을 이용한 풀이입니다.

openssl로 localhost의 30001 포트로 접속 한 후 B를 입력 했을 때 HEARTBEATING 응답이 올 경우 취약점이 존재합니다.

또한, openssl 버전을 확인했을 때 1.0.1 ~ 1.0.1f까지의 버전을 사용할 경우 취약점이 발생합니다.

아래 그림은 openssl s_client -connect localhost:30001 로 연결을 시도 후, B를 입력하였을 때 나타나는 응답값입니다.



HEARTBEATING 응답값이 나오는 것을 확인 할 수 있으며, 현 환경의 openssl 버전은 1.0.1f입니다.

파일의 끝(EOF)에 도달하여도 프로그램이 중단되는것을 방지하기 위해 -ign_eof 옵션을 걸어주고 openssl 연결을 시도하였습니다.

만약 -ign_eof 옵션을 걸어주지 않고 현 레벨의 key값을 넘겨주게 되면 'B'만 인식하여 HEARTBEATING 응답이 나오게 됩니다.

연결 후 이전 레벨의 key값을 넘겨주면 다음 레벨로 갈 수 있는 key값을 넘겨받을 수 있습니다.



OverTheWire_Wargame Bandit

[ level14 -> level15 ]




이번 레벨은 localhost의 30000포트로 접속하여 현 레벨의 패스워드를 제출하면 다음 레벨로 갈 수 있는 패스워드를 얻을 수 있다고 합니다.


간단하게 nc로 접속하여 패스워드를 입력 해 주면 bandit15의 패스워드를 얻을 수 있습니다.


P.S - bandit14의 패스워드는 이전 레벨에서 알려줬듯이 /etc/bandit_pass/bandit14 에 저장되어 있습니다.


+ Recent posts