Правила YARA, которые я буду использовать, направлены на поиск уязвимостей File Upload и SQL Injection. Вот код, который я буду использовать:
Сохраните как "php_possible_vuln_1.yar" и поместите в папку "yara-rules-src" внутри инструмента YARA Scanner.
Теперь запустим инструмент сканера YARA и посмотрим, что мы получим:
YARA Scan progress
Сканер YARA - HTML отчет
Как вы видите, есть несколько файлов, которые соответствуют нашим правилам YARA. Давайте откроем каждый файл, заглянем внутрь и проверим.
Начиная с "/Users/moda/WWW/apps-custom/PHP_Gallery/pages/change_password.php"
Здесь нет ничего общего с change_password.php; обратите внимание, что скрипт блокирует прямой доступ в строке 3. Это означает, что скрипт доступен только внутренне с помощью других PHP-скриптов.
Если посмотреть на другие файлы в отчете, они также защищены от прямого доступа, за исключением файла images.php
Из результатов сканирования YARA этот файл имеет совпадения с правилами:
Давайте покопаемся в файле images.php
Интересно; этот файл принимает параметр "id" в HTTP GET запросе и выполняет его непосредственно в базе данных. Тест? Давайте попробуем отправить модифицированный ввод непосредственно в файл images.php
SQL Injection подтверждена в файле images.php
Продолжаем, проверяя, есть ли уязвимость загрузки файлов, так как есть также совпадение с правилом PHP_GET_POST_FILE_UPLOAD
В строках 65, 72 и 99 обратите внимание, что мы можем загрузить файл, передав параметр "caption" вместе с данными файла в виде POST-запроса. В строке 72 скрипт применяет простую проверку MIME для файла, которую мы можем легко обойти, явно определив тип файла в полезной нагрузке POST-запроса.
В строке 98 скрипт переименовывает файл, добавляя значение параметра id, который приходит из URL ?id=X (см. фрагмент кода 1). Константа "GALLERY_PATH" - это имя каталога, в котором будут храниться файлы, и ее значение равно "photos". Таким образом, когда файл загружается, он будет сохранен по этому пути:
Давайте создадим код эксплуатации и посмотрим, что получится:
upload_test.py - с целью загрузки cmd.php
Как видите, я указал значение "1000" для параметра id и файл "cmd.php", который представляет собой простой скрипт для выполнения системных команд. После выполнения приведенного выше кода мы должны получить наш файл по адресу:
/PHP_Gallery/photos/1000_cmd.php
–>
Exploitation success – Unrestricted File Upload vulnerability
Hunting 0days with YARA Rules
Код:
rule PHP_GET_POST_SQL
{
meta:
author = "Moath Maharmeh"
date = "2021/Jul/7"
description = "Find PHP scripts contains $_GET $_POST - possible SQL Injection vulns"
filetype = "php"
strings:
$p1 = "<?"
$s1 = "$_GET["
$s2 = "$_POST["
$d1 = "mysql_query("
$d2 = "mysqli_query"
$d3 = "mssql_query"
$d4 = "sqlsrv_query"
condition:
$p1 at 0 and any of ($s*) and any of ($d*)
}
rule PHP_GET_POST_FILE_UPLOAD
{
meta:
author = "Moath Maharmeh"
date = "2021/Jul/7"
description = "Find PHP scripts contains $_GET $_POST - possible File Upload vulns"
filetype = "php"
strings:
$p1 = "<?"
$s1 = "$_POST["
$d1 = "move_uploaded_file"
$d2 = "file_put_contents"
$d3 = "fwrite("
$n1 = "php://input"
condition:
$p1 at 0 and ( ($s1 and any of ($d*)) or ($n1 and any of ($d*)) )
}
Сохраните как "php_possible_vuln_1.yar" и поместите в папку "yara-rules-src" внутри инструмента YARA Scanner.
Теперь запустим инструмент сканера YARA и посмотрим, что мы получим:
Код:
$ python yara_main.py -r --scan-dir "/Users/moda/WWW/apps-custom/PHP_Gallery" --gen-report
YARA Scan progress
Сканер YARA - HTML отчет
Как вы видите, есть несколько файлов, которые соответствуют нашим правилам YARA. Давайте откроем каждый файл, заглянем внутрь и проверим.
Начиная с "/Users/moda/WWW/apps-custom/PHP_Gallery/pages/change_password.php"
Здесь нет ничего общего с change_password.php; обратите внимание, что скрипт блокирует прямой доступ в строке 3. Это означает, что скрипт доступен только внутренне с помощью других PHP-скриптов.
Если посмотреть на другие файлы в отчете, они также защищены от прямого доступа, за исключением файла images.php
Код:
/Users/moda/WWW/apps-custom/PHP_Gallery/pages/images.php
Из результатов сканирования YARA этот файл имеет совпадения с правилами:
Код:
PHP_GET_POST_SQL, PHP_GET_POST_FILE_UPLOAD]
Давайте покопаемся в файле images.php
Интересно; этот файл принимает параметр "id" в HTTP GET запросе и выполняет его непосредственно в базе данных. Тест? Давайте попробуем отправить модифицированный ввод непосредственно в файл images.php
SQL Injection подтверждена в файле images.php
Продолжаем, проверяя, есть ли уязвимость загрузки файлов, так как есть также совпадение с правилом PHP_GET_POST_FILE_UPLOAD
В строках 65, 72 и 99 обратите внимание, что мы можем загрузить файл, передав параметр "caption" вместе с данными файла в виде POST-запроса. В строке 72 скрипт применяет простую проверку MIME для файла, которую мы можем легко обойти, явно определив тип файла в полезной нагрузке POST-запроса.
В строке 98 скрипт переименовывает файл, добавляя значение параметра id, который приходит из URL ?id=X (см. фрагмент кода 1). Константа "GALLERY_PATH" - это имя каталога, в котором будут храниться файлы, и ее значение равно "photos". Таким образом, когда файл загружается, он будет сохранен по этому пути:
Код:
/PHP_Gallery/photos/$ID_$FILE_NAME.ext
Давайте создадим код эксплуатации и посмотрим, что получится:
upload_test.py - с целью загрузки cmd.php
Как видите, я указал значение "1000" для параметра id и файл "cmd.php", который представляет собой простой скрипт для выполнения системных команд. После выполнения приведенного выше кода мы должны получить наш файл по адресу:
/PHP_Gallery/photos/1000_cmd.php
–>
Exploitation success – Unrestricted File Upload vulnerability
Hunting 0days with YARA Rules