За последние 24 часа нас посетили 22767 программистов и 1217 роботов. Сейчас ищет 741 программист ...

Плачу за поиск уязвимостей в поректе ccsis.com

Тема в разделе "PHP Free-Lance", создана пользователем ONK, 11 июн 2007.

  1. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Долго думал где лучше разметить эту тему.
    Полностью подходящего форума нет, а этот подходит только отчасти, хотелось бы кончено, чтобы тебя была в максимально посещаемом форуме, но что есть то и съедим :).

    Я планирую в ближайшее время выпустить релиз данного программного продукта, и посмотреть что из этого выйдет.
    Соответственно есть желание провести максимально полное тестирование функциональных возможностей и безопасности проекта. Конечно же платить за каждый выявленный баг я не в состоянии, но отлично понимаю, что финансовая стимуляция необходима ;). Вобщем я гарантирую (в пределах бюджета тестирования) оплату всех ошибок влияющих на безопасность проекта. Бюджет тестирования 1000 баксов (больше не готов, к тому-же если будет больше то это плохой знак).

    Тестирование будет проводиться в течении месяца, с момента создания ЭТОЙ темы.

    Подробности и условия оплаты здесь:

    http://ccsis.com/ru/topic9.htm

    Спасибо всем, кто примет участия в тестировании!
     
  2. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    не густо,,, придётся вешать на phpclub-e
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    какие-то у тебя там хитрые реврайты - с ними у меня ошибка 403 выскакивает.
     
  4. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    dark-demon, реврайты вроде примитивные, возможно директиву RewriteEngine стоит убрать, если включено по умолчанию.

    Или просто отключить оптимизацию в админцентре.
     
  5. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а где это в админцентре?

    ps: передай дизайнеру, чтоб убил себя любым доступным способом :)
     
  6. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Здесь:

    Админцентр » Компоненты системы » Оптимизация ссылок для поисковых машин
     
  7. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    отключил - теперь работает. но я надеюсь ты понимаешь, что это борьба с симптомами?
     
  8. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    вообще, очень сыро...
    если я не авторизован и пытаюсь создать тему - вываливается форма логина, которая не работает. если нажать на "войти", то логинишься нормально.

    где там у тебя включается вывод ошибок php?

    Код (Text):
    1.         $SQL    = "SELECT a.mod_id,a.parent_id,a.mod_name,a.mod_data,a.description,a.is_hidden,a.is_semi_hidden,b.mod_id,b.parent_id,b.mod_name,b.description,b.is_hidden,b.is_semi_hidden,a.req_page_lib,a.req_authorisation,a.is_guest_allow,b.is_activ FROM `%1\$s_modules` a LEFT JOIN `%1\$s_modules` b ON(b.mod_id = a.parent_id) WHERE a.is_activ = 1";
    думаю тут не помешало бы разбить строку на несколько...

    Код (Text):
    1.             $aTree      = array(array($row[0],$row[1],$row[2],$row[4],$row[5],$row[6],1),array($row[7],$row[8],$row[9],$row[10],$row[11],$row[12],$row[16]));
    magic numbers? :)
     
  9. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    dark-demon

    1. По поводу оптимизации ссылок, я бы разобрался в причине, но не имею возможности, т.к. проблеме на твоей машине а не на моей. Вот если бы ты докапался до причины и дал рекомендации по устранению -), вот это было бы здорово.
    У меня никаких проблем с модреврайтом нету. Может он у тебя отключен?
    В стандартном дистрибутиве по умолчанию оптимизация ссылок отключена (я исхожу что у клиента нет модреврайта). Просто дистрибутив демоверсии собран для работы на сервере с известными настройками и свойствами, соответственно я могу на них рассчитывать и использовать.

    2.
    Сыро и должно быть ;)

    Можно подробнее про форму логина при создании темы? У меня подозрения, что ты пытаешся наделить процедуру создания темя функциональностью, которой она не обладает. :)
    При создании темы не авторизованным пользователем, просто появляется дополнительное поле для ввода имени пользователя. Причём, в случае совпадения (или высокой степени "похожести") имени пользователя с именем одного из зарегистрированных пользователей должна выводиться ошибка.
    Так задумано, может быть даже работает. -)

    3. Конфигурационная переменная номер 105, раздел конфигурирования админцентра. Но она должна быть включена, так как дистрибутив демоверсии сгенерирован с включённым режимом отладки (на сервере демоверсий автоматически собираются журналы ошибок). Есть одно но, варнинги пишутся в журнал ошибок без вывода на экран. На экран выводится подробная информация о критических ошибках. Поищи в корне файлы с именем *error.txt

    4. В этом SQL запросе объединены всего 2 таблицы. Он простой и понятный, не вижу смысла разбивать его на строки. Я обычно разбиваю на строки запросы из 4-х и более объединений или со сложной логикой.

    5. Ну это маленький хак в построении дерева :) Если кратко, это не для того чтобы читали, это для того чтобы работало ;)
     
  10. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    1. да, похоже у меня реально реврайт отвалился...
    2. не знаю что там задумано, но происходит описанное выше.
    3. опция включена, файл с ошибками не появляется. я так понял ты по любому варнингу показываешь белую страницу?
    4. sql - это недоязык? почему ты не пишешь, например,
    Код (Text):
    1. class Timer{function Timer(){$this->start = explode("",microtime());}function current_time(){$curr = explode(" ",microtime());return $curr[1] - $this->start[0] - this->start[1] + $curr[0];}}
    - тоже ведь всё просто и понятно...
    5. дык так и появляются магические числа :) потому, что тому, кто их пишет очень хочется соптимизировать, но совершенно наплевать, что кому-то потом в этом копаться...
     
  11. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
  12. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    dark-demon

    2. сейчас проверю.
    3. белого экрана не должно быть вообще, я не понимаю в чём дело, может у тебя ПХП сконфигурирован не отображать Fatal error-ы? В данный момент найдена она критическая ошибка (опечатка в имени функции).
    4. я вынужден признать, что делаю така как удобно мне, не подумав о тех кто будет читать мой код. -:(
    5. это ядро движка, оно должно быть оптимизировано (в данном случае сэкономлен 1 SQL запрос). В модулях администрирования и не очень активно используемых компонентах код без подобных хаков.

    6. не понял шутки. Данная конструкция работает корректно. Ты мог столкнуться с тем, что подобный адрес не работает в [​IMG]
     
  13. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Провёл проверки по второму пункту. Ничего похожего на описанное не нашёл.
    Обнаружил несколько ошибок, сейчас буду обновлять дистрибутивы.
     
  14. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Обновил дистрибутивы. Надеюсь стало чуть посуше. :)
     
  15. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    бугога :) ничего не делал, но сейчас фильтр урлов совсем отвалился - пропускает даже с протоколом javascript...

    ps: а ты в пятом пхп тестировал?

    pps: я не говорил, что ошибки ко мне просто липнут? :)

    ppps: ща попробую последнюю версию...
     
  16. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    видимо что-то у тебя не так с регуляркой в check_is_url - так всегда бывает, когда пишешь сложные вещи в одну строку :)

    например, такой код проходит:
    Код (Text):
    1. [url=javascript]click me[/url]
    а такой - нет:
    Код (Text):
    1. [url="http://localhost.ru/testo/ccsis/phorum/index.php?action=topic_page&mid=1506#m1506"]click me[/url]
     
  17. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    dark-demon покажи код check_is_url

    Дело в том что такая уязвимость была в одной из предыдущих версий, и она была исправлена. У меня впечатление, что я залил не тот дистрибутив.
     
  18. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    А вообще это XSS на $80
     
  19. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Код (Text):
    1. function check_is_url($data){
    2.     $sProtocol      = '((ht|f)tp(s?))://';
    3.     $sIp            = '((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])';
    4.     $sDomain        = '([a-zA-Z0-9].)[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,6}';
    5.     $sPort          = ':[0-9]{1,5}';
    6.     $sPath          = '[\\.\\\/\-\w]{1,}([\w-]{0,32}.[\w]{1,12})?';
    7.     $sParameters    = '[?]{1}([\w%+=&;]{0,250})';
    8.     return (boolean) !empty($data) && preg_match('!^(('.$sProtocol.')?(('.$sDomain.')|('.$sIp.'))?('.$sPort.')?)?('.$sPath.'('.$sParameters.')?)?$!si',$data);
    9. }
    особо не вникал, но есть подозрение, что двойные слэши тут излишни...


    update: поковырялся в комоде - у тебя точка в пути не экранирована.

    ps: кстати, тире можно не экранировать, если его написать в начале или в конце:
    Код (Text):
    1. [-./\\\w]{1,}
     
  20. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    dark-demon, ну что-же 80 баксов твои :)
    Напиши мне в приват моего форума wm реквизиты, и огромное спасибо! Оплачу после 20-го.

    да, я знаю. ([\w-]{0,32})
     
  21. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    dark-demon, поигрался я с этой багой/уязвимостью. пока не могу понять, как её можно использовать, и есть ли уязвимость вообще :). Можеш привести пример хоть сколько бы то нибыло опасного действия?
     
  22. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    dark-demon

    По поводу слэшей ты прав, подправил, теперь выглядит проще.

    PHP:
    1.  
    2.  
    3. function check_is_url($data){
    4.     $sProtocol      = '((ht|f)tp(s?))://';
    5.     $sIp            = '((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])';
    6.     $sDomain        = '([a-zA-Z0-9].)[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,6}';
    7.     $sPort          = ':[0-9]{1,5}';
    8.     $sPath          = '[.\\/\w-]{1,}([\w-]{0,32}\.[\w]{1,12})?';
    9.     $sParameters    = '[?]{1}([\w%+=#&;]{0,250})';
    10.     return (boolean) !empty($data) && preg_match('!^(('.$sProtocol.')?(('.$sDomain.')|('.$sIp.'))?('.$sPort.')?)?('.$sPath.'('.$sParameters.')?)?$!si',$data);
    11. }
    12.  
     
  23. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    её там и нет :)

    кстати, какой смысл в этом обороте?
    Код (Text):
    1. (boolean) !empty
    разве восклицательный знак может возвращать что-то отличное от boolean?
     
  24. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Смысл очевиден, я подумал, что найдена уязвимость, причём судя по приведённому коду в последней версии, я даже озвучил цену ;). А когда занялся изучением, понял, что уязвимостью это назвать очень трудно.

    Вот кстати дырявый код из предыдущей версии:
    PHP:
    1.  
    2. function check_is_url($data){
    3.     return (boolean) preg_match('!^((((ht|f)tp(s?))://)?(([a-zA-Z0-9].)[a-zA-Z0-9\\-\\.]+\\.[a-zA-Z]{2,6}|((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9]))(:[0-9]+[\\\\/]{1})*([\\\\/]{1,1){0,1}){0,1}([\\.\\\\/\w]{1,})([?]{1}([\w%+=&]{0,})){0,1}$!si',$data);
    4. }
    5.  
    Именно про него я подумал, прочитав фразу про одну строку -)

    Этот код пропускал javascript:arelt('xss') :)

    Приведение к логическому значению осталось как раз от этой процедуры (как известно preg_match возвращает результат целочисленного типа). И вообще придираться к таким мелочам не красиво ;))) В коде есть куча более смешных мест.
     
  25. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    Попробовал зарегистрироваться на сайте. Выдали форму, нажал Отправить.
    Далее оно мне выдало список ошибок, я их не успел прочитать, и далее меня перекинуло на главную страницу форума. Помоему сдесь что то не то