Правило Snort для выполнения аутентифицированной команды ftp-сервера крыла

Привет, я пишу несколько пользовательских правил для университетского проекта, и мне интересно, может ли кто-нибудь проверить мое правило на предмет этой уязвимости; http://www.exploit-db.com/exploits/34517/

вот мое правило;

alert tcp any any -> any 5466 \ (msg: «Выполнение команды FTP»; содержимое: «/admin lua script html»; содержимое: «POST»; http_method; содержимое: «os execute»;)

Пересмотренное правило; alert tcp any any -> any 5466\ (msg: «Выполнение команды FTP»; содержимое: «/admin_lua_script.html»; содержимое: «POST»; http_method; содержимое: «выполнение ОС»;)


person BuffetOverFlow    schedule 16.02.2015    source источник
comment
Я не знаю, как ваше правило что-то обнаружит, есть ли опечатка в вашем первом и последнем совпадении контента? Я не изучал уязвимость, но похоже, что вы пытаетесь сопоставить запрос POST и uri. Первое совпадение содержимого, которое у вас есть, никогда не будет соответствовать uri (есть пробелы?), равно как и последнее совпадение содержимого (выполнение os). Судя по ссылке, uri будет выглядеть примерно так: /admin_lua_script.html. Это то, что вы пытаетесь сделать?   -  person johnjg12    schedule 18.02.2015
comment
Вот исправленное редактирование моего правила; alert tcp any any -> any 5466 (msg: выполнение команды FTP; поток: на_сервер, установлен; содержимое:\admin_lua_script.html; содержимое: os.execute; содержимое: сервер Wing_FTP; без регистра;), но когда я помещаю его в snort вроде не согласен с этим.   -  person BuffetOverFlow    schedule 19.02.2015
comment
это формат, с которым у меня проблемы, это что-то простое, например, отсутствие пробелов между каждым аргументом. Такие как; содержимое:\admin_lua_script.html;содержимое:os.execute; без зазора между ними?   -  person BuffetOverFlow    schedule 19.02.2015
comment
Ваше измененное правило использует обратную косую черту \ в первом совпадении содержимого. Это должна быть косая черта (/), потому что это то, что использует http, и это, вероятно, вызывает проблему. обратная косая черта предназначена для экранирования, поэтому вы пытаетесь экранировать недопустимое значение.   -  person johnjg12    schedule 19.02.2015
comment
Большое спасибо, это решило мою проблему :)   -  person BuffetOverFlow    schedule 19.02.2015
comment
Можете ли вы отредактировать свой исходный пост и добавить исправленное правило сейчас?   -  person johnjg12    schedule 19.02.2015
comment
извините, если это не должно быть размещено здесь, у меня есть правило для загрузки в snort сейчас, но, к сожалению, оно не обнаруживается при запуске эксплойта. Я играл с правилом, и это то, что я получил сейчас; alert tcp any any -> any 5466 (msg:Выполнение команды FTP; content:/admin_lua_script.html; content:command=os.execute; nocase; classtype:shellcode-detect; sid:1001; rev:1;)   -  person BuffetOverFlow    schedule 19.02.2015


Ответы (1)


Я бы порекомендовал что-то вроде следующего:

alert tcp any any -> any 5466 / 
(msg:"FTP command execution"; flow:to_server,established; /
content: "POST"; http_method; nocase; /
content:"/admin_lua_script.html"; fast_pattern; http_uri;/ 
content:"command=os.execute"; http_client_body; nocase; /
metadata: service http;) 

Объяснение:

порт назначения 5466:
По возможности всегда следует указывать порт. Когда у вас есть правила, которые являются «любыми/любыми» для источника/назначения, snort обрабатывает их иначе, чем правила с определенными портами.
Важно: Поскольку этот модуль эксплойта работает через порт 5466 и является http, вам НЕОБХОДИМО чтобы убедиться, что этот порт находится в конфигурации препроцессора http для портов. В частности, ваш snort.conf должен иметь строку конфигурации, похожую на следующую:

препроцессор http_inspect_server: профиль сервера по умолчанию все порты { 80 ... 5466 ...}

(очевидно, не ставьте точки, просто обозначая другие порты, которые вы должны там иметь). Если у вас нет этого порта в конфигурации вашего препроцессора для http, все ваши модификаторы контента http НЕ будут совпадать, потому что snort не будет обрабатывать трафик на этом порту как http, что, вероятно, является основной проблемой, с которой вы сталкиваетесь.

flow:to_server,installed;
Вам нужно проверять только установленные сеансы, в которых поток направляется на сервер. Это будет более эффективно, поскольку snort не будет проверять случайный трафик на наличие неустановленных сессий, и ему не придется проверять трафик, идущий к клиенту, поскольку вы знаете, что направление для этого эксплойта всегда будет идти на сервер. Единственный способ, которым запрос будет успешным, будет, если соединение уже установлено между клиентом и сервером, в противном случае эксплойт не будет успешным, и нет смысла предупреждать об этом.

содержимое: "ПОСТ"; http_метод; nocase;
Вы хотите использовать nocase для совпадения записей, потому что http не требует, чтобы в методе были все заглавные буквы.

содержимое:"/admin_lua_script.html"; fast_pattern; http_uri;
Добавление опции fast_pattern сделает правило более эффективным, так как оно поместит его в быстрое сопоставление с образцом в snort. Вы знаете, что этот контент является статическим и никогда не меняется (включая регистр), поэтому он подходит для быстрого сопоставления шаблонов. Поскольку это единственное совпадение содержимого в правиле, чувствительном к регистру, snort поместит его в быстрое сопоставление шаблонов самостоятельно, но если вы позже измените правило с другим соответствием содержимого, вы захотите, чтобы это было совпадением содержимого для использования. для сопоставителя fast_pattern.

содержание:"команда=os.execute"; http_client_body; nocase;
Это будет в теле клиента, поэтому добавьте параметр http_client_body.

метаданные: служба http;
Если вы используете на основе цели (которая уже несколько дней вы должны быть), вам нужно добавить ключевое слово службы http. Наличие этого в правиле не предотвратит срабатывание правила, если вы не используете таргетинг, поэтому рекомендуется добавить это, если вы знаете, к какому сервису относится этот трафик.

Дополнительное примечание:
SID вашего пользовательского правила должен быть 1000000 или выше, все, что меньше этого, зарезервировано для правил распределения snort. Подробнее об этом читайте здесь

person johnjg12    schedule 26.02.2015
comment
Спасибо, это правило именно то, что я искал, snort принимает правило, однако не предупреждает, когда по какой-то причине запускается эксплойт. - person BuffetOverFlow; 26.02.2015
comment
Я не устанавливал эксплойт, я могу это сделать, но сейчас нет времени. Если вам нужен более быстрый ответ, можете ли вы предоставить содержимое перехвата пакета? то есть выполнить эксплойт во время получения tcpdump, открыть захват в wireshark, следовать потоку tcp и вставить часть uri в комментарий для меня. - person johnjg12; 26.02.2015
comment
POST /admin_lua_script.html Хост HTTP/1.1: 192.168.202.179:5466 User-Agent: Mozilla/4.0 (совместимый; MSIE 6.0; Windows NT 5.1) Cookie: UIDADMIN=a351e7b3e3005e935b455db1096c926e Content-Type: application/x-www-form-urlencoded Длина содержимого: 1552 command=os.execute%28%27cmd%20/c%20echo% - person BuffetOverFlow; 26.02.2015
comment
Часть command=os.execute является частью полезной нагрузки, я думаю, поэтому я попытался удалить http_uri после os.execute, но он все еще не предупреждает - person BuffetOverFlow; 26.02.2015
comment
Можете ли вы загрузить pcap куда-нибудь, чтобы я мог его скачать? Кроме того, как вы на самом деле тестируете это на snort? Играть в pcap, пассивно контролируя интерфейс? - person johnjg12; 27.02.2015
comment
У меня есть snort, работающий на виртуальной машине kali linux, которая также является злоумышленником, и виртуальная машина Windows 7 в качестве жертвы, затем я запускаю wireshark на хост-машине. Что касается тестирования на snort, я проверяю журнал предупреждений после запуска эксплойта, чтобы увидеть, было ли оно предупреждено с данным сообщением в правиле предупреждений. Я знаю, что этот метод работает так, как если бы у меня было правило как alert tcp any any -> any any / (msg: выполнение команды FTP; / content:/admin_lua_script.html; /content:command=os.execute;) это предупреждение - person BuffetOverFlow; 27.02.2015
comment
Ах да, это файл cookie, поэтому вы можете использовать http_cookie или просто удалить все http_uri, что, похоже, вы и сделали. Это правило должно срабатывать при этом, поэтому может происходить что-то еще. Я попытаюсь посмотреть, смогу ли я загрузить этот модуль, когда у меня будет шанс. Мы докопаемся до сути! - person johnjg12; 27.02.2015
comment
Извините, я полностью пропустил, что это работает через нестандартный http-порт. Я понял это, пожалуйста, смотрите мой окончательный ответ выше, это должно решить ваши проблемы :) - person johnjg12; 28.02.2015