: level 23 → level 24
http://natas24.natas.labs.overthewire.org
natas24 화면이다. password를 입력하는 form이 있다. 소스코드를 확인해보자.
<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": "natas24", "pass": "<censored>" };</script></head>
<body>
<h1>natas24</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(!strcmp($_REQUEST["passwd"],"<censored>")){
echo "<br>The credentials for the next level are:<br>";
echo "<pre>Username: natas25 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>
이번에도 php 소스코드가 매우 짧다.
이번 level은 strcmp함수를 통해 입력값을 password와 비교해 인증하는 방식이다.
이외에 중요해 보이는 코드는 존재하지 않는 것 같았다.
다음 level로 넘어가기 위해서는 password를 입력해야 하는데 이 password를 알아내는게 문제이니 조금 당황했다.
아무래도 직접 password를 입력하는 것 외에 다른 방법이 있는 것 같은데 중요해 보이는 코드가 strcmp함수밖에 없으니 해당 함수를 이용하는 방법을 찾아봤다.
php strcmp함수의 취약점을 검색해봤더니 한 가지 새로운 사실을 알 수 있었다.
기본적으로 strcmp함수는 문자열을 비교하는 함수로 비교 문자열이 같으면 0을 반환한다.
그런데 문자열끼리 비교하는게 아니라 배열과 문자열을 비교하게 되면 0을 반환한다는 특징이 있었다.
이 특성을 이용해서 passwd에 배열을 담아 전송하면 문제를 해결할 수 있을 것 같다.
passwd에 데이터를 담아 전송할 때 datatype을 바꿔서 전송했다. (passwd[])
natas25 password: GHF6X7YwACaYYssHVY05cFq83hRktl4c
'Study > Web Hacking' 카테고리의 다른 글
[LOS] succubus (0) | 2021.08.09 |
---|---|
[LOS] assassin (0) | 2021.08.02 |
[LOS] giant (0) | 2021.07.26 |
[natas] Level 22 -> Level 23 (0) | 2021.07.26 |
[LOS] bugbear (0) | 2021.07.20 |