<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": "natas17", "pass": "<censored>" };</script></head> 
<body> 
<h1>natas17</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', 'natas17', '<censored>'); 
    mysql_select_db('natas17', $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네요.

그런데 다른 점이 하나 있다면 참/거짓을 판별해주는 echo문이 주석 처리 됬다는 점입니다.

따라서 response 값의 차이로는 판별하기 힘들 것 같으니 time based blind SQLi로 풀면 될 것 같습니다.



중간에 타임 꼬여서 한번 더돌림..



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

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

OverTheWire_Wargame Bandit

[ level17 -> level18 ]




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

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



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

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

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


..쮸륵......

OverTheWire_Wargame Bandit

[ level16 -> level17 ]



이번 레벨은 31000~32000 사이에 있는 포트 중 하나에서 다음 레벨로 갈 수 있는 키를 얻을 수 있다고 합니다.

먼저, 이 포트들 사이에서 listening 하고 있는 포트를 찾고, SSL 통신을 하는 지 안하는 지 확인을 합니다. 그리고 추려 낸 SSL 통신 중 오직 1개의 서버만이 다음 레벨로 갈 수 있는 key값을 뱉어준다고 하네요.

그럼 nmap으로 포트스캔을 해 봅시다.


31000, 31046, 31518, 31691, 31790, 31960으로 총 6개의 포트가 listening 하고 있는 것을 알 수 있습니다.



31518, 31790 두 개의 포트에서만 SSL 통신을 하고 있었습니다.

OpenSSL 버전은 1.0.1f이므로, HEARTBLEED 취약점이 발생하는 것을 알 수 있습니다.


openssl s_client -connect localhost:31518 -ign_eof

openssl s_client -connect localhost:31790 -ign_eof


위 두 명령어로 현 레벨의 key값을 보내 주면 31790 포트에서 다음 레벨로 갈 수 있는 RSA_private key값을 얻을 수 있습니다.


이 RSA key값을 putty keygen을 이용하여 SSH_RSA key값으로 변경 해 준 후, bandit17로 연결하면 정상접속 되는 것을 확인 할수 있습니다.

+ Recent posts