предисловие
Веб-оболочка перед тем, как убить пользователя, оставила дыру в новом образе мышления, не нашла способа найти все конкретные переменные, затем найти печать, изучив метод всех количеств, и снова изучила веб-оболочку PHP в обход метода WAF, чтобы убедиться, что этот метод является разумным.
Если есть какая-либо ошибка, пожалуйста, укажите, спасибо! Черепаха: спасибо
В этой статье я внезапно подумал о способе тестирования webshell, который заключается в том , чтобы сначала получить все переменные в текущем файле (если вы не понимаете, пожалуйста, сначала проверьте предыдущую статью), а затем выполнить статическое обнаружение в соответствии с обычной библиотекой.
Хотя я думаю, что этот метод не будет обнаружен полностью (каждый механизм обнаружения не может гарантировать всю эффективность), я чувствую, что он очень прост, практичен и не так глубок.
Чтобы проверить этот механизм обнаружения, сначала взгляните на текущий способ, которым веб-оболочка PHP обходит WAF.
Обычная веб-оболочка PHP, которая обходит WAF
Искажение строки
Регистр, кодирование, перехват, замена, конкатенация специальных символов, нуль, возврат каретки, подача строки, специальные помехи в строках
Так как функция записи
Использование функции assert ()
Функция обратного вызова
call_user_func_array() array_filter() array_walk() array_map() registregister_shutdown_function() register_tick_function() filter_var() filter_var_array() uasort() uksort() array_reduce() array_walk() array_walk_recursive() forward_static_call_array()
класс
Магическими методами, разрушать(), строить()
a"); } } $b = new test; $b->a = $_POST['x']; ?>
Использование внешних файлов
Curl, fsockopen и т. Д. Делают сетевой запрос в сочетании с file_get_contents
Нет персонажа, персонажа лошади
Кодирование, xor, самоувеличение
Заголовок специального запроса
Использование getallheaders ()
Глобальная переменная
Getenv (), array_flip(), get_defined_vars(), идентификатор сеанса()
import requests url = 'http://localhost/?code=eval(hex2bin(session_id(session_start())));' payload = "phpinfo();".encode('hex') cookies = { 'PHPSESSID':payload } r = requests.get(url=url,cookies=cookies) print r.content
PHP путает шифрование и дешифрование
Phpmyadmin, например
Является ли имя функции, имя переменной “искаженным” и изменение в любом месте приведет к невозможности запуска файла. Конкретные могут посетить: https://www.phpjiami.com/
Способ обнаружения веб-оболочки PHP
Методы обнаружения веб-ячеек, которые я знаю до сих пор, включают:
- Машинное обучение определяет веб-оболочку: например, степень путаницы, самое длинное слово, индекс совпадения, функцию, степень сжатия и т. Д
- Динамическое тестирование (песочница)
- Обнаружение веб-оболочки: агент на основе режима трафика
- Обратный алгоритм + веб-оболочка обнаружения статического соответствия: например, проверка веб-оболочки D shield
- Проверьте ввод и выход файла
Примеры показывают
Возьмем в качестве примера веб-сайт PHPjiami, где 2.php является ли троянским конем phpjiama
Вы можете увидеть очевидные правила веб-оболочки, которые можно легко обнаружить с помощью статических правил, обычных правил и так далее.
Простая идея обнаружения
Идея тестирования:
Загрузка файлов -> файл содержит -> возвращает все переменные файла во временный файл -> статическое правило соответствует временному файлу -> возвращает результат сопоставления
├── __init__.py ├── конф │ ├── __init__.py │ ├── config.py ├── сердечника │ ├── __init__.py │ ├── all_check.py │ ├── data_mysql.py │ └── file_inotify.py ├── Либ │ ├── __init__.py │ └── semantic_analysis_api.py ├── тест │ ├── __init__.py │ ├── file_md5_move.py │ ├── os_check.py │ ├── random_file_test.py │ └── … ├── веб │ ├ ─ ─ статический │ │ ├ ─ ─ css │ │ │ ├ ─ ─ main. css │ │ ├ ─ ─ изображения │ │ │ └ ─ ─ background.jpg │ │ └ ─ ─ js │ │ └ ─ ─ upload.js │ ├ ─ ─ шаблоны │ │ ├ ─ ─ │index.html ├── upload_file.php │ └ ─ ─ include_file_to_tmp.php ├── webshell_check.py
Conf содержит статические правила обнаружения, такие как следующие
заключение
На этом эта статья заканчивается. Я надеюсь, что содержание этой статьи может иметь какое-то справочное значение для вашей учебы или работы. Спасибо вам за вашу поддержку в развитии peer.