• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья используем YARA для поиска 0day

timeshout

RAID-массив
Пользователь
Регистрация
29.06.2022
Сообщения
62
Реакции
83
Правила YARA, которые я буду использовать, направлены на поиск уязвимостей File Upload и SQL Injection. Вот код, который я буду использовать:
Код:
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

1656946203607.png


YARA Scan progress

1656946227660.png


Сканер YARA - HTML отчет
Как вы видите, есть несколько файлов, которые соответствуют нашим правилам YARA. Давайте откроем каждый файл, заглянем внутрь и проверим.

Начиная с "/Users/moda/WWW/apps-custom/PHP_Gallery/pages/change_password.php"

1656946279955.png



Здесь нет ничего общего с 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

1656946368318.png



Интересно; этот файл принимает параметр "id" в HTTP GET запросе и выполняет его непосредственно в базе данных. Тест? Давайте попробуем отправить модифицированный ввод непосредственно в файл images.php

1656946407822.png


SQL Injection подтверждена в файле images.php

Продолжаем, проверяя, есть ли уязвимость загрузки файлов, так как есть также совпадение с правилом PHP_GET_POST_FILE_UPLOAD

1656946458017.png



В строках 65, 72 и 99 обратите внимание, что мы можем загрузить файл, передав параметр "caption" вместе с данными файла в виде POST-запроса. В строке 72 скрипт применяет простую проверку MIME для файла, которую мы можем легко обойти, явно определив тип файла в полезной нагрузке POST-запроса.

В строке 98 скрипт переименовывает файл, добавляя значение параметра id, который приходит из URL ?id=X (см. фрагмент кода 1). Константа "GALLERY_PATH" - это имя каталога, в котором будут храниться файлы, и ее значение равно "photos". Таким образом, когда файл загружается, он будет сохранен по этому пути:

Код:
/PHP_Gallery/photos/$ID_$FILE_NAME.ext

Давайте создадим код эксплуатации и посмотрим, что получится:

1656946549718.png


upload_test.py - с целью загрузки cmd.php
Как видите, я указал значение "1000" для параметра id и файл "cmd.php", который представляет собой простой скрипт для выполнения системных команд. После выполнения приведенного выше кода мы должны получить наш файл по адресу:

/PHP_Gallery/photos/1000_cmd.php
–>

1656946596853.png


Exploitation success – Unrestricted File Upload vulnerability




Hunting 0days with YARA Rules
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх