: level 22 → level 23

http://natas23.natas.labs.overthewire.org

natas23 화면이다. 이번 문제에는 Password 입력칸만 존재한다. 바로 소스코드를 살펴보자.

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

Password:
<form name="input" method="get">
    <input type="text" name="passwd" size=20>
    <input type="submit" value="Login">
</form>

<?php
    if(array_key_exists("passwd",$_REQUEST)){
        if(strstr($_REQUEST["passwd"],"iloveyou") && ($_REQUEST["passwd"] > 10 )){
            echo "<br>The credentials for the next level are:<br>";
            echo "<pre>Username: natas24 Password: <censored></pre>";
        }
        else{
            echo "<br>Wrong!<br>";
        }
    }
    // morla / 10111
?>  
<div id="viewsource"><a href="index-source.html">View sourcecode</a></div>
</div>
</body>
</html>
{"mode":"full","isActive":false}

이번 소스코드에서 눈여겨볼 코드는 $_REQUEST의 값을 검증하는 if문이다.

strstr함수는 첫번째 문자열에 두번째 인자가 포함되어 있는지를 확인하고, 옵션에 따라 문자열을 반환하는 함수다.

 

따라서 $_REQUEST["passwd"]가 iloveyou를 포함하고 있어야하고, 10보다 커야 한다.

여기서 문자열과 정수를 비교하는데 10보다 커야한다는게 이상하게 느껴졌다.

이 문제는 PHP의 특성을 알고나면 이해할 수 있었다.

 

PHP에서는 문자열과 정수를 비교하면 자동으로 문자열을 정수로 변환하고 계산하는 특징이있다.

그러므로 passwd에 iloveyou와 10보다 큰 숫자를 포함하면 문제를 해결할 수 있다고 생각했다.

password로 iloveryou11를 입력해봤다.

 

 

 

그러나 Wrong!이라는 문구가 뜨면서 해결하지 못했다.

 

 

 

이번엔 반대로 11iloveyou라고 입력해봤다.

그랬더니 natas24의 password가 나타났다.

iloveyou11은 안되면서 11iloveyou가 되는 이유를 모르겠다.아무래도 내가 아직 모르는 PHP의 특성이 있는 것 같다. 좀 더 알아봐야 할 것 같다.

 

 

 

natas24 password: OsRmXFguozKpTZZ5X14zNO43379LZveg

 

 

 

 

 

'Study > Web Hacking' 카테고리의 다른 글

[natas] Level 23 -> Level 24  (0) 2021.08.02
[LOS] giant  (0) 2021.07.26
[LOS] bugbear  (0) 2021.07.20
[natas] Level 21 -> Level 22  (0) 2021.07.20
[LOS] darkknight  (0) 2021.07.17
복사했습니다!