OverTheWire: Natas level14
OverTheWire 문제풀이 - Natas
* Bandit는 웹 보안 관련 문제입니다.
* 개인적인 문제풀이로 해답을 보시기 전에 직접 풀어보시기를 권해드립니다.
* 반드시 연습용으로 제공된 환경에서만 작업하시기 바랍니다. 악용으로 일어난 사태는 절대로 책임지지 않습니다.
Natas level14
Natas14에 접속하면 다음과 같은 화면을 볼 수 있다.
아이디와 패스워드를 입력하는 창이 있는데 일단 아무거나 입력하고 Login 을 눌러보면 접근 제한이 걸려있다. 소스를 한번 보자.
[View sourcecode]
1 2 3 4 5 6 7 | <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> | cs |
이 소스코드에서 각각 username, password 라는 name으로 입력값을 index.php 에 POST 로 넘기는 것을 알 수 있다. 또다른 링크 'index-source.html'을 살펴보자.
[index-source.html]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <? if(array_key_exists("username", $_REQUEST)) { $link = mysql_connect('localhost', 'natas14', '<censored>'); mysql_select_db('natas14', $link); $query = "SELECT * from users where username=\"".$_REQUEST["username"]."\" and password=\"".$_REQUEST["password"]."\""; if(array_key_exists("debug", $_GET)) { echo "Executing query: $query<br>"; } if(mysql_num_rows(mysql_query($query, $link)) > 0) { echo "Successful login! The password for natas15 is <censored><br>"; } else { echo "Access denied!<br>"; } mysql_close($link); } else { ?> | cs |
[문제 풀이]
username 과 password에 임의의 값을 넣고 디버그 값을 넣으면 소스 보기가 없더라도 아래와 같이 query문을 참조할 수 있다. 이렇게 debug로 인한 메세지가 출력되는 것도 매우 취약한 부분이다.
특별히 필터링 하고 있는 것이 없기 때문에 자주 사용하는 sql injection 방법으로 로그인을 우회할 수 있을 것이다.
정상적인 sql query
"SELECT * from users where username=\"".$_REQUEST["username"]."\" and password=\"".$_REQUEST["password"]."\"";
조작한 sql query
"SELECT * from users where username=\"".natas15."\" and password=\""." or "1=1."\"";
위와 같이 sql query를 조작하면 둘중 하나만 참이 되어도 참이기 때문에 or 1=1 구문으로 무조건 참이 되게 만들 수 있다.
그러면 아래와 같이 로그인 우회가 성공해서 natas15 패스워드를 얻을 수 있다.
next level password : AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J
'War Game > natas' 카테고리의 다른 글
OverTheWire: Natas level15 (1) | 2017.07.21 |
---|---|
OverTheWire: Natas level13 (0) | 2017.07.20 |
OverTheWire: Natas level12 (0) | 2017.07.14 |
OverTheWire: Natas level11 (0) | 2017.07.12 |
OverTheWire: Natas level10 (0) | 2017.07.12 |