Пример с is_numeric
Как то недавно объяснял одному хорошему амину смысл заключения уязвимости. Он не поверил, пока он не попросил залить шелл. В теме приведён упрощённый пример.
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 код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
$ FILES var_dump:
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 код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
$ FILES print_r:
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 код:
[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 код:
[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 код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
Мы получаем:
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 код:
[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 код:
[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 код:
[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