Pwdec
merhabayın

Web Uygulamaları Güvenliği / Directory Traversal Açığı

Directory Traversal

Bir web uygulama düşünelim, bir input (girdi) var ve bazı yereldeki dosyaları okumamıza / göstermesine olanak sağlıyor işte tam burada bu zafiyet türü oluşabilir. Dostlar soru cevap şeklinde daha iyi anlayacağınızı düşünüyorum bu yüzden kendi sorularıma cevap verdim sorunuz olursa yorumlarda belirtebilirsiniz.

S1. Bu zafiyet nerelerde bulunur ?
C1. Bir web uygulaması düşünelim, bir input (girdi) var ve bazı yereldeki dosyaları okumamıza / göstermesine olanak sağlıyor işte tam burada bu zafiyet türü oluşabilir.

S2. Peki neden “../ ” yazıyoruz ?
C2. Linux ve windows sistemlerinde bu işaret bir dizin geri gitmemize yarıyor e genellikle de windows ya da linux host olduğu için kullanıyoruz. Ve bunu bu zafiyetini içeriyorsa istediğiniz kadar yazabilirsiniz çünkü ne kadar yazarsanız yazın / dizinine gideceksiniz.

S3. “etc/passwd” nedir neden bunu okuyoruz ?
C3. Aslında passwd dosyası aman aman işe yarayan bir dosya değil sadece misal linux üzerinde bulunan kullanıcıları gösteriyor. Önemli olan shadow dosyası çünkü burada şifreler saklanıyor tabi şifreli bir şekilde. Ben de çözümlerde sadece test için bu dosyayı veya /etc klasörünü denedim.

S4. Elle yapmamız şart mı otomatik bi yolu yok mu tool falan?
C4. Tabi ki var dotdotpwn güzel bi tool kali de yüklü olarak geliyor “dotdowpwn -h ” komutuyla ya da google da taratarak kullanımına bakabilirsiniz sağlıklı sonuçlar verebilir ama ben videolarda burp ile bir payload listesi belirledim ve gözlemledim böyle daha sağlıklı sonuçlar olduğuna inanıyorum burp ile çalışmayı sevelim

S5. %00 Nedir ?
C5. Bazen null byte ya da null terminator olan bilinen null karakter ise ASCII gibi karakter kodlama biçimlerinde sıfır değerine sahip karakterdir. Payloadlarınızda bulunsun

S6. Filtrelemeler olursa nasıl yaparız ?
C6. Örneğin “../” buna bi filtreleme varsa “….//…./….//…./….//…./….//…./” gibi yaparak atlayabiliriniz istediğiniz kadar yazabilirsiniz bunu dediğim gibi.



İncelemeniz için zafiyetli kod ödev olsun analizi

Kod:
<?php
include("security.php");
include("security_level_check.php");
include("functions_external.php");
include("admin/settings.php");

$bugs = file("bugs.txt");


if(isset($_POST["form_bug"]) && isset($_POST["bug"]))

{

        

            $key = $_POST["bug"]; 

            $bug = explode(",", trim($bugs[$key]));

            

            // Debugging

            // print_r($bug);

            

            header("********: " . $bug[1]);

            

            exit;

   

}

 

if(isset($_POST["form_security_level"]) && isset($_POST["security_level"]))    

{

    

    $security_level_cookie = $_POST["security_level"];

    

    switch($security_level_cookie)

    {



        case "0" :



            $security_level_cookie = "0";

            break;



        case "1" :



            $security_level_cookie = "1";

            break;



        case "2" :



            $security_level_cookie = "2";

            break;



        default : 



            $security_level_cookie = "0";

            break;



    }



    if($evil_bee == 1)

    {



        setcookie("security_level", "666", time()+60*60*24*365, "/", "", false, false);



    }

    

    else        

    {

      

        setcookie("security_level", $security_level_cookie, time()+60*60*24*365, "/", "", false, false);

        

    }



    header("********: directory_traversal_1.php?page=message.txt");

    

    exit;



}



if(isset($_COOKIE["security_level"]))

{



    switch($_COOKIE["security_level"])

    {

        

        case "0" :

            

            $security_level = "low";

            break;

        

        case "1" :

            

            $security_level = "medium";

            break;

        

        case "2" :

            

            $security_level = "high";

            break;

        

        case "666" :



            $security_level = "666";

            break;

        

        default :

            

            $security_level = "low";

            break;



    }

    

}



else

{

     

    $security_level = "not set";

    

}



$file = "";

$directory_traversal_error = "";  



function show_file($file)

{

    

    // Checks whether a file or directory exists    

    // if(file_exists($file))

    if(is_file($file)) 

    {

                   

        $fp = fopen($file, "r") or die("Couldn't open $file.");



        while(!feof($fp))

        {



            $line = fgets($fp,1024);

            echo($line);

            echo "<br />";

    

        }

        

    }   

        

    else

    {

        

        echo "This file doesn't exist!";

       

    }          

            

}



?>

<!DOCTYPE html>

<html>

    

<head>

        

<**** http-equiv="Content-Type" content="text/html; charset=UTF-8">



<!--<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Architects+Daughter">-->

<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />

<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />



<!--<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>-->

<script src="js/html5.js"></script>



<title>bWAPP - Missing Functional Level Access Control</title>



</head>



<body>

    

<header>



<h1>bWAPP</h1>



<h2>an extremely buggy web app !</h2>



</header>    



<div id="menu">

      

    <table>

        

        <tr>

            

            <td><a href="portal.php">Bugs</a></td>

            <td><a href="password_change.php">Change Password</a></td>

            <td><a href="user_extra.php">Create User</a></td>

            <td><a href="security_level_set.php">Set Security Level</a></td>

            <td><a href="reset.php" onclick="return confirm('All settings will be cleared. Are you sure?');">Reset</a></td>            

            <td><a href="credits.php">Credits</a></td>

            <td><a href="http://itsecgames.blogspot.com" target="_blank">Blog</a></td>

            <td><a href="logout.php" onclick="return confirm('Are you sure you want to leave?');">Logout</a></td>

            <td><font color="red">Welcome <?php if(isset($_SESSION["login"])){echo ucwords($_SESSION["login"]);}?></font></td>

            

        </tr>

        

    </table>   

   

</div> 



<div id="main">

    

    <h1>Directory Traversal - Files</h1>



    <?php



    if(isset($_GET["page"]))

    {



        $file = $_GET["page"];



        switch($_COOKIE["security_level"])

            {



            case "0" :            



                show_file($file);



                // Debugging

                // echo "<br />" . $_GET['page'];



                break;



            case "1" :         



                $directory_traversal_error = directory_traversal_check_1($file);



                if(!$directory_traversal_error)

                {



                    show_file($file);



                }



                else

                {



                    echo $directory_traversal_error;



                } 



                // Debugging

                // echo "<br />" . $_GET["page"];



                break;



            case "2" :



                $directory_traversal_error = directory_traversal_check_3($file);           



                if(!$directory_traversal_error)

                {



                    show_file($file);



                }



                else

                {



                    echo $directory_traversal_error;



                }



                // Debugging

                // echo "<br />" . $_GET["page"];



                break;



            default :           



                show_file($file);



                // Debugging

                // echo "<br />" . $_GET["page"];



                break;



        }



    }



    ?>





</div>

    

<div id="side">    

    

    <a href="http://twitter.com/MME_IT" target="blank_" class="button"><img src="./images/twitter.png"></a>

    <a href="http://be.linkedin.com/in/malikmesellem" target="blank_" class="button"><img src="./images/linkedin.png"></a>

    <a href="http://www.facebook.com/pages/MME-IT-Audits-Security/104153019664877" target="blank_" class="button"><img src="./images/facebook.png"></a>

    <a href="http://itsecgames.blogspot.com" target="blank_" class="button"><img src="./images/blogger.png"></a>



</div>     

    

<div id="disclaimer">

          

    <p>bWAPP is licensed under <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank"><img style="vertical-align:middle" src="./images/cc.png"></a> &copy; 2014 MME BVBA / Follow <a href="http://twitter.com/MME_IT" target="_blank">@MME_IT</a> on Twitter and ask for our cheat sheet, containing all solutions! / Need an exclusive <a href="http://www.mmebvba.com" target="_blank">training</a>?</p>

   

</div>

    

<div id="bee">

    

    <img src="./images/bee_1.png">

    

</div>

    

<div id="security_level">

  

    <form action="<?php echo($_SERVER["SCRIPT_NAME"]);?>" method="POST">

        

        <label>Set your security level:</label><br />

        

        <select name="security_level">

            

            <option value="0">low</option>

            <option value="1">medium</option>

            <option value="2">high</option> 

            

        </select>

        

        <button type="submit" name="form_security_level" value="submit">Set</button>

        <font size="4">Current: <b><?php echo $security_level?></b></font>

        

    </form>   

    

</div>

    

<div id="bug">



    <form action="<?php echo($_SERVER["SCRIPT_NAME"]);?>" method="POST">

        

        <label>Choose your bug:</label><br />

        

        <select name="bug">

   

<?php



// Lists the options from the array 'bugs' (bugs.txt)

foreach ($bugs as $key => $value)

{

    

   $bug = explode(",", trim($value));

   

   // Debugging

   // echo "key: " . $key;

   // echo " value: " . $bug[0];

   // echo " filename: " . $bug[1] . "<br />";

   

   echo "<option value='$key'>$bug[0]</option>";

 

}



?>





        </select>

        

        <button type="submit" name="form_bug" value="submit">Hack</button>

        

    </form>

    

</div>

      

</body>

    

</html>
Share

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *