bandit Part3
どうも皆さん、こんにちは。お久しぶりです。今回は前回に引き続きbanditの攻略をやっていこうと思います。今回はLevel13からです。
Level13
問題文曰く、「今までパスワード使ってログインしてたけど、秘密鍵を使ってサーバーにログインしてみてね。そしたら/etc/bandit_pass/bandit14にあるパスワードがみられるよ」だそうです。ではやってみましょう。
まず、前回手にいれたパスワードでbandit13でログイン。ホームディレクトリにはsshkey.privateというファイルがあります。これが秘密鍵です。秘密鍵と公開鍵を用いたssh認証の仕組みについてはこちらのサイトを参考にさせていただきました。ありがとうございました。
https://www.adminweb.jp/web-service/ssh/index4.html
簡単に説明します。クライアント側で二つのカギを作ります。片方のカギで暗号化したものは、もう片方のカギでしか複合できません。片方を秘密鍵といってクライアントが保存、もう片方を公開鍵といい、接続先のサーバーにおいておきます。これらを使って認証を行うには以下の3ステップを行います。
- サーバーが適当な乱数を公開鍵で暗号化し、クライアントに送る。また、この時、データをハッシュして取っておく。
- クライアントは秘密鍵でデータを取り出し、それをハッシュしてサーバーに送り返す。
- クライアントから送られてきたハッシュ値と自分で作ったハッシュ値が一致していれば承認成功。
といった手順になります。
では実際に秘密鍵を使ってログインしてみましょう。
ssh -i sshkey.private bandit14@localhost
これでログインできます。あとは/etc/bandit_pass/bandit14をcatしてみればパスワードゲットです。
Level14
次へのパスワードはローカルホストの30000番ポートにbandit14のパスワードを入力してやると得られるそうです。ここで使えるコマンドはncコマンドです。これはNetCatの略でTCPやUDPのパケットを読み書きできるコマンドラインアプリケーションです。bandit14でログインした後、以下のコマンドを実行します。
nc localhost 30000
(bandit14のパスワードを入力)
これはローカルホストの30000番ポートと通信します、という意味のコマンドです。通信が開始したのち、パスワードを入力してやると、次のパスワードが現れるはずです。
Level15
今度はssl暗号化通信を使ってローカルホストの30001番ポートと通信しましょう。これにはopensslというコマンドを使います。ssl暗号化通信についてはこちらのサイトが非常に分かりやすかったです。ありがとうございました。簡単に言えば、さっきの公開鍵と秘密鍵を使って安全に通信を行う仕組みです。
openssl
s_client -host localhost -port 30001
(Level15のパスワード)
これでパスワードゲットです。
まとめ
ネットワーク難しいよ
おまけ
更新遅れます。次回は年末になると思います。
bandit Part2
どうも皆さん、お久しぶりです。cl0wnです。2週間ぶりとなってしまいましたが、banditの続き(Level9 -> Level16)をやっていこうと思います。
Level9
問題文を訳すと、「パスワードは
strings data.txt | grep ==
をしてみましょう。このコマンドは人間が読める部分を出力してくれます。あとは、
Level10
問題文曰く、これは
wikipedia
エンコードされているのならデコードしましょう。
base64 -d data.txt
base64コマンドは文字通りbase64を取り扱うコマンドです。dオプションをつけるとデコードしてくれます。これでパスワードゲット。
Level11
問題文曰く、data.txtの中身のアルファベットが13文字ずれているらしいです。いわゆるRot13というやつです。
Rot13
そこで、以下のコマンドを使います。
cat data.txt | tr [a-m,n-z] [n-z,a-m] | tr [A-M,N-Z] [N-Z,A-M]
trコマンドは入力から受け取った文字列を置き換えたり、消したりして出力するコマンドです。上のコマンドで、「a」は「n」に、「A」は「N」にというように、13文字ずれて置き換わります。これでパスワードゲット。
Level12
data.txtはバイナリを16進数表記でテキストで表現しています。これをバイナリに戻して、かかっている圧縮を順番に解凍してやればパスワードが得られます。解凍するのに新規ファイルを作成したい場合がありますが、ホームディレクトリでそれをする権限が与えられていないので手間です。/tmpディレクトリにディレクトリを作成しそこを使えとの指示があるので、それに従います。
$mkdir /tmp/cl0wn
$cp data.txt /tmp/cl0wn
$cd /tmp/cl0wn
以下が、回答を得るまでに私がやったことです。
$xxd -r data.txt > data
$file data
data: gzip compressed data, was "data2.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix
$mv data data.gz
$gzip -d data.gz
$file data
data: bzip2 compressed data, block size = 900k
$mv data data.bz
$bzip2 -d data.bz
$file data
data: gzip compressed data, was "data4.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix
$mv data data.gz
$gzip -d data.gz
$file data
data: POSIX tar archive (GNU)
$tar xvf data
data5.bin
$ls
data data5.bin data.txt
$file data5.bin
data5.bin: POSIX tar archive (GNU)
$tar xvf data6.bin
$file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
$bzip2 -d data6.bin
bzip2: Can't guess original name for data6.bin -- using data6.bin.out
$file data6.bin.out
data6.bin.out: POSIX tar archive (GNU)
$tar xvf data6.bin.out
data8.bin
$file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix
$mv data8.bin data8.gz
$gzip -d data8.gz
$file data8
data8: ASCII text
$less data8
bzip、gzipコマンドは、dオプションといっ所に使うことで、それぞれの方法で圧縮されたファイルを解凍します。tarとはファイルをまとめるコマンドです。アーカイブするコマンドとも言います。xオプションと一緒に使うことで、アーカイブからファイルを取り出すことができます。何回も解凍とアーカイブからファイルを取り出すことを繰り返し、data8というファイルが出てきます。この中にパスワードがあります。
まとめ
根気が大事
おまけ
ブログサーバーとドメインとったので移行を考えてます。
bandit Part1
どうも皆さんこんにちは。先週言ってたWebアプリ制作が土日でひと段落ついたcl0wnです。更新遅れて申し訳ありません。
今日は前回の予告通りbanditをやっていこうと思います。Level25くらいまでを目標に4、5回に分けてやっていこうと思います。
banditとは
banditとは、overthewireという組織が運営しているゲームの一種です。リンクをここに貼らせていただきます。
(http://overthewire.org/wargames/bandit/)
このゲームをやる中で基本的なシェルの使い方が学べます。SSHでサーバーにログインして次のレベルへのパスワードを探し、それを使って次のレベルでまたログインする、パスワードを探す...を繰り返していきます。
事前知識は、linuxコマンドをおおざっぱでもいいので覚えていること。僕の過去記事で紹介したものでたぶん、十分?だとおもいます。おいおい必要なものは解説していきます。SSHは遠隔地のサーバーを操作するプロトコルです。
<注意>
今日はLevel8を目標に進めます。自分の力だけで解きたい人は終わってから読み進めてください。
Level0
ターミナルで
ssh -p 2220 -l bandit0 bandit.labs.overthewire.org
でサーバーにログインします。パスワードはbandit0です。ここでLevel0 -> Level1へのパスワードを探します。とりあえずlsします。readmeファイルがありました。lessで中身を見てみましょう。それがパスワードです。どこかにコピーしておきましょう。パスワードを見つけたらexitでサーバーから出ます。
Level1
Level0のSSHのログイン方法で、bandit0をbandit1にし、パスワードは先ほど見つけたものを使います。サーバーにログインしたら、まずlsしてみます。何かあります。「-」というファイル名です。
Level0のようにless <ファイル名>としてはいけません。
less - とすると画面が真っ暗になるはずです。やってしまった人はCtrl + Zで戻りましょう。「-」はshでは一つ前にいたディレクトリのことを指します。だから、ここにある「-」というファイルの中身は見れません。解決策は
less ./-
です。「./」はカレントディレクトリを指します。これで中身が見られます。
Level2
ls。
spaces in this filenameというファイルがありました。スペースが入ってるファイルをそのままlessに渡すと、「spaces」、「in」、「this」、「filename」という4つのファイルの中身を見るという意味になります。スペースが入っているファイルを見る場合は
less "spaces in this filename"
としましょう。これでパスワードゲットです。
Level3
ls。
inhereというディレクトリがあるので、cd inhereで移動してみます。
ls。
何もない。
ls -a。
.hiddenというファイルがありました。less .hiddenでパスワードゲット。
Level4
inhereというディレクトリがあるので移動。
何個かファイルがあった。ファイルの種類を特定します。そのままファイル名を入力すると-fがコマンドのオプションと解釈されるので、
file ./*
*とはワイルドカードという文字の代わりになる文字です。「*」は任意の0文字以上の文字です。これに一致するファイルすべてに置き換わります。すなわち上記のコマンドはカレントディレクトリにあるすべてのファイルのファイルの種類を調べます。
-file07だけがASCII textです。
というわけで、
less ./-file07
で、パスワードゲット。
Level5
問題文によるとinhereディレクトリのどこかに、「人が読める」、「1033バイト」、「実行ファイルでない」ファイルがあり、その中にパスワードがあるらしいです。
inhereに移動。
「maybehere00」という名前のディレクトリがたくさんあります。この中から目的のファイルを手動で見つけるのはおっくうなので、
find . -readable -size 1033c
「.」が検索を始めるディレクトリです。
./maybehere07/.file2が出力されるので、中身を見てパスワードゲット。
Level6
問題文によると、サーバーのどこかにある「bandit7というユーザー所有」の、「bandit6というグループ所有」の「33バイトのファイル」です。
ファイルには、所有者と、所有グループが設定されています。これがあることで、だれがこのファイルを「みる」、「編集する」、「実行する」ことができるかを効率よく設定することができます。
find / -user bandit7 -group bandit6 -size 33c 2>/dev/null
これで、該当するファイルが見つかります。最後の2>/dev/nullというのは、/dev/nullという書き込まれたデータをすべて捨てるファイルにエラーを捨てています。
見つかったファイルをlessでパスワードゲット。
Level7
ls。
data.txtというファイルがあります。問題文によるとパスワードはmillionthという単語の隣にあるそうです。
grep millionth data.txt
これでmillionthという単語が含まれている行だけを出力しています。
パスワードが右側に表示されるはずです。
Level8
data.txtのなかで重複がない行がパスワードです。
sort data.txt | uniq -u
先にsortというコマンドにかけてからuniqに流し込みます。uniq -uは重複のない行だけ表示します。sortをしたのは、行の頭文字がアルファベット順になっていないと期待通りに動きません。これでパスワードゲットです。
まとめ
いろんなコマンドを使いました。
分からないのは調べましょう。
linuxコマンド(第3弾)とvi
どうも皆さんこんにちは。来週までにサービスを1個作らなくてはいけないのに、まだ何もやっていないcl0wnです。
今日もlinuxのコマンドのつづきと、vimについて書いていきます。
- head
- tail
- grep
- vi
head
ファイルの先頭だけ見たい時に使うコマンドです。デフォルトでファイルの先頭から10行だけ表示されます。下の例ではカレントディレクトリにある.bashrcというファイルの先頭10行だけ表示しています。
head .bashrc
tail
ファイルの終わりだけ見たい時に使うコマンドです。デフォルトでファイルの最後尾から10行だけ表示されます。下の例では/var/logディレクトリにあるfirewalldというファイルの終わり10行だけ表示しています。
tail /var/log/firewalld
grep
ファイルの中から指定した文字列を含む行だけ表示したいときに使うコマンドです。
grep <検索文字列> <ファイル名>
下の例では、/var/log/ディレクトリにあるfirewalldファイルからwarningという文字列を含む行だけを表示しています。iオプションは大文字小文字の区別をしないという意味です。
grep -i warning /var/log/firewalld
vi
viとは
テキストエディタです。プログラムを書くのに使ったり、設定ファイルをいじったりするのに使います。大抵のPCにはviを改良したvimというエディタが入っています。Emacsというviと双璧をなすエディタがありますが、筆者はvimmerなので布教の意味も込めて、vimの使い方を簡単に説明します。
vimの簡単な使い方
viには編集モードとコマンドモードがあります。コマンドモードでは、コマンドを使ってテキストを編集したり、文字列を探したりできます。編集モードではキーボードからファイルの編集ができます。文字で説明してもわかりづらいので実際に使ってみましょう。
以下のコマンドをターミナル(コマンドプロンプト)に入力してみましょう。
vim hello.txt
これで、hello.txtというファイルを編集できます。(hello.txtがなければ作成されます)
開いた状態ではコマンドモードです。ここでiキーを押してみましょう。すると編集モードに入ります。iキーは現在のカーソル位置から入力を始めます。適当な文字を入力してみましょう。すると、入力された文字が表示されるのがわかると思います。適当に20行ほど入力してください。終わったらEscキーをおしてコマンドモードに戻ってください。
コマンドモードでは、jkhlで上下左右にカーソルを移動できます。何度か練習してみてください。ggと押すとファイルの先頭行に、Shift + g でファイルの最後尾に移動できます。xで1文字削除、ddで1行削除できます。
編集モードの入り方には
- iキー:(現在のカーソル位置から編集)
- aキー:(現在のカーソル位置の一つ右から編集)
- oキー:(現在のカーソル位置の一つ下の行から編集)
- Shift + o:(現在のカーソル位置の一つ上の行から編集)
などがあります。この他にもいろいろ編集モードへの入り方はありますが。取り敢えずコレだけ覚えてれば日頃の編集では苦労しないでしょう
編集モードからはEscキーで抜けられます。今のモードがわからなくなったら、Escキーを押してコマンドモードに戻りましょう。
ファイルをセーブするには、コマンドモードで:w Enter、ファイルを閉じるには、:q Enter、セーブして閉じるには:wq Enterと入力してください。セーブせずに閉じるには:q! Enter と入力してください。
足早になりましたが、これがvimを使う上で最低限覚えなきゃいけない操作です。かといって、今ここで無理に覚える必要はありません。使っているうちに自然に覚えます。分からないことがあってもググれば大抵答えがあります。vimを使えることはコマンドを使えること同様、試験の最最低基準なので、なれましょう。
まとめ
次回予告
コマンドの列挙に飽きたので、次回からBanditというゲームの実況?解説?をやっていきます。
linux入門2
どうも皆さんこんにちは、ごちうさ3期、OVA決定に歓喜している難民系エンジニア(仮)のcl0wnです。更新が遅くなってしまい、大変申し訳ありませんでした。今回は前回に引き続き、シェルの基本的なコマンドを学んで行こうと思います。
- touch
- file
- cat
- less
- history
- mkdir
- rm
- find
- man
- パイプ
- リダイレクト
touch
touchコマンドはからのファイルを作成します。すでに存在する場合はタイムスタンプを現在時刻に更新します。
touch <ファイルのパス>
例えば、こうすることで現在いるディレクトリにaというファイルを作ります。
touch a
file
ファイルの種類を確認するのに使います。
file <ファイルのパス>
ファイルの種類によってtext(テキストファイル),executable(実行ファイル)など、実行結果の表示が変わります。下は、helloという実行ファイルをfileコマンドに渡した場合の出力結果です。
file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=288f38508a937a5ded66dcc5201e88d34e13a90b, not stripped
cat
ファイルの内容を表示したり、連結したりするときに使われるコマンドです。
cat <ファイルのパス>
catはcatenate(連結する)の略でしたが、今ではファイルの内容の表示に使われるのが一般的です。以下は、helloと書き込まれたファイルfile1の内容を表示させる例です。
cat file1
hello
less
ファイルの内容を閲覧するためのコマンドです。ファイルの内容を閲覧するという点では、catコマンドより高機能で、スクロール、ページングができたり、検索ができたりします。
less <ファイルのパス>
jkで上下にスクロールすることができ、Ctrl + Vで1ページ進む、Alt + Vで1ページ戻ることができます。ggでファイルの先頭に、Shift + G でファイルの最高日に移動することができます。qで終了します。
history
今迄シェルに打ち込んできたコマンドの履歴を表示させることができます。デフォルトで1000件表示されます。
history
1 LANG=C xdg-user-dirs-update
2 ls
3 LANG=C xdg-user-dirs-update
4 ls
5 exit
6 xinput --list
...
cp
ファイルやディレクトリのコピーをします。
cp <コピー元のパス> <コピー先のパス>
<コピー先のファイルのパス>にディレクトリが指定されていた場合、そのディレクトリにコピー元のファイル名と同名のファイルを作成します。
以下の例では、カレントディレクトリのaというファイルをbという名前でカレントディレクトリにコピーします。
cp a b
mv
ファイルやディレクトリの名前の変更や、移動に用いるコマンドです。
mv <変更元のパス> <変更先のパス>
以下の例では、カレントディレクトリにあるaというファイルを、bという名前で/usr/binディレクトリに移動します。
mv a /usr/bin/a
mkdir
ディレクトリを作成します。
mkdir <ディレクトリを作成するパス>
以下の例では、カレントディレクトリにdirというディレクトリを作成しています。
mkdir dir
rm
ファイルの削除に使うコマンドです。
rm <ファイルのパス>
rオプションを使うことでディレクトリの削除もすることができます。この場合、fオプション(エラーメッセージを表示しない)も一緒に使うのが一般的です。
mkdir -rf <ディレクトリのパス>
find
ファイルの検索に使います。以下の例では、/homeディレクトリにあるpuppies.jpgという名前のファイルを探します。
find /home -name puppies.jpg
ディレクトリの検索もできます。以下の例では、/homeディレクトリにある、MyFolderという名前のディレクトリを検索します。
find /home -type d -name MyFolder
man
今までのコマンドの紹介では紹介しきれていないコマンドの機能がたくさんあります。コマンドの詳細が知りたい時はmanコマンドを使いましょう。
man <コマンド名>
ページの移動方法はlessコマンドといっしょです。qキーを押すことで終了することができます。
パイプ
パイプ( | )は、コマンドの結果を次のコマンドの引数として渡します。例えば、grepコマンドという、引数にファイルをとり、条件に一致する文字列を含む行のみを出力するコマンドがあります。これをhistoryコマンドとつなげることで、過去に打ち込んだコマンドから条件に一致するコマンドを抜き出すことができます。
history | grep "ls"
上の例では、lsのみを表示しています。あのコマンド何だったかなって時に使うと便利です。
リダイレクト
コマンドに与える入力や、結果の出力を、キーボードや、ディスプレイ以外にすることができます。出力を保存したいなって時や、とってあるファイルをコマンドに使いたいなって時に使います。以下の例は、lsコマンドの結果をaというファイルに保存しています。
ls > a
aに結果を入れたので、ディスプレイには何も表示されません。
まとめ
- いろんなコマンドがある。
- 使い方がよくわからないコマンドはmanコマンドで使い方を調べる
- それでも分からない場合はググる
おまけ
このサイトは備忘録です。私の実際の学習のメモはここにあるので、よければどうぞ。拙いながら、全部英語で頑張って書いてます。が、見られることは意識して書いていないので、とても見づらいです(笑)。プルリクエストを送ってくださると嬉しいです。
次回は、今回に引き続き使いそうなコマンドの列挙と、vimの簡単な使い方についてやります。
linux入門
どうも皆さん、こんにちは。最近必死こいてバイトして、この資格のためにお金をためているcl0wnです。
今日からlinuxのシェルのコマンドについての記事を書いていきます。
私は、Ubuntu16.04を使っていきますが、シェルが使えれば何でもいいです。
そもそもシェルとは
シェルとは、ユーザーからのキーボード入力という形でコマンドを受け取り、それをオペレーティングシステムに渡して実行させるプログラムです。
Macユーザーであれば、Terminalというアプリケーションをご存知かもしれません。あれは、Bashというシェルの一種を使っているアプリケーションです。
linuxのファイルのツリー構造
linuxのファイルは、ディレクトリ(Windowsではフォルダという言い方が一般的)がツリー構造になっています。root(/)というディレクトリがあり、その中にいくつものディレクトリがあり、さらにそれぞれのディレクトリの中にいくつものディレクトリがあり...といったかんじになっています。
/
|--bin
| |--bash
| |--busybox
| |--bzcat
|
|--home
|
|--usr
ユーザーにはホームディレクトリという、システムを使うユーザーそれぞれのためのディレクトリが用意されており、ログインすると、自分のホームディレクトリに自分がいることになります。
pwd
ターミナルを開き、今自分がいるディレクトリを確認してみましょう。Ubuntuを使っているのであれば、Ctrl + Alt + Tで開くはず。そして、pwdと入力しEnterを押してください。
/home/(自分のユーザー名)
と表示されるはずです。
cd
他のディレクトリに移動したい場合はcdコマンドを使います。
cd (パス)
ディレクトリ、ファイルに移動するまでの道のりをパスといいます。パスには、/から表す絶対パスと、自分が今いる場所を基準にして表す相対パスがあります。絶対パスは、次のようなものです。
/home/cl0wn/aaa
これは、/ディレクトリの中のhomeディレクトリの中のcl0wnというディレクトリの中のaaaというファイル、もしくはディレクトリを意味しています。相対パスは、
aaa
という風に使います。これは今いるディレクトリの中のaaaというディレクトリ、もしくはファイルを意味します。
したがって、自分のホームディレクトリにあるaaaというディレクトリに移動するためには、
cd /home/(自分のユーザー名)/aaa
と書く方法と、
cd aaa
と書く方法があります。
ls
これはディレクトリにあるファイル、ディレクトリを表示するコマンドです。
ls (ディレクトリ名)
ディレクトリ名を省略した場合自分が今いるディレクトリになります。
ls -l
と打つことで、それぞれのファイルについての詳細な情報が表示されます。
ls -a
と入力すれば、隠しファイルまで表示されます。
ls -al
上二つを組み合わせることもできます。ちなみにlとかaとかをコマンドのオプションといいます。
まとめ
pwdで現在の場所を知り、cdで移動し、lsでディレクトリの中身を表示する
次回も、基礎的なコマンドについて書いていきます。
|
OSCPについてと今後の学習の概要
どうも皆さん、こんにちは。最近この資格のために必死こいて英語の勉強をしているcl0wnです。
今日はOSCPについて、前回の記事よりもう少し詳しく説明し、今後の学習内容の概要を書こうと思います。
OSCPとは
OSCPとは、前回も述べましたが、ぺネストレーションテストの資格の一つです。
日本でセキュリティの資格といえば、IPAの運営する情報セキュリティスペシャリストが有名ですが、どうやら世界的には業界で1番有名なのはこの資格らしいです。
この資格は超実践型の資格で、出題されたシステムに対し侵入をし、その手法をレポートにまとめることで得点を得ることができます。知識だけでどうにかなるものではありませんね。
OSCPを取得する(正確にはOSCPになる)には、PWK(Penetration Testing With Kali Linux)というコースを修了しなくてはいけません。このコースを取ることで、ぺネストレーションテストのためのドキュメント、ビデオを得ることができます。さらに、団体が提供するLabという、脆弱性を持つシステムを多数置いてあるネットワークへのアクセス権を手に入れることができます。資料から得た知識をもとにそれらのシステムに挑み、試験に向けて練習するというわけですね。
余談ですが、資料+30日のlabアクセス+受験料で$800、30日のlabアクセス追加購入で$250、15日のlabアクセス追加購入で$150かかるらしい。結構かかりますね( ; _ ; )
これからの学習
こちらサイトに則って、進めていきます。具体的には
- Linux and Bash
- Basic tools
- Passive Recon
- Active Recon
- Buffer Overflow
- Using public exploits
- File Transfer
- Privilege Escalation
- Client Side Attacks
- Web Application Attacks
- Password Attacks
- Port Redirection/Tunneling
- Metasploit Framework
- Antivirus Bypassing
の順で、学習していこうと思っています。
それに伴い、linux環境がおそらく必須になるので、virtualboxにUbuntu16.04(LTS)を入れて使っていこうと思います。
環境構築は、こちらのサイトを参照のこと
では、次回からLinux and Bashに入っていきます。
|