Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
metasploit [2025/11/14 22:16] admin [Ein Modul schreiben] |
metasploit [2025/11/14 22:42] (aktuell) admin [Sonstige] |
||
|---|---|---|---|
| Zeile 239: | Zeile 239: | ||
| { | { | ||
| ' | ' | ||
| - | ' | + | ' |
| + | ' | ||
| }, | }, | ||
| ' | ' | ||
| Zeile 342: | Zeile 343: | ||
| </ | </ | ||
| + | <code ruby> | ||
| + | require ' | ||
| + | class MetasploitModule < Msf:: | ||
| + | include Msf:: | ||
| + | |||
| + | def initialize(info = {}) | ||
| + | super(update_info(info, | ||
| + | ' | ||
| + | ' | ||
| + | Dieses Modul ruft eine beliebige URI von einem HTTP-Server ab. | ||
| + | Nützlich zum Lernen, Testen und Debuggen eigener Module. | ||
| + | }, | ||
| + | ' | ||
| + | ' | ||
| + | )) | ||
| + | |||
| + | register_options( | ||
| + | [ | ||
| + | Opt:: | ||
| + | Opt:: | ||
| + | OptString.new(' | ||
| + | ] | ||
| + | ) | ||
| + | end | ||
| + | |||
| + | def run | ||
| + | print_status(" | ||
| + | |||
| + | begin | ||
| + | res = send_request_cgi({ | ||
| + | ' | ||
| + | ' | ||
| + | }) | ||
| + | |||
| + | if res | ||
| + | print_good(" | ||
| + | print_good(" | ||
| + | |||
| + | print_line("" | ||
| + | print_line(" | ||
| + | print_line(res.body || "< | ||
| + | else | ||
| + | print_error(" | ||
| + | end | ||
| + | |||
| + | rescue :: | ||
| + | print_error(" | ||
| + | end | ||
| + | end | ||
| + | end | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code ruby> | ||
| + | # MySampleModule | ||
| + | |||
| + | class MetasploitModule < Msf:: | ||
| + | Rank = NormalRanking | ||
| + | |||
| + | include Msf:: | ||
| + | |||
| + | def initialize(info = {}) | ||
| + | super(update_info(info, | ||
| + | ' | ||
| + | ' | ||
| + | This file illustrates how to write a module. | ||
| + | }, | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | [ | ||
| + | [ ' | ||
| + | ], | ||
| + | ' | ||
| + | { | ||
| + | ' | ||
| + | ' | ||
| + | }, | ||
| + | ' | ||
| + | [ | ||
| + | [ | ||
| + | ' | ||
| + | { | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | ], | ||
| + | ], | ||
| + | ' | ||
| + | ' | ||
| + | { | ||
| + | ' | ||
| + | ' | ||
| + | }, | ||
| + | ' | ||
| + | )) | ||
| + | |||
| + | register_options( | ||
| + | [ | ||
| + | Opt:: | ||
| + | ] | ||
| + | ) | ||
| + | end | ||
| + | |||
| + | # Usually this includes code for checking | ||
| + | def check | ||
| + | CheckCode:: | ||
| + | end | ||
| + | |||
| + | def exploit | ||
| + | print_status(" | ||
| + | connect | ||
| + | |||
| + | uri = '/' | ||
| + | print_status(" | ||
| + | |||
| + | # 1) Request-Line | ||
| + | sock.put(" | ||
| + | sleep(1) | ||
| + | |||
| + | # 2) Host-Header | ||
| + | sock.put(" | ||
| + | sleep(1) | ||
| + | |||
| + | # 3) User-Agent | ||
| + | sock.put(" | ||
| + | sleep(1) | ||
| + | |||
| + | # 4) Connection-Header | ||
| + | sock.put(" | ||
| + | sleep(1) | ||
| + | |||
| + | # 5) Leere Zeile zum Abschließen des Headers | ||
| + | sock.put(" | ||
| + | |||
| + | print_status(" | ||
| + | |||
| + | # Antwort lesen (einmalig) | ||
| + | response = sock.get_once(-1, | ||
| + | |||
| + | if response | ||
| + | print_good(" | ||
| + | print_line(response) | ||
| + | else | ||
| + | print_warning(" | ||
| + | end | ||
| + | |||
| + | disconnect | ||
| + | end | ||
| + | end | ||
| + | </ | ||
| =====Links===== | =====Links===== | ||