Sunday, 13 May 2012

Command Execution Vulnerability

Command Execution Vulnerability

selamat siang semuanya, kali ini saya akan mencoba mengupas tuntas tentang Command Execution Vulnerability, talk less do more

Command Execution Vulnerability ???
Code:
In computer security, arbitrary code execution is used to describe an attacker's ability to execute any commands of the attacker's choice on a target machine or in a target process. It is commonly used in arbitrary code execution vulnerability to describe a software bug that gives an attacker a way to execute arbitrary code
atau menurut saya :P
Code:
Command Execution adalah sebuah serangan attacker yang memanfaatkan perintah-perintah system seperti exec(),passthru(),shell_exec(),system() yang terdapat dala sebuah aplikasi berbasi web untuk menjalankan perintah system yang ada dalam sebuah system operasi,

kasus
ada sebuah web applikasi yang memberikan fasilitas untuk melakukan perintah PING untuk pengunjungnya, di sini kita tau kalo ping itu merupakan perintah system, hanya saja di jalankan melalui web aplikasi dengan memanfaatkan perintah exec(), system(), passthru() dll, atau sejenisnnya.

[Image: screenshott.png]

telihat biasa bukan ?? , oke mari kita coba memberikan alamat ip yang akan kita ping tanpa embel embel di belakangnya

Code:
192.168.1.103

maka web tersebut akan meberikan hasil seperti halnya kita melakukan ping melalui command line,

[Image: screenshot1ck.png]

dan jika kita melakukan perintah pada command line console, hasilnya juga akan sama seperti yang di tampilkan oleh web tersebut

[Image: screenshot2az.png]

nah sudah terbukti kan jika web tersebut menggunakan perintah-perintah seperti yang saya sebutkan di atas, sekarang kita akan mencoba bagaimana Command Execution itu bisa terjadi, untuk mengujinya kita akan memberikan perintah baru setelah kita memasukan IP pada halaman web tersebut, kita akan mencoba perintah untuk melihat listing direktori
Code:
192.168.1.103 ; ls -la
-----------------------------
kita menambahkan ; setelah IP dan di ikuti oleh perintah ls -la ini maksudnya agar system mengeksekusi dua perintah sekaligus, maka halaman web itu akan menampilkan hasil perintah ping dan ls -la di halamanya

[Image: screenshot3a0.png]

hasil perintah pertama sama dengan ping 192.168.1.103
Code:
PING 192.168.1.103 (192.168.1.103) 56(84) bytes of data.
64 bytes from 192.168.1.103: icmp_seq=1 ttl=128 time=0.921 ms
64 bytes from 192.168.1.103: icmp_seq=2 ttl=128 time=0.489 ms
64 bytes from 192.168.1.103: icmp_seq=3 ttl=128 time=0.488 ms

--- 192.168.1.103 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.488/0.632/0.921/0.205 ms
total 12
hasil perintah kedua ls -la
Code:
drwxr-xr-x  2 wenkhairu wenkhairu 4096 2010-12-09 02:22 .
drwxrwxrwx 20 nobody    root      4096 2010-12-09 02:22 ..
-rw-r--r--  1 wenkhairu wenkhairu  579 2010-12-09 02:27 index.php

perintah perintah yang bisa attacker lakukan sangat banyak untuk dapat mengexploitasi sang korban, mulai dari membaca file, melihat isi direktori bahkan menambahkan user yang berkases Admin atau root pada subuah system, misalnya attacker akan membaca sebuah file yang sifatnya penting, makan si attacker cukup memberikan perintah
Code:
192.168.1.103 ; cat /opt/lampp/htdocs/config.inc

maka hasilnya
[Image: screenshot4h.png]

bagaimana itu bisa terjadi ????
mari kita lihat source codenya
Code:
<?php
/*
P O C Command Execution  Vulnerability
*/
?>
<form method="post" action="index.php">
<h2>Masukan IP yang akan di Ping</h2><br />
<input type="text" name="ip">
<input type="submit" value="Ping" name="submit">
</form>

<?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST[ 'ip' ]; // Tanpa Filter yang artinya kita bisa memasukan apa saja tanpa halangan
    if (stristr(php_uname('s'), 'Windows NT')) {    
        $cmd = shell_exec( 'ping  ' . $target ); // menggunakan shel_exec()
        echo '<pre>'.$cmd.'</pre>';       
    } else {    
        $cmd = shell_exec( 'ping  -c 3 ' . $target ); // menggunakan shell_exec()
        echo '<pre>'.$cmd.'</pre>';       
    }   
}
?>

bagaimana mengatasinya ???
tidak ada jawaban pasti untuk yang satu ini, tidak ada yang benar-benar aman di dunia maya, kita hanya bisa mempersulit attacker untuk melakukannya, mari kita mempersulit attacker untuk melakukan aksinya dengan memberikan validasi terhadap inputan IP dan memastikan itu sebuah angka (berupa numeric)
Code:
<?php
if( isset( $_POST[ 'submit' ] ) ) {
    $target = $_REQUEST["ip"];   
    $target = stripslashes( $target );  

    // Split IP menjadi 4 bagian
    $octet = explode(".", $target);   

    // Periksa setiap IP itu berupa angka integer
    if ((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) && (sizeof($octet) == 4)  ) {
   
    // Jika semua IP berupa integer gabungkan lagi IPnya
    $target = $octet[0].'.'.$octet[1].'.'.$octet[2].'.'.$octet[3];   
 
        if (stristr(php_uname('s'), 'Windows NT')) {
   
            $cmd = shell_exec( 'ping  ' . $target );
            echo '<pre>'.$cmd.'</pre>';
       
        } else {
   
            $cmd = shell_exec( 'ping  -c 3 ' . $target );
            echo '<pre>'.$cmd.'</pre>';       
        }   
    }   
    else {
        echo '<pre>ERROR: IP Address Tidak Valid</pre>';
    }       
}
?>

jika kita memberikan perintah perintah seperti di atas makan system akan menganggap inputan kita tidak valid
[Image: screenshot5p.png]

sekian dulu dari saya, semoga bisa menambah pengetahuan kita bersama :P

Socializer Widget By Blogger Yard
SOCIALIZE IT →
FOLLOW US →
SHARE IT →

0 comments:

Post a Comment