скрипт поиска нефильтруемой переменной (SQL injection)

Discussion in 'Уязвимости' started by Strilo4ka, 22 Dec 2009.

  1. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    Скрипт поиска нефильтруемых переменных (SQL injection)

    Писал на перл, ругать сильно не надо если плохо!:)
    Должен быть установлен ActivePerl.
    Что должен делать скрипт:
    - искать переменные, нефильтруемые переменные:
    1) Через внедрение просто кавычки в линки з гет-параметрами (у все поочереди), и если кавычка фильтруеться, то текст blablabla, масив можно дополнить в функции при появлении Варнингов (регулярку по поиску варнингов можно улучшить - не писал слова mysql_error fetch_array ...). Если первый способ не сработал, то скрипт через 2) пытаеться найти нефильтруемую переменную.
    2) Поиск по неизменению контента (проверяються отпечатки двох страниц, если одинаковые переменная вероятно нефильтруемая)... Масив с внедренными операторами можно дополнять так как и в 1) случае.

    Пример тела (тоесть функциональный подход) ис книги БХВ "PHP в примерах".

    При поиске линков собираються уникальные линки, должы собираться с одного хоста, линки - mailto отбрасываються и картинки.
    Тестировал у себя на обычном веб-сервере в ЛР. Так как нет через прокси ,через который не получаеться сканить почему то, через dial-up пробывал, вроде работало.

    За ошыбки только извинения:
    скчать
     
    #1 Strilo4ka, 22 Dec 2009
    Last edited: 30 Dec 2009
    5 people like this.
  2. Krist_ALL

    Krist_ALL Banned

    Joined:
    14 Jan 2009
    Messages:
    436
    Likes Received:
    193
    Reputations:
    24
    Мда, ппц - кавычку подставляет!
    а других методов нет?Оо
    прочитай сначала статьи а потои пиши скрипты
     
  3. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    не умничай я тока учусь что сильно умный кристальный мен... Просьба модераторов удалить эту тему, я не могу это сделать!!! :)
     
    #3 Strilo4ka, 23 Dec 2009
    Last edited: 24 Dec 2009
  4. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    Да я согласен что сидеть искать ее долго и логи засыпать:
    ну смысл в том что подставляет. Да задача легка, а если много линков что ты будеш сидеть руками искать переменную. В этом и суть заключаеться, + перл одновременно начал изучать. Для меня много плюсов. Кстати иди сам почитай понял, "кристал" !

    вот отчет одного сайта:

    Сканирование http://big-remont.org.ua/ ...
    Линк: http://big-remont.org.ua/index.php
    Линк: http://big-remont.org.ua/index.php?id=services
    Линк: http://big-remont.org.ua/album.php
    Линк: http://big-remont.org.ua/contact.php
    Линк: http://big-remont.org.ua/index.php?id=dom
    Линк: http://big-remont.org.ua/index.php?id=kvartira
    Линк: http://big-remont.org.ua/index.php?id=ofice
    Линк: http://big-remont.org.ua/index.php?id=steni
    Линк: http://big-remont.org.ua/index.php?id=potolki
    Линк: http://big-remont.org.ua/index.php?id=poli
    Линк: http://big-remont.org.ua/index.php?id=dop
    Линк: http://big-remont.org.ua/index.php?id=faq

    На данный момент парсим страничку: http://big-remont.org.ua/index.php

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=services

    На данный момент парсим страничку: http://big-remont.org.ua/album.php

    На данный момент парсим страничку: http://big-remont.org.ua/contact.php

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=dom

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=kvartira

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=ofice

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=steni

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=potolki

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=poli

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=dop

    На данный момент парсим страничку: http://big-remont.org.ua/index.php?id=faq
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=services
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=services'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=servicesbla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=services' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=services --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=services*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=dom
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=dom'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=dombla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=dom' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=dom --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=dom*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=kvartira
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=kvartira'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=kvartirabla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=kvartira' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=kvartira --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=kvartira*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=ofice
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=ofice'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=oficebla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=ofice' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=ofice --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=ofice*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=steni
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=steni'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=stenibla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=steni' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=steni --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=steni*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=potolki
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=potolki'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=potolkibla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=potolki' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=potolki --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=potolki*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=poli
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=poli'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=polibla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=poli' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=poli --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=poli*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=dop
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=dop'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=dopbla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=dop' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=dop --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=dop*1
    Все ок!
    в линке есть гет-параметр(ы): http://big-remont.org.ua/index.php?id=faq
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=faq'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошыбках
    http://big-remont.org.ua/index.php?id=faqbla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=faq' --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=faq --+
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошыбках (по контенту)
    http://big-remont.org.ua/index.php?id=faq*1
    Все ок!
    Ко-во линков: 12
    Найденные линки:
    http://big-remont.org.ua/index.php
    http://big-remont.org.ua/index.php?id=services
    http://big-remont.org.ua/album.php
    http://big-remont.org.ua/contact.php
    http://big-remont.org.ua/index.php?id=dom
    http://big-remont.org.ua/index.php?id=kvartira
    http://big-remont.org.ua/index.php?id=ofice
    http://big-remont.org.ua/index.php?id=steni
    http://big-remont.org.ua/index.php?id=potolki
    http://big-remont.org.ua/index.php?id=poli
    http://big-remont.org.ua/index.php?id=dop
    http://big-remont.org.ua/index.php?id=faq
     
    #4 Strilo4ka, 23 Dec 2009
    Last edited: 23 Dec 2009
    1 person likes this.
  5. Qwazar

    Qwazar Elder - Старейшина

    Joined:
    2 Jun 2005
    Messages:
    989
    Likes Received:
    904
    Reputations:
    587
    Такой подход имеет место быть, хоть и со своими недостатками, которых при росте популярности AJAX становится всё больше. А так, совершенствуй парсер HTML/JS - выявляй параметры. Главное, исправь "выключеных ошЫбках". Глаза режет.
     
  6. Root-access

    Root-access Elder - Старейшина

    Joined:
    18 Jun 2008
    Messages:
    193
    Likes Received:
    195
    Reputations:
    91
    Надо не только совершенствовать парсер, но и методы поиска. Если параметр цифровой, надо сравнивать контент при 2-1 и 1, например. Если строковый, сравнивать blabla+AND+1=1 и blabla+AND+1=2.
     
  7. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    та я в курсе Root-access). Еще придумаю. И чтоб документы-линки не собирало, тоесть там где pdf,doc, txt и.д . Тоесть регулярку править и править:
    Code:
     if (($links{'href'} !~ /^mailto:|.*\.jpg$|.*\.png$|.*\.jpeg$|.*\.bmp$|.*\.gif$|.*\.pdf$|.*\.doc$|.*\.ppt$/i) && (index($links{'href'},$host)!=-1)) 
    А по поводу
    , я не раз встречал что числа в строковом контекcте в запросе были , интресеный момент. Не, но самособой понятно что больше в числовом контекте, но не исключено что может и быть в строковом. Тут еще работы много.
    Тоесть, смысл в чем: больше им парсить и смотреть на отчет(тогда улучшать ), ну и практики побольше --> тогда может что нить получиться.
     
    #7 Strilo4ka, 23 Dec 2009
    Last edited: 23 Dec 2009
  8. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    научил скрипт ограничивать каталогом, чтоб не все ссылки собирал, допустим есть форум , то зачем там по линкам бегать. Допустим ввели
    , слеш обязателен, то собирает все ссылки именно ис shop...!!!
    Поправил регулярку
    Решаеться задача Root-access
    Пост обновил!
     
    #8 Strilo4ka, 24 Dec 2009
    Last edited: 24 Dec 2009
  9. @D_

    @D_ New Member

    Joined:
    29 Jul 2009
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
    а по какой причине слеш обязательный?
     
  10. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    то что бывало такое что введеш тока домен бес каталога, у меня проверка стоит до последнего вхождения "/", если не ввести и поставить пометку ограничить каталогом, то обрезало до http:/...
    Ну в принцыпе проверку можно было сделать. Я сделал проверку обязательну в конце. Так единообразно просто! (веб-интерфейс с примером как вводить):)
     
    #10 Strilo4ka, 24 Dec 2009
    Last edited: 24 Dec 2009
    1 person likes this.
  11. shell_c0de

    shell_c0de Hack All World

    Joined:
    7 Jul 2009
    Messages:
    1,184
    Likes Received:
    618
    Reputations:
    690
    [не реклама]
    зайди на сайт http://www.savsak.com/article.asp и скачай оттуда прогу AR-TA и посмари как она работает ....там почти все реализовано как надо и намного круче+есть много фичи , попробуй также и с GUI )
    а за старание +
     
    _________________________
    #11 shell_c0de, 24 Dec 2009
    Last edited: 24 Dec 2009
  12. m0Hze

    m0Hze Well-Known Member

    Joined:
    1 Nov 2008
    Messages:
    266
    Likes Received:
    655
    Reputations:
    208
    Не вставляет.Великая хакерская кавычка,по наблюдениям, все больше и больше по важности стремиться к нулю.Люди научились использовать фильтры,все больше в моде аякс,так что запросы отследить все нуднее и нуднее.Лучше все делать руками,там где не прокатит кавычка,можно попробывать логику,и наоборот.
     
  13. Bb0y

    Bb0y Active Member

    Joined:
    30 Oct 2009
    Messages:
    116
    Likes Received:
    136
    Reputations:
    78
    Не плохо, за старание респект однозначно. Но пока для этих целей юзать буду ArxSqlSearcher, хотя (включительно Арх'совский) пользовался подобными скриптами раза 2 в жизни
     
  14. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    К сожелению да !
     
    #14 Strilo4ka, 24 Dec 2009
    Last edited: 25 Dec 2009
  15. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    Сделал, определяет значение гет параметра если строка, то береться один масив с елементами которые будут вставляться , когда число, то другой.

    У нас три масива :
    1) просто для возникновения ошыбки;
    2) для строковых значений;
    3) для числовых.

    Если на линке есть ошибка при подстановке значений с первого масива, то 2 или 3 масив не прокручиваеться. Если нет, то определяеться что за значение в гет-параметре. Потом применяеться масив 2 или 3 соответсвенно. И все значения с этих масивов тоже не прокручиваються, если нашлись одинавовые сумы, то осуществялеться выход что соответсвенно должно ускорить. Надо заметить что если линк будет с использованием mod_rewrite, то ниче это не даст.
    Участок кода:
    На даный момент недостатков много:
    1) если относительные линки, то не преобразовует.
    Надо посидеть с модулем URI поиграться.
    2) линки могут быть ЧПУ;
    3) использование аякс технологии;
     
    #15 Strilo4ka, 24 Dec 2009
    Last edited: 26 Dec 2009
    1 person likes this.
  16. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    Root-access проверь пожалуйста, ради интереса, я не могу с своим нетом проверить. На локалке что то чихлит а в нете фиг его знает .
    Был создал хост и его сканил.

    Чтоб увеличить скорость сделаю до первого нахождения переменной и выход. Если надо будет полное сканирование! Ну и чтоб однотипные линки отбрасывало!
     
    #16 Strilo4ka, 24 Dec 2009
    Last edited: 24 Dec 2009
  17. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    Сделал фичу:
    Если такие линки встречаються:
    и
    То скрипт возьмет один линк ис етих первый попавшыйся для проверки гет-параметров.
    Но, если будет такая:
    , то такую тоже будет проверять, так как здесь есть дополнительный параметр.

    Также, сделал неполное сканирование(чекбокс) - имееться ввиду, если первая ошыбка нашлась или по контенту определил скрипт, то дальше робота завершаеться. Просто так надо было долго ждать.

    На даный момент недостаток:
    1) относительные урлы и то что выше;

    Добавил осуществление пинга через форму, там переменная для пинга не фильтруеться :):
    Code:
    <?
    //оброботка ошыбок
    # выводим все сообщения об ошыбках
    error_reporting(E_ALL);
    //лимита нет
    set_time_limit(0);
    //require("inc/functions.php");
    //запрещаем кеширование браузером
    nocache();
    ?>
    
    <html>
    
    <head>
      <title>Сканер by Strilo4ka!</title>
    </head>
    
    <body>
    
    <form name="" action="" method="get">
    <a href="../cgi-bin/scaner.pl">Назад</a><br>
    Целевой адрес (пример www.site.ru)<br>
    <input name="url" type="text" value=""><br>
    <input name="option" type="radio" value="1" checked>Ping<br>
    <!-- <input name="option" type="radio" value="2" >Whois<br> -->
    <input type="submit" value="Сделать это!">
    
    
    
    <?php
    //чтоб небыло ошыбки неинициализированой переменной
    if (isset($_GET['option']))
    {
    switch ($_GET['option'])
     {
     case 1: echo "<br><b>Пингуем {$_GET['url']}:</b><br>";
             echo ping($_GET['url']);
             break;
     case 2: echo "<b>whois для {$_GET['url']}:</b><br>";
     		 //тут будеи функция которая возвращает результат с whois
     		 break;
     }
    }
    
    ?>
    
    </body>
    
    </html>
    
    ?>
    Теперь еще можно указывать количество линков для пробежки чтоб не ждать долго. Для этого на форме чекбокс есть (обязательный). Если чесно мне скрипт не нравиться так как за оптимизацию не думал и воше можно было лучше намного. 2 дня писал. :) Скажу что работает, вот на этом сайте есть блинд, домен скрою:

    Code:
    Сканирование http://site/ ...
    Линк: http://site/index.php?lan=ukr
    Линк: http://site/feedback.php?lan=ukr
    
    На данный момент парсим страничку: http://site/index.php?lan=ukr
    
    На данный момент парсим страничку: http://site/feedback.php?lan=ukr
    В линке есть гет-параметр(ы): http://site/index.php?lan=ukr
    Поиск нефильтруемой переменной при включеных ошибках
    http://site/index.php?lan=ukr'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошибках
    http://site/index.php?lan=ukrbla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошибках (по контенту)
    http://site/index.php?lan=ukr' --+
    [COLOR=Red]Есть возможность проведения SQL injection[/COLOR]
    В линке есть гет-параметр(ы): http://site//feedback.php?lan=ukr
    Поиск нефильтруемой переменной при включеных ошибках
    http://site/feedback.php?lan=ukr'
    Все ок!
    Поиск нефильтруемой переменной при включеных ошибках
    http://site/feedback.php?lan=ukrbla-bla-bla
    Все ок!
    Поиск нефильтруемой переменной при выключеных ошибках (по контенту)
    http://site/feedback.php?lan=ukr' --+
    [COLOR=Red]Есть возможность проведения SQL injection[/COLOR]
    
    
    Сканировать еще
    Ко-во наденных линков: 2
    Сами линки:
    http://site/index.php?lan=ukr
    http://site/feedback.php?lan=ukr
    
    В условиях поиска задал был пробежка для сайта: 2 ну и адрес.

    Реальный пример роботы скрипта №2:
    взял скуль
    ис темы "SQL Инъекции" которую нашел Pr0mo.


    - ввел этот адрес (сам домен бес скрипта и переменных (типо я не знаю что там есть дырявая переменная);
    - поставил ограничиться каталогом;
    - неполное сканирование;
    - пробежка по 1 линку;


    Code:
    Сканирование http://www.stanadyne.com/ ...
    Линк: http://www.stanadyne.com/view.php?id=1
    
    На данный момент парсим страничку: http://www.stanadyne.com/view.php?id=1
    В линке есть гет-параметр(ы): http://www.stanadyne.com/view.php?id=1
    Поиск нефильтруемой переменной при включеных ошибках
    http://www.stanadyne.com/view.php?id=1'
    [COLOR=Red]Есть возможность проведения SQL injection:[/COLOR]
    В контенте ошибка : Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/content/19/5003819/html/view.php on line 17
    
    Сканировать еще
    Ко-во наденных линков: 1
    Сами линки:
    http://www.stanadyne.com/view.php?id=1
    Все оффтоп! Тема закрыта
     
    #17 Strilo4ka, 24 Dec 2009
    Last edited: 25 Dec 2009