2014-02-16 2 views
2

Я анализ Metasploit использовать here и я пытаюсь выяснить, где же payload в payload.encoded приходят от по линии 358. Я новичок использовать разработки, но основные правила программирования сказать, что payload должны быть инициализированы перед вызовом любой функции на нем , Я не вижу, что payload инициализируется любым значением. На линии 56 есть Payload, но его первый алфавит - это капитал, так что это что-то другое (Ruby чувствителен к регистру). Это означает, что payload, вероятно, унаследован от некоторого класса. Но если его унаследовал от какого-то класса, зачем его кодировать? Почему бы не заполнить в нем новое значение? Особенно, я ищу, что такое значение, которое принимает payload для кодирования. Было бы большой помощью, если бы кто-нибудь помог мне понять это. Благодаря тонну!Где «полезная нагрузка» в «полезной нагрузке» происходит из-за эксплойта metasploit?

+0

Фактическая полезная нагрузка генерируется и кодируется более низким уровнем, т.е. например, ['Msf :: Exploit :: Remote'] (https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/exploit.rb) и [' Msf :: EncodedPayload'] (https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/encoded_payload.rb). С помощью 'loadload.encoded' вы просто получаете результат этого процесса. – Gumbo

+0

Спасибо, но есть ли какое-то значение в этом коде, которое берется 'captload.encoded' для кодирования? – TheRookierLearner

ответ

2

Итак, это Ruby, а класс эксплойтов происходит от Msf::Exploit::Remote, и это происходит от msf/core. Переместите бит через код в lib/msf/core.rb и убедитесь, что он требует от core/payload. Открыть файл:

https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/payload.rb

линия 179, функция payload определена, и вы можете видеть, что она тянет полезную нагрузку от return module_info['Payload'] ? module_info['Payload']['Payload'] : nil

Назад к оригиналу подвига, мы видим, что это инициализируется с module_info функция и это значение:

 'Payload'  => 
     { 
      'Space' => 4096, 
      # NOTE: \xff are avoided here so we can control the number of them being sent. 
      'BadChars' => "\x09\x0a\x0b\x0c\x0d\x20\xff", 
      'DisableNops' => 'True', 
     }, 

Некоторые более ковыряться дает нам это в lib/msf/base/simple/payload.rb:

payload._import_extra_options(opts) 
framework = payload.framework 

# Generate the payload 
e = EncodedPayload.create(payload, 

и мы находим в lib/msf/core/encoded_payload.rbEncodedPayload, и видим, что он называет generate метод, который является то, что отличает метод encoded. Высуньте еще немного в этом файле, и мы найдем способ encode для его создания. Кодеры вытягивают из списков «совместимых кодеров», которые, очевидно, тянули от платформы (см https://github.com/rapid7/metasploit-framework/blob/f0fd2f05983083d84d635d8689237151663902e5/lib/msf/core/payload.rb#L413)

Короче говоря, полезная нагрузка идет от BadChars выше, и он закодирован с датчиком, который зависит от платформы.

+0

Прошу прощения за «непризнание» ответа, но я наткнулся на некоторые веб-страницы (здесь) (https://en.wikibooks.org/wiki/Metasploit/WritingWindowsExploit) и [здесь] (http: // redstack. net/blog/writing-exploits-for-metasploit-30.html)), которые говорят, что «BadChars» - это список символов, которые должна содержать полезная нагрузка * не *. Итак, я до сих пор не уверен, что содержит «полезная нагрузка». – TheRookierLearner

+0

Хо-хо, хороший улов. Вытащить еще немного в encoded_payload.rb, я, очевидно, не слишком хорошо смотрел на него. Я предполагаю, что полезная нагрузка либо генерируется «на лету», либо застревает в файле прибора где-то –

0

Я не смотрел вокруг кода так подробно, как это делал А. Уилсон. Но когда я запускаю эксплойт в MetaSploit без использования какой-либо полезной нагрузки (доступную полезную нагрузку можно увидеть с помощью команды show payloads), она показывает перед использованием, что выбранная полезная нагрузка - это reverse handler (что, я думаю, является полезной нагрузкой по умолчанию). Глядя в папки metasploit, я показал, что код этого обработчика можно найти в /opt/metasplot/apps/pro/msf3/lib/msf/core/handler