Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Поиск уязвимостей у прогросайтов

Anna | 16.06.2014 | нет комментариев
Время было вечером, делать было нечего… Было решено поразить програжителей. Но как? Тривиальные искания уязвимостей на знаменитых сайтах теснее никому не увлекательны. Чтож, значит включим фантазию… чай у пользователей тоже есть сайты! Неотложно проверить их на стойкость!

Как все происходило:

Необходимо было придумать план действия. Впринципе, все заключалось в том, Дабы спарсить как дозволено огромнее страниц пользователей и после этого спарсить в них страницы сайтов. После этого поставить все это на сканер. Как-то так…

Как это работает?

Пункт 1-й: Спарсить страницы.
Не все так легко, чтоб вы знали… На странице /users лежит не так много, как хочется, пользователей. Решено было рекурсивно идти по юзерам и брать там из подписчиков других юзеров, а там еще юзеров и еще…

Расчехлен любимый питон, включено воображение, написано вот это:

import urllib2, re

start = "1-й пользователь"

""" Выкачиваем страничку первого пользователя, и парсим с нее имена первых жертв """
page = urllib2.urlopen("http://habrahabr.ru/users/" start "/subscription/followers/").read()
names = re.findall('<div><a href="/users/(.*?)/">(.*?)</a></div>', page)

""" рекурсивная функция, которая, вызывая себя в себе, будет ходить по сайту в поисках новых жертв"""

def going(names):
    for name in names:
        page = urllib2.urlopen("http://habrahabr.ru/users/" name[0] "/subscription/followers/").read()
        names = re.findall('<div><a href="/users/(.*?)/">(.*?)</a></div>', page)

""" и писать новых жертв в файл """

        base = open('habrs.txt', 'a')
        writed = 0
        for item in names:
            base.write(item[0] "rn")
            writed = writed   1
        print 'Saved habrs's: ' str(writed)
    going(names)

going(names)

Позже некоторого времени работы было спарсено довольное число програлюдей(около 10к). Ясно ясно, что огромная часть этих людей повторяются… Что же делать?

Пункт 2-й: Уникализировать
Подумав, я решил, что грузить питон будет несправедливо. Следственно в мой мозг полезла идея об array_unique из php. Подумано — сделано.

Каждый скрипт заключается в открывании-закрывании файла, но но сама уникализация в одну функцию.

<?php
$arr = file_get_contents("habrs.txt");
$arr = explode("rn", $arr);
$arr = array_unique($arr);
$string = "";
foreach($arr as $name){
	$string = $string.$name."rn";
}
file_put_contents("habrs2.txt", $string);
?>

Запускалось все из консоли, все отменно работает.
Получилось чуть поменьше 2к уникальных прогролюдей… Значит сейчас необходимо пойти и обнаружить их сайты.

Пункт 3-й: Поиск сайтов
Вновь достал питон, и написал такое. Все дюже легко, идем по файлу(построчно), переходим на странички пользователей, ищем сайты. Находим, прячем в файл.

import urllib2, re

sites = ""

users = file("habrs2.txt")
for user in users:
    user = re.split("rn", user)[0]
    page = urllib2.urlopen("http://habrahabr.ru/users/" user "/").read()
    site = re.findall('<a href="(.*?)" target="_blank">(.*?)</a>',page)
    if len(site) > 0:
        for site, fake in site:
            sites  = site "rn"

with open("sites.txt", "a") as f:
    f.write(sites)

Сайтов получилось порядочное число, и если они не повторялись, то имели неудобоваримый вид.
Необходимо их почистить…

Пункт четвертый: Чистим сайты

Используем preg_match в php.

<?php
$arr = file_get_contents("sites.txt");
$arr = explode("rn", $arr);
$string = "";
foreach($arr as $name){
	if (preg_match('/http://([^/] )//i', $name, $matches)) {
		$name = $matches[1];
	} elseif (preg_match('/^http://([^/] )$/i', $name, $matches)) {
		$name = $matches[1];
	}
	$string = $string.$name."rn";
}
file_put_contents("sites2.txt", $string);
?>

Получаем отличный список, аля:
yandex.ru
google.com
yahoo.com

Сейчас необходимо все это прикрутить к сканеру, получить результат, спрятать в файл…

Пункт пятый: полет со сканером

На питоне была написана микропрограмма, для манипуляций с консолью.
Пишу по памяти, потому как данный скрипт был написан на продакшне(BackTrack r3 на виртуалке), и позже радостного нахождения большой кучи уязвимостей все это дело было закрыто, без сохранения(виртуалка в смысле), следственно сам скрипт не сохранился…
Толк в том, Дабы запустить перл скрипт nikto.pl на 60 сек, и то, что он поспеет за это время, записать в файл с именем сайта(для простоты последующей обработки).

import os, time

sites = file("sites2.txt")
for site in sites:
    os.system("perl nikto.pl -h " site " | tee " site ".txt")
    os.system("pidof perl | tee perlID.txt")
    time.sleep(60)
    pid = file("perlID.txt")[0]
    os.system("taskkill " pid)

Позже работы сего сканера в файлах вида: сайт.txt, обнаруживались стремительно обнаруженные уязвимости(в течение 60 секунд).

Пункт шестой: разбор полетов

Позже некоторого времени работы(оставлял на ночь) я решил посмотреть, что же там за дыры…
Потому как програсообщество довольно прошаренно в этом деле(в информационной безопасности в смысле) некоторые отчеты оказались совсем без радующих глаз плюсиков…

Впрочем, среди 3-х сотен сайтов были найдены и «дырявые» сайты.

Рейтинг уязвимостей

1). Всевозможные открытые папки и не разрешенные к доступу файлы. (40~ сайтов)
2). Разные допустимые места SQL и XSS. (20~ сайтов)
3). Небезопасные протоколы обмена информацией, незапароленные memcached и всяческие дыры в админках(нет проверки на доступ к файлам, либо пустой пароль = полный пароль). (10~ сайтов)
4). Откровенные ошибки(либо недоработки). Неимение пароля на админку(скрипт ругался даже на 12 файлов, и посылал посмотреть, что же там увлекательного). (2 сайта)
5). Встреченная в исключительном экземпляре оплошность, и то по недосмотру(я думаю), прямой доступ к phpmyadmin’у с логином root и без пароля(дефолтные настройки). Огромнее на этом сайте НИКАКИХ уязвимостей обнаружено не было, следственно считаю, что это легко по недосмотру.

Проверены были не все пользователи, не все сайты, не все вероятности из всех вероятностей!

Я верю, что данный пост будет пригоден кому-то(какой-то менеджер внезапно проверит на своем сайте что-то).
Менеджеры уязвимых сайтов сообщены. Верю на позитивные мысли в ваших головах!

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB