Я анализ Metasploit использовать here и я пытаюсь выяснить, где же payload
в payload.encoded
приходят от по линии 358. Я новичок использовать разработки, но основные правила программирования сказать, что payload
должны быть инициализированы перед вызовом любой функции на нем , Я не вижу, что payload
инициализируется любым значением. На линии 56 есть Payload
, но его первый алфавит - это капитал, так что это что-то другое (Ruby чувствителен к регистру). Это означает, что payload
, вероятно, унаследован от некоторого класса. Но если его унаследовал от какого-то класса, зачем его кодировать? Почему бы не заполнить в нем новое значение? Особенно, я ищу, что такое значение, которое принимает payload
для кодирования. Было бы большой помощью, если бы кто-нибудь помог мне понять это. Благодаря тонну!Где «полезная нагрузка» в «полезной нагрузке» происходит из-за эксплойта metasploit?
ответ
Итак, это 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.rb
EncodedPayload
, и видим, что он называет generate
метод, который является то, что отличает метод encoded
. Высуньте еще немного в этом файле, и мы найдем способ encode
для его создания. Кодеры вытягивают из списков «совместимых кодеров», которые, очевидно, тянули от платформы (см https://github.com/rapid7/metasploit-framework/blob/f0fd2f05983083d84d635d8689237151663902e5/lib/msf/core/payload.rb#L413)
Короче говоря, полезная нагрузка идет от BadChars
выше, и он закодирован с датчиком, который зависит от платформы.
Прошу прощения за «непризнание» ответа, но я наткнулся на некоторые веб-страницы (здесь) (https://en.wikibooks.org/wiki/Metasploit/WritingWindowsExploit) и [здесь] (http: // redstack. net/blog/writing-exploits-for-metasploit-30.html)), которые говорят, что «BadChars» - это список символов, которые должна содержать полезная нагрузка * не *. Итак, я до сих пор не уверен, что содержит «полезная нагрузка». – TheRookierLearner
Хо-хо, хороший улов. Вытащить еще немного в encoded_payload.rb, я, очевидно, не слишком хорошо смотрел на него. Я предполагаю, что полезная нагрузка либо генерируется «на лету», либо застревает в файле прибора где-то –
Я не смотрел вокруг кода так подробно, как это делал А. Уилсон. Но когда я запускаю эксплойт в MetaSploit без использования какой-либо полезной нагрузки (доступную полезную нагрузку можно увидеть с помощью команды show payloads
), она показывает перед использованием, что выбранная полезная нагрузка - это reverse handler
(что, я думаю, является полезной нагрузкой по умолчанию). Глядя в папки metasploit, я показал, что код этого обработчика можно найти в /opt/metasplot/apps/pro/msf3/lib/msf/core/handler
Фактическая полезная нагрузка генерируется и кодируется более низким уровнем, т.е. например, ['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
Спасибо, но есть ли какое-то значение в этом коде, которое берется 'captload.encoded' для кодирования? – TheRookierLearner