HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.11.2011, 11:32
XAMEHA
Новичок
Регистрация: 15.05.2010
Сообщений: 0
Провел на форуме:
2268

Репутация: 0
По умолчанию

В настоящее время PHP — самый популярный язык для создания веб-приложений и сайтов в том числе. Конечно, существует много сайтов написанных на Perl, pythoon; крупных сайтов использующих JSP, C++ и т. д.

Основные уязвимости, взломы направлены именно на PHP-интерператор и на интерпретируемые скрипты в частности. Большинство найденных уязвимостей направленно на интерпретирование скрипта средой
 
Ответить с цитированием

  #2  
Старый 13.11.2011, 11:35
XAMEHA
Новичок
Регистрация: 15.05.2010
Сообщений: 0
Провел на форуме:
2268

Репутация: 0
По умолчанию


Константы, объявленные в ядре.​


Плюс данных констант в том, что не следует использовать кавычки при их использовании. Пример от Expl0ited:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/
COLOR][/COLOR
Если предположить запрет использования end и т. п. функций, можно выдвинуть данный вариант:

[PHP]
PHP:
[COLOR="#000000"][COLOR="#007700"]

fopen - Открыть файл



Функции изменения ресурсов, работают не только с файлами. Для каждой заблокированной функции можно найти замену среди других

fputs, fwrite - Бинарно-безопасная запись в файл

fgetc - Считывает символ из файла

fgetcsv - Читает строку из файла и производит разбор данных CSV

fgets - Читает строку из файла

fgetss - Прочитать строку из файла и отбросить HTML-теги

fpassthru - Выводит все оставшиеся данные из файлового указателя

fputcsv - Форматирует строку в виде CSV и записывает её в файловый указатель

fscanf - Обрабатывает данные из файла в соответствии с форматом

fseek - Устанавливает смещение в файловом указателе

ftruncate - Урезает файл до указанной длинны

​readlink - Возвращает файл, на который указывает символическая ссылка

tempnam - Создаёт файл с уникальным именем

tmpfile - Создаёт временный файл

parse_ini_file - Чтение и парсинг ini файлы

copy, move_uploaded_file, file_get_contents, file_put_contents, file, readfile - Без коментариев

Bzip2 - http://www.php.net/manual/ru/book.bzip2.php

Zlib - http://www.php.net/manual/ru/book.zlib.php

highlight_file, show_source - выделение синтаксиса файла, возможно использование URL(allow_url_include).

readgzfile - выводит gz-файл. Функция так же может читать обычные файлы, и использоваться как readfile.

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR]

[/COLOR
3. Работа с сетью - закачка шеллов, отдача файлов



fopen, file_get_contents, file - Без комментариев.

Функции работы с базами данных - при некоторых обстоятельствах будет удобно подключиться к удалённой базе данных и передать необходимую информацию в обе стороны.

Думаю код данного раздела будет понятен всем, расписывать его не имеет смысла так как примеры находятся во многих источниках.



fsockopen, pfsockopen, stream_socket_client — получение данных.

dns_get_record - получение DNS записей(UDP).

Расширение sockets - socket_create и т. п. функции

Cyrus IMAP - http://www.php.net/manual/ru/book.cyrus.php - Работа с IMAP сервером.

get_meta_tags — Чтение мета-тегов HTML файла, путь к которому передан в первом аргументе, и return в виде ассоциативно массива.

cURL:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]curl_open[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]) {

[/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]curl_init[/COLOR][COLOR="#007700"]();

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_URL[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$url[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_USERAGENT[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'Opera 11.2'[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_HEADER[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_CONNECTTIMEOUT[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]3[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_ENCODING[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'gzip, deflate'[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_RETURNTRANSFER[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]$out[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]curl_exec[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]curl_close[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$site[/COLOR][COLOR="#007700"]);

return[/COLOR][COLOR="#0000BB"]$out[/COLOR][COLOR="#007700"];

}

[/COLOR][/COLOR
Расширение FTP - http://www.php.net/manual/ru/book.ftp.php



4. Выполнение system.



5-ый аргумент функции mail. До некоторых версий php возможно выполнение произвольных команд

system, exec, passthru, shell_exec(``) - Без комментариев.

proc_open и т.п. - Выполняет команду и открывает файловый указатель для ввода/вывода.

popen и т. п. - Открывает файловый указатель процесса

dl - загружает РНР-расширение на этапе прогона(enable_dl).



Классы, объекты​

Список объявленных классов — get_declared_classes(). Ini:disable_classes — Список запрещённых классов.

0. DOMDocument, XMLReader, XMLWriter, SimpleXMLElement - Работа с XML, HTML. Возможность чтения и записи файлов данного формата.

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]loadHTMLFile[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'./test'[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]//Чтение HTML файла

[/COLOR][COLOR="#007700"]echo[/COLOR][COLOR="#0000BB"]$doc[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]saveHTML[/COLOR][COLOR="#007700"]();[/COLOR][COLOR="#FF8000"]//Вывод

[/COLOR][COLOR="#0000BB"]$doc[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]saveHTMLFile[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'test.html'[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]//Запись HTML файла

[/COLOR][COLOR="#007700"]unset([/COLOR][COLOR="#0000BB"]$doc[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]$doc[/COLOR][COLOR="#007700"]= new[/COLOR][COLOR="#0000BB"]DOMDocument[/COLOR][COLOR="#007700"]();

[/COLOR][COLOR="#0000BB"]$doc[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]loadXMLFile[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'./testx'[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]//Чтение XML файла

[/COLOR][COLOR="#007700"]echo[/COLOR][COLOR="#0000BB"]$doc[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]saveXML[/COLOR][COLOR="#007700"]();[/COLOR][COLOR="#FF8000"]//Вывод

[/COLOR][COLOR="#0000BB"]$doc[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]saveXMLFile[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'testx.html'[/COLOR][COLOR="#007700"]);[/COLOR][COLOR="#FF8000"]//Запись XML файла

//[/COLOR][COLOR="#0000BB"]
?>[/COLOR]

[/COLOR] 
1. ZipArchive - Аналогично, работа с архивами, запаковка файлов, извлечение.

Код:
Code:
ZipArchive { 
	/* Methods */ 
	bool addEmptyDir ( string $dirname ) 
	bool addFile ( string $filename [, string $localname = NULL [, int $start = 0 [, int $length = 0 ]]] ) 
	bool addFromString ( string $localname , string $contents ) 
	bool close ( void ) 
	bool deleteIndex ( int $index ) 
	bool deleteName ( string $name ) 
	bool extractTo ( string $destination [, mixed $entries ] ) 
	string getArchiveComment ([ int $flags ] ) 
	string getCommentIndex ( int $index [, int $flags ] ) 
	string getCommentName ( string $name [, int $flags ] ) 
	mixed getFromIndex ( int $index [, int $length = 0 [, int $flags ]] ) 
	mixed getFromName ( string $name [, int $length = 0 [, int $flags ]] ) 
	string getNameIndex ( int $index [, int $flags ] ) 
	string getStatusString ( void ) 
	resource getStream ( string $name ) 
	mixed locateName ( string $name [, int $flags ] ) 
	mixed open ( string $filename [, int $flags ] ) 
	bool renameIndex ( int $index , string $newname ) 
	bool renameName ( string $name , string $newname ) 
	mixed setArchiveComment ( string $comment ) 
	mixed setCommentIndex ( int $index , string $comment ) 
	mixed setCommentName ( string $name , string $comment ) 
	mixed statIndex ( int $index [, int $flags ] )gzdeflate 
	mixed statName ( name $name [, int $flags ] ) 
	mixed unchangeAll ( void ) 
	mixed unchangeArchive ( void ) 
	mixed unchangeIndex ( int $index ) 
	mixed unchangeName ( string $name ) 
}
2. SOAP



SOAP (от англ. Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался в основном для реализации удалённого вызова процедур (RPC). Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур. Официальная спецификация последней версии 1.2 протокола никак не расшифровывает название SOAP. SOAP является расширением протокола XML-RPC.

SOAP может использоваться с любым протоколом прикладного уровня: SMTP, FTP, HTTP, HTTPS и др. Однако его взаимодействие с каждым из этих протоколов имеет свои особенности, которые должны быть определены отдельно. Чаще всего SOAP используется поверх HTTP.

http://ru.wikipedia.org/wiki/SOAP

http://php.su/articles/?cat=pear&page=004&adminmode=true



WSDL (англ. Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML.

http://ru.wikipedia.org/wiki/WSDL

​Текущая PHP реализация не имеет зависимости allow_url_(*). Стандартная работа с SOAP разделена на два блока - клиентскую и серверную. Многие думают что по стандартной схеме клиент - взламываемый ресурс, возможная дописка в CMS, но не всегда это так. Серверную часть тоже можно разместить на сайте, в различных кодах CMS и не занимающийся длительное время в этой области человек просто не разберёт, что делает данный код.

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



Стандартная библиотека PHP (англ. Standard PHP Library, SPL) — коллекция классов и интерфейсов для решения стандартных проблем в PHP. Библиотека была введена в PHP 5 и доступна по умолчанию, начиная с PHP 5.

Основное содержание библиотеки — классы-итераторы, решающие задачи итерации по каталогу, массиву, дереву XML.

SPL добавляет в PHP новые возможности ООП для работы с :
  • итераторами;
  • новые виды исключений;
  • перегрузка (overloading) массивов,
  • расширенное управление XML, файлами и данными
  • паттерн Наблюдатель, интерфейс Исчисления (counting)
  • автоматическая загрузка классов и интерфейсов
  • ...
PHP поддерживает SPL начиная с версии 5.2.1.

http://www.php.net/manual/ru/book.spl.php

И т. д.



ArrayObject - Использование объектов в качестве массивов и работа с ними.

[СODE]

ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Serializable , Countable {

/* Константы */

const integer STD_PROP_LIST = 1 ;

const integer ARRAY_AS_PROPS = 2 ;

/* Методы */

__construct ([ mixed $input [, int $flags [, string $iterator_class ]]] )

..

void uasort ( callback $cmp_function )

void uksort ( callback $cmp_function )

public void unserialize ( string $serialized )

}

[/СODE]

Предпоследние методы принимают Callback function, что так же делает их доступными для выполнения кода.

Пример:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'assert'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]));

[/COLOR][COLOR="#0000BB"]$tst[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]uksort[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'call_user_func'[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]?>[/COLOR]

[/COLOR] 
В SPL достаточно классов, многие из них(Кто ещё не сделал) лучше изучить и использовать. Вообще, перед тем как писать всё это я планировал выделить только примеры скриптов, уязвимостей, работы функций не по предусмотрению разработчика. Ну раз я уж это написал, то это всё же имеет место для публики и последующего дополнения.
 
Ответить с цитированием

  #3  
Старый 13.11.2011, 11:38
XAMEHA
Новичок
Регистрация: 15.05.2010
Сообщений: 0
Провел на форуме:
2268

Репутация: 0
По умолчанию

Пример с is_numeric​
Как то недавно объяснял одному хорошему амину смысл заключения уязвимости. Он не поверил, пока он не попросил залить шелл. В теме приведён упрощённый пример.

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]"[/COLOR][COLOR="#007700"];

while ([/COLOR][COLOR="#0000BB"]$v[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_fetch_row[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$res[/COLOR][COLOR="#007700"]))

{

[/COLOR][COLOR="#0000BB"]$opros[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]rest[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$v[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"SELECT count(*) FROM `vote` WHERE opros =[/COLOR][COLOR="#0000BB"]$opros[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$op[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]rest[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]mysql_fetch_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"])));

echo
[/COLOR][COLOR="#DD0000"]"На опрос[/COLOR][COLOR="#0000BB"]$opros[/COLOR][COLOR="#DD0000"]было зачисленно[/COLOR][COLOR="#0000BB"]$op[/COLOR][COLOR="#DD0000"]голосов\n"[/COLOR][COLOR="#007700"];

}

} else[/COLOR][COLOR="#DD0000"]'ERROR!!!'[/COLOR][COLOR="#007700"];

include
([/COLOR][COLOR="#DD0000"]'/conf/end.php'[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]?>[/COLOR]

[/COLOR] 
Самый типичный пример. Рассмотрим проверку - isset, is_numeric - первое опасности не имеет, второе, как некоторые думают защищает данный скрипт. Но вот что делает функция is_numeric - определяет, является ли переменная числом или числовой строкой. Ну и соответственно она пропускает строку 0x....

Далее поле, в которое MySQL записало знаение, извлечённое из HEX дальше используеться в запросе SELECT opros FROM `vote` GROUP BY `opros`, данные из которого используются далее - SELECT count(*) FROM `vote` WHERE opros = $opros, где $opros - это значение извлечённое из HEX где мы и сможем реализовать SQL-inj.

Php Multipleupload Overwrite - Перевод ​

PHP - Загрузка файлов:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]









[/COLOR][/COLOR
$ FILES var_dump:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]array([/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]) {

[[/COLOR][COLOR="#DD0000"]"file"[/COLOR][COLOR="#007700"]]=>

array
([/COLOR][COLOR="#0000BB"]5[/COLOR][COLOR="#007700"]) {

[[/COLOR][COLOR="#DD0000"]"name"[/COLOR][COLOR="#007700"]]=>

[/COLOR][COLOR="#0000BB"]string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]8[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#DD0000"]"file.txt"

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"type"[/COLOR][COLOR="#007700"]]=>

[/COLOR][COLOR="#0000BB"]string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]10[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#DD0000"]"text/plain"

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"tmp_name"[/COLOR][COLOR="#007700"]]=>

[/COLOR][COLOR="#0000BB"]string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]14[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#DD0000"]"/tmp/phpESrNkj"

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"error"[/COLOR][COLOR="#007700"]]=>

[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#DD0000"]"size"[/COLOR][COLOR="#007700"]]=>

[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]6[/COLOR][COLOR="#007700"])

}

}

[/COLOR][/COLOR
1. Мульти загрузка файлов:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]











[/COLOR][/COLOR
$ FILES print_r:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]Array

(

[[/COLOR][COLOR="#0000BB"]file[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]file[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]txt

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]file2[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]txt

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]type[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]plain

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]plain

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]tmp_name[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]] => /[/COLOR][COLOR="#0000BB"]tmp[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]phpcrDN2U

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]] => /[/COLOR][COLOR="#0000BB"]tmp[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]phpdQqsUR

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]0

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]0

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]6

[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]10

[/COLOR][COLOR="#007700"])

)

)

[/COLOR][/COLOR
После изучения исходных кодов движков оказалось, что разработчики используют примерно такой код:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]) {

if
([/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"file"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]"size"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]]>[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]&&[/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"file"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]"size"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]][/COLOR]

[/COLOR
2. Исходя из различных тестов и изучений исходных кодов PHP я понял то, что мы можем подменивать информацию в этом массиве и получать доступ с использованием безопасных скриптов.

php-5.3.5\main\rfc1867.c:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"]is_arr_upload[/COLOR][COLOR="#007700"]= ([/COLOR][COLOR="#0000BB"]start_arr[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]strchr[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]param[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"][/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"][/COLOR][COLOR="#007700"])) && ([/COLOR][COLOR="#0000BB"]param[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]param[/COLOR][COLOR="#007700"])-[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]] ==[/COLOR][COLOR="#0000BB"][/COLOR][COLOR="#007700"]][/COLOR][COLOR="#0000BB"][/COLOR][COLOR="#007700"]);

if
([/COLOR][COLOR="#0000BB"]is_arr_upload[/COLOR][COLOR="#007700"]) {

[/COLOR][COLOR="#0000BB"]array_len[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]start_arr[/COLOR][COLOR="#007700"]);

if
([/COLOR][COLOR="#0000BB"]array_index[/COLOR][COLOR="#007700"]) {

[/COLOR][COLOR="#0000BB"]efree[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]array_index[/COLOR][COLOR="#007700"]);

}

[/COLOR][COLOR="#0000BB"]array_index[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]estrndup[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]start_arr[/COLOR][COLOR="#007700"]+[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]array_len[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"]);

}

(...)

[/COLOR][COLOR="#0000BB"]abuf[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]estrndup[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]param[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]strlen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]param[/COLOR][COLOR="#007700"])-[/COLOR][COLOR="#0000BB"]array_len[/COLOR][COLOR="#007700"]);

[/COLOR][/COLOR
...

[/PHP]

if (is_arr_upload) {

snprintf(lbuf, llen, "%s[type][%s]", abuf, array_index);

} else {

snprintf(lbuf, llen, "%s[type]", param);

}

register_http_post_files_variable(lbuf, cd, http_post_files, 0 TSRMLS_CC);

[/PHP]

Исходя из данного кода, когда мы отправляем эту форму:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]











[/COLOR][/COLOR
Мы получаем:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]Array

(

[[/COLOR][COLOR="#0000BB"]file[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]file[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]txt

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]type[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]plain

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]tmp_name[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] => /[/COLOR][COLOR="#0000BB"]tmp[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]php537jRI

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]0

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]10

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]file2[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]txt

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]type[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]plain

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]tmp_name[/COLOR][COLOR="#007700"]] => /[/COLOR][COLOR="#0000BB"]tmp[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]phpxktZ4e

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]0

[/COLOR][COLOR="#007700"])

)

)

[/COLOR][/COLOR
Таким образом мы загружаем file.txt, но с размером file2.txt!

Таким образом мы можем подменить значение нужных нам переменных и совершить ействия с произвольными файлами. Но это только без проверки загрузки файла и использования move_uploaded_file.

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]) {

if
([/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"file"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]"size"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]]>[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"]&&[/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"file"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]"size"[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]]













[/COLOR][/COLOR
Массив примет значение:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]Array

(

[[/COLOR][COLOR="#0000BB"]file[/COLOR][COLOR="#007700"]] => Array

(

[[/COLOR][COLOR="#0000BB"]tmp_name[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]file[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]txt

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]type[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]plain

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]tmp_name[/COLOR][COLOR="#007700"]] => /[/COLOR][COLOR="#0000BB"]tmp[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]phpOQsK9O

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]0

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]6

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]file2[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]txt

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]type[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]plain

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]tmp_name[/COLOR][COLOR="#007700"]] => /[/COLOR][COLOR="#0000BB"]tmp[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]phpHCcJwD

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]0

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]10

[/COLOR][COLOR="#007700"])

[[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]] => Array

(

[[[/COLOR][COLOR="#0000BB"]name[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]file3[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]txt

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]type[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]text[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]plain

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]tmp_name[/COLOR][COLOR="#007700"]] => /[/COLOR][COLOR="#0000BB"]tmp[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]phpWzwITr

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]error[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]0

[/COLOR][COLOR="#007700"][[[/COLOR][COLOR="#0000BB"]size[/COLOR][COLOR="#007700"]] =>[/COLOR][COLOR="#0000BB"]9

[/COLOR][COLOR="#007700"])

)

)

[/COLOR][/COLOR
Взглянем на первый файл:

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'name'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]'[name'[/COLOR][COLOR="#007700"]]=[/COLOR][COLOR="#DD0000"]'file.txt'[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'size'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]'[name'[/COLOR][COLOR="#007700"]]=[/COLOR][COLOR="#0000BB"]123[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'tmp_name'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]'[name'[/COLOR][COLOR="#007700"]]=[/COLOR][COLOR="#DD0000"]'index.php'[/COLOR][COLOR="#007700"];

[/COLOR][/COLOR
Таким образом мы меняем tmp_name на нужную нам информацию.

Для того, что бы исправить данную уязвимость PHP должен отсеивать файлы, заканчивающиеся на [ и т. д. Эту уязвимость следует ещё доработать для последующего использования. Это будет произведено за рамками этой части. Исходный текст: https://students.mimuw.edu.pl/~ai292615/php_multipleupload_overwrite.pdf

Данная уязвимость исправлена в PHP 5.3.7:



Возможность подстановки части файлового пути из-за некорректного очищения в функции rfc1867_post_handler имен файлов, передаваемых через multipart/form-data POST-запросы. Атакующий может изменить заданный логикой приложения абсолютный путь и создать или переписать произвольные файлы (CVE-2011-2202); ​

Ещё одна уязвимость того автора — HEAD. - https://students.mimuw.edu.pl/~ai292615/php_head_trick.pdf

Так как в этой части статьи мы рассматриваем не только авторские материалы, но и материалы других пользователей нам не помешает познакомиться(Для тех кто ещё не познакомился) с неравно-опубликованными паблик уязвимостей.

Перевод темы: https://rdot.org/forum/showthread.php?t=1330
 
Ответить с цитированием

  #4  
Старый 13.11.2011, 12:30
gibson
Постоянный
Регистрация: 24.02.2006
Сообщений: 447
Провел на форуме:
2872049

Репутация: 705
Отправить сообщение для gibson с помощью ICQ
По умолчанию

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"SELECT count(*) FROM `vote` WHERE opros = '"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$opros[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"' limit 1"[/COLOR][COLOR="#007700"];[/COLOR][/COLOR
а если так написать?
 
Ответить с цитированием

  #5  
Старый 13.11.2011, 12:43
k1b0rg
Тут может быть ваша реклама.
Регистрация: 30.07.2005
Сообщений: 1,243
Провел на форуме:
4520553

Репутация: 1316


По умолчанию

уж лучше так

PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"SELECT count(*) FROM `vote` WHERE opros = ? limit 1"[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]// mysqli

[/COLOR][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"SELECT count(*) FROM `vote` WHERE opros = :opros limit 1"[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]//pdo

[/COLOR][/COLOR
забудьте про mysql_query

p.s. файлы можно читать через курл

$ch = curl_init('file://example.txt');
 
Ответить с цитированием

  #6  
Старый 13.11.2011, 12:44
XAMEHA
Новичок
Регистрация: 15.05.2010
Сообщений: 0
Провел на форуме:
2268

Репутация: 0
По умолчанию

Цитата:
Сообщение от gibson  
gibson said:
PHP код:
PHP:
[
COLOR="#000000"][COLOR="#0000BB"]$sql[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"SELECT count(*) FROM `vote` WHERE opros = '"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$opros[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]"' limit 1"[/COLOR][COLOR="#007700"];[/COLOR][/COLOR
а если так написать?
Ну а если так - инъекции не будет.

Цитата:
Сообщение от k1b0rg  
k1b0rg said:
уж лучше так
В таких целях пишу коды с видом неопытности кодера, писавшего код - для уязвимых кодов это нормально. А если писать профессиональный код - там уязвимсть либо будет выделяться, либо её невозможно будет серьёзно организовать(В небольшом файле)

В cURL и libcURL найдена уязвимость связанная с особенностью обработки редиректов через заголовок "Location:" и позволяет при обращении к внешнему ресурсу перенаправить запрос на URL начинающийся с "file://" или "scp://", инициировав открытие заданного локального файла. Для успешного проведения атаки в конфигурации должен быть активен режим автоматического следования редиректам. Проблема устранена в релизе 7.19.4.​
 
Ответить с цитированием

  #7  
Старый 13.11.2011, 13:01
gibson
Постоянный
Регистрация: 24.02.2006
Сообщений: 447
Провел на форуме:
2872049

Репутация: 705
Отправить сообщение для gibson с помощью ICQ
По умолчанию

Цитата:
Сообщение от None  
Ну а если так - инъекции не будет.
я про тоже, старые байки на новый лад

а если еще учесть, что mysqli будет в новых версия по деволту и использовать mysql_query уже не получится
 
Ответить с цитированием

  #8  
Старый 13.11.2011, 14:51
Dr.Z3r0
Leaders of The World
Регистрация: 06.07.2007
Сообщений: 246
Провел на форуме:
2030482

Репутация: 1796
По умолчанию

Цитата:
Сообщение от None  
а если еще учесть, что mysqli будет в новых версия по деволту и использовать mysql_query уже не получится
Кстати да. Судя по обещаниям разработчиков PHP, начиная с версии 5.5 библиотека mysql становится deprecated, а с версии 6.0 данная библиотека будет отсутствовать, и останется только mysqli и PDO.

подробнее
__________________
Кто я?..
 
Ответить с цитированием

  #9  
Старый 18.05.2013, 07:32
XAMEHA
Новичок
Регистрация: 15.05.2010
Сообщений: 0
Провел на форуме:
2268

Репутация: 0
По умолчанию

Спущено, может надо будет кому-то обратиться.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ