2018年5月5日土曜日

今更dockerをさわってみる_virtualbox上のcentos6上に導入


方針:virtualbox上のcentos6.9に導入する。
■1.導入
1.os最新化
yum update
2.dockerインストール
yum install epel-release
sudo tee /etc/yum.repos.d/docker.repo <<- font="">
[dockerrepo]

name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
yum install docker-engine
3.dockerサービス起動
service docker start
4.docker composeのインストール
sh -c "curl -L https://github.com/docker/compose/releases/download/1.5.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose"
chmod +x /usr/local/bin/docker-compose

参照
https://qiita.com/is_mgmt_dept/items/f4a7c64d72c2cba440c2

■2.基本操作
以下を参考にさわってみる。
https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html

操作の概要
---
•イメージの取得(pull)
•イメージの一覧表示(images)
•コンテナのライフサイクル管理 ◦作成(create)
◦起動(start)
◦停止(stop)
◦削除(rm)
•コンテナの一覧表示(ps)
---
###イメージ一覧###
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
新しいメールが /var/spool/mail/root にあります
###バージョン確認###
[root@localhost ~]# docker -v
Docker version 1.7.1, build 786b29d
[root@localhost ~]# docker-compose -v
docker-compose version 1.5.2, build 7240ff3
###動作中のコンテナ一覧###
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
###全コンテナ一覧(停止中含)###
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

■■3.hello-worldを実行
[root@localhost ~]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from hello-world
882673a3c694: Pull complete
83f0de727d85: Pull complete
Digest: sha256:4555e23a9cf5a1a216bd8b0d71b08a25e4144c2ecf6adb26df9620245ba99529
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/
新しいメールが /var/spool/mail/root にあります
###全コンテナ一覧(停止中含)###
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
dfc38761efe1        hello-world         "/hello"            3 minutes ago       Exited (0) 3 minutes ago                       pensive_einstein
新しいメールが /var/spool/mail/root にあります
###イメージ一覧###
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              83f0de727d85        3 weeks ago         1.848 kB

■■Alpine Linuxの操作
Alpine Linuxコンテナ向けに開発されている軽量Linuxディストリビューション

###イメージの取得###
[root@localhost ~]# docker pull alpine
latest: Pulling from alpine
28a0c8bbcab3: Pull complete
9797e5e798a0: Pull complete
Digest: sha256:ed8059bd90dd8cd6b7bfddedc7bba0f7555f766a00daf6a6efc86fa3339c09ef
Status: Downloaded newer image for alpine:latest
###イメージの確認###
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              83f0de727d85        3 weeks ago         1.848 kB
alpine              latest              9797e5e798a0        3 months ago        4.143 MB
[root@localhost ~]#
###alpineイメージからコンテナを起動し、echoコマンドを実行###
[root@localhost ~]# docker run alpine echo "hello from alpine"
hello from alpine
[root@localhost ~]#
###対話操作を可能にするコマンド "-it"を付与###
###プロンプトが"/ #"となり"ls"コマンドの入力が可能###
[root@localhost ~]# docker run -it alpine bin/sh
/ # ls
bin    etc    lib    mnt    root   sbin   sys    usr
dev    home   media  proc   run    srv    tmp    var
###別ウィンドウで動作中のコンテナ一覧###
###alpineがbin/shを実行###
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5dc3c0d3f46a        alpine              "bin/sh"            45 seconds ago      Up 44 seconds
### コンテナaplineを停止###
[root@localhost ~]# docker stop 5dc3c0d3f46a
5dc3c0d3f46a
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
###同タイミングで別ウィンドウ上のプロンプトは
/ #
から
[root@localhost ~]#
となる。
### コンテナaplineを開始###
[root@localhost ~]# docker start 5dc3c0d3f46a
5dc3c0d3f46a
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5dc3c0d3f46a        alpine              "bin/sh"            5 minutes ago       Up 8 seconds                            clever_brown
##コンテナ操作を再開するにはattachを使用###
[root@localhost ~]# docker attach 5dc3c0d3f46a
/ #
なお、Ctrl+Cを実行しても
/ #
から
[root@localhost ~]#
へ変更できなかった。
■削除
https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html
の通り、コンテナを削除
その後はコンテナの起動ができないことを確認
[root@localhost ~]# docker rm 5dc3c0d3f46a
5dc3c0d3f46a
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              83f0de727d85        3 weeks ago         1.848 kB
alpine              latest              9797e5e798a0        3 months ago        4.143 MB
[root@localhost ~]# docker start 5dc3c0d3f46a
Error response from daemon: no such id: 5dc3c0d3f46a
Error: failed to start containers: [5dc3c0d3f46a]
■■後片付け
##導入したイメージalpineとコンテナalpineを削除###
###コンテナの確認##
###alpineは消えたと思ったのになぜかある###
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                      PORTS               NAMES
24fe1e1924b0        alpine              "echo 'hello from al   11 minutes ago      Exited (0) 11 minutes ago                       high_torvalds
dfc38761efe1        hello-world         "/hello"               26 minutes ago      Exited (0) 26 minutes ago                       pensive_einstein
###イメージの確認###
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              83f0de727d85        3 weeks ago         1.848 kB
alpine              latest              9797e5e798a0        3 months ago        4.143 MB
###まずはイメージから削除###
###-fを付けない場合、削除できなかった###
###IDは IMAGE IDを指定###
[root@localhost ~]# docker rmi -f 9797e5e798a0
Untagged: alpine:latest
Deleted: 9797e5e798a034d53525968de25bd25c913e7bb17c6d068ebc778cb33e3ff6e5
Deleted: 28a0c8bbcab32237452c3dadfb8302a6fab4f6064be2d858add06a7be8c32924
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              83f0de727d85        3 weeks ago         1.848 kB
###続いてコンテナの削除###
##削除前:alpineあり###
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                      PORTS               NAMES
24fe1e1924b0        alpine              "echo 'hello from al   21 minutes ago      Exited (0) 21 minutes ago                       high_torvalds
dfc38761efe1        hello-world         "/hello"               36 minutes ago      Exited (0) 36 minutes ago                       pensive_einstein
##削除実行:rmの後は container id を指定###
[root@localhost ~]# docker rm 24fe1e1924b0
24fe1e1924b0
##削除後:alpineなし###
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
dfc38761efe1        hello-world         "/hello"            36 minutes ago      Exited (0) 36 minutes ago                       pensive_einstein
イメージとコンテナの削除方法参照
https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae



2018年5月4日金曜日

ksnctf square cipher解いてみた。

問題文の意味を調べると
four square-cipherなる暗号とのこと。
http://www.crypto-online.net/eng/four-square.html
を利用して、1行ずつ解読していけばFLAGがどこかに
現れると思ったが、うまくいかず。これで3時間くらいは要した。

他方針にいくのは、自力だと難しい。
これは、自力ではとけなかったので、writeupを参照した。
大文字と小文字と並んでいる数に着目するとのこと。

以下の方法でFLAGゲット。

1.pythonでいかのようなプログラムを作成
(最初はこんなプログラムは書かず、3をやろうとするとめちゃめちゃ大変だった)
大文字なら0、小文字なら1へ変換するプログラム。
LIST = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]
list = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
for i in "aBCDe":
    if i in list:
        print "1",
    elif i in LIST:
        print "0",

2.1の結果をテキストファイルにコピペ。
そして31行ずつで区切る。これは力業。

3.エクセルに張り付け。
あらかじめ、正方形用のシートを用意しておく。
1マスに1文字入るようにあからじめテキスト加工→貼り付け。
そして、1のみを黒く塗りつぶす。
http://office-qa.com/Excel/ex210.htm

4.該当画像を取得。
Irfanviewで余計な部分をカット。
QRコードを読み取るWebサイト
https://tool-taro.com/qr_code_decode/
にて、解読するとFLAGがでてくる。

2018年5月2日水曜日

ksnctf Johnを解いてみた。

Johnってなんだ??とか思いながら。チャレンジ。

user99
の部分は
http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt
とするとなぜか文字列がたくさん!!
なんだこれは??
FLAG
で検索するもノーヒット。
これが何の役にたつのか最初はさっぱりわからなかった。

問題文から/etc/passwdかと思った。調べると実際には/etc/shadowの内容と非常に酷似しているようだ。

解答を得る方法として、以下を思いつく。
/etc/shadow内の内容を復号する方法と同じ方法で問題文の情報を復号してみる。

復号方法を調べると、[John the ripper]なるソフトがあることが判明。

これはまさしく問題文のjohnと

手元にvirtualbox上にkali linuxがあるので、John the ripperがあるかみたら、あった!!

ラッキー

つづいて解いてみる。

John the ripperの使い方は
以下のページを参考
パスワードクラックツール JOHN THE RIPPER 使い方まとめ

解析手法としてwordlistなるオプションがある

なるほど、
wordlistに設定するファイル名を
http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt
にある情報を指定すればよいのか!!


ただし、最初は以下のエラーが発生。
#unshadow john14 > un_john14
#john --wordlist=***/dict14 un_john14
Using default input encoding: UTF-8
No password hashes loaded (see FAQ)



john14の内容は
問題文の内容をコピペ
vi john
で作成

dict14の内容は
http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.tx
vi dict14
で作成

何が悪いのか。
エラーについてググるもよくわからず。
上記リンクで指定されたファイル(/etc/passwd,/etc/shadow,/usr/share/dict/words)で同じことをやると正常実行できる。

そこでunshadowコマンドの実施をせずに、問題内容をviではりつけたファイルそのものを
unshadowせずに、実行するとみごと各ユーザーに対するPWを得られた。
#john --listword=***/14dict john14
~~~
~~~
floating         (user13)
HELD             (user10)
ADDITIONAL       (user02)
ultimate         (user08)
opinion          (user15)
karaoke          (user17)
zero             (user19)
QUESTION         (user16)
SPIRITS          (user06)
DELIGHT          (user20)
__________       (user04)
GENDER           (user03)
FREQUENT         (user00)
JENNY            (user09)
SUFFERS          (user11)
strange          (user18)
zecht            (user14)
independent      (user07)
applies          (user05)
LATTER           (user01)
LEAVE            (user12)
~~~
~~~

ただし、この後がよくわからなかった。

ただ、もう一度みるとFとかLとかAがある!!

そこでuser00から並べ替えると、F -> L ->A ->Gとなっている。
つまり、FLAGは、user00から昇順で並べ替えた時各PWの1文字目がFLAGとなっていると予想。

みごと正解した。

やっと自力で解けた!!

とってもうれしい。

2018年5月1日火曜日

ksnctf basic is secureを解く

まずは該当ファイルをwiresharkで開く。
httpで絞る
問題タイトルから
basic認証→IDとPWが該当フラグではないか?
(前にやったことがあったから推測)
と推測
GET /~q8/
の部分をみると
Authorization: Basicの行がある
これが実際の認証情報。
ただしこれはフラグではなかった。
Authorization: Basicの行をクリックすると
Credentialsの行が現れる。
ここにFLAGあり。
正解だった。
ちなみに、Authorization: Basicの値を
echo '~~~' | base64 -d
とするとFLAGをGETできる。
http://opooner.hatenablog.com/entry/2014/07/20/032702
----
ちなみに,WebでBasic認証をするときIDとPassをコロンでつなげたid:Passがbase64でエンコードされているらしい
----

ksnctf math Ⅱをトレース

解答では2分探索で解けるとのこと。
以下のところで、FLAGは得られた。
ksnctf #17 Math II

ただし、対数の計算では正確な数字を得られなかった。

Y^101=X(X=12341234と仮で置き換え)
となるYを求める。

logyY^101=logyX
101=logy12341234
logy12341234=log1012341234 / log10Y

と対数の公式から置き換えられる。

pythonが導入された環境で
log1012341234(1234は問題上のx=の数字)を解く。

>>import math
>>print(math.log(10,2748……))
3912.43902305

logy12341234=log1012341234 / log10Y=101
より
101*log10Y=log1012341234 =3912.43902305

log10Y=3912.43902305 / 101 = 38.7370200302
>>print 3912.43902305 / 101
で計算
Y=10^38.7370200302
10の約38乗が今回の答え。
ただしpythonで求めると
>>print(math.pow(10,38.7370200302))
5.45783032701e+38
となった。
この値では、不正解だった。
解答の値と比較すると考え方は問題ない。
ただし、上記の計算方法だとeという文字が表示されてしまいすべてを数字で表現できなかった。

2018年4月21日土曜日

ksnctf simple auth の解答をトレース 

Simple Auth
をトレースする。
自力で解きたいが、まだまだ力不足なのでしばらくは他の人のブログを参考にしています。

問題はこちら
http://ksnctf.sweetduet.info/problem/32

他の人のブログをみてみる
「\[strcasecmp()] simple authメモ - Namareba食べたい」
http://namareba.hatenablog.com/entry/2014/06/21/014412
?password[]=hoge
のように書き換えればよいと記載。
fiddlerなるツールで書き換えたらしい。
fiddlerは今ないので、一旦とばし。
https://github.com/jacobsoo/ksnctf-Challenges/tree/master/Simple-Auth
回答がかいてある。
----
import urllib
import urllib2
url = 'http://ctfq.sweetduet.info:10080/~q32/auth.php'
data = {
"password[]": "hello",
}
req = urllib2.Request(url, urllib.urlencode(data), headers={'Content-type': 'application/x-www-form-urlencoded', 'Accept' : 'text/plain'})
resp = urllib2.urlopen(req)
szPage = resp.read()
print szPage
----
このスクリプトを書いてauth.phpという名前で保存。
http://localhost/auth.php

コマンドで
php auth.php
を実行するもt、FLAGがでてこない。
どうやったら、上記のスクリプトがうまく動くかがわからない。
保留

http://orangetech.hateblo.jp/entry/2017/02/08/113447
「chromeデバッカで少し書き換えて、適当な文字列入れてsubmitするとFLAGが表示されます。」

chromeがないので、保留。

https://qiita.com/nana0723japan/items/56d668f170f6443b24c3
firebug
環境用意が必要そう。いったん保留。

http://imoimo.hatenadiary.com/entry/2017/02/17/161816
具体的な実行環境の情報なし


以下の方針のもと、調査を続行
http://ksnctf.sweetduet.info/q/32/auth.php
を一部書き換えて実行してみる。

疑問
どうやってphpを実行する?

centos6にphpをインストールして以下コマンドを実行してみた。
yum -y install php php-devel php-mbstring php-mysql php-mcry pt php-gd php-pear php-pecl-apc
chmod 755 auth.php
./php auth.php
auth.phpは問題文のsourceをコピペ

結果
ソースファイルが表示されるだけ。

一体全体何をすればいいのかなあ?
phpを実行する方法がなんかそもそも違っている気がする。

結局は、他ページを探すことで回答を得る。
curlコマンドで一発解決している事例あり。
http://blog.theo.com.tw/Writeups/ksnctf/ksnctf-32-Simple-Auth/


最終的には、以下のコマンドでフラグゲット
curl -X POST -F ' password="" ' http://ctfq.sweetduet.info:1
0080/~q32/auth.php
反省
phpは、もっと初歩的な知識を体系的に学ばないと他の人のサイト見ても使いこなせない。

2017年4月29日土曜日

ctf Simple Auth IIの解答をトレースしてみた writeup

SQLインジェクションの問題を解きたく、この問題にチャレンジ。
が結果的にはSQLインジェクションとはそもそも関係なさそう。

今回は、他サイトの解法をそのままトレースすることにした。

参考サイト

http://imoimo.hatenadiary.com/entry/2016/06/24/175733

http://timeislong.hatenablog.com/entry/2016/07/13/183000


https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10138372915
開放の考え方が参考になる。

FLAGゲットをするストーリーとしては
データベースの中身からFLAGを探す
じゃあデータベースをみるには?
ー>ダウンロードを試みる
ーー>どうやってダウンロードする??
ーーーー>しかし、webアドレスの一部を変えてダウンロードできるっていう考えがなかなかたどりつかない。
これはなれるしかないか?

1.
http://ksnctf.sweetduet.info/problem/35

内の2つのサイトを開く

2.


http://ctfq.sweetduet.info:10080/~q35/auth.php

http://ctfq.sweetduet.info:10080/~q35/database.db
として実行
ー>
database.dbがダウンロード

3.database.dbに対してsqlite3コマンドを実行
ー>その後selectコマンドでフラグをゲット

ctf4b@ctf4b-vm:~$ pwd
/home/ctf4b
tf4b@ctf4b-vm:~$ cd Downloads/
ctf4b@ctf4b-vm:~/Downloads$ ls
database.db
ctf4b@ctf4b-vm:~/Downloads$ ls -l
合計 4
-rw-rw-r-- 1 ctf4b ctf4b 2048  4月 29 21:01 database.db
ctf4b@ctf4b-vm:~/Downloads$
ctf4b@ctf4b-vm:~/Downloads$ sqlite3 database.db
SQLite version 3.11.0 2016-02-15 17:29:24
Enter ".help" for usage hints.
sqlite> select * from user;
root|FLAG_iySDmApNegJvwmxN
sqlite>


問題は一応とけた。だが疑問点あり

疑問

sourceの中からどうしてdatabase.dbにそもそも着目できる??
source部分には、database.dbは以下の1箇所。
推測:database.db前後の以下の式は、id,pwを入力すると直接実行されるSQL文ということか?
------

if ($_POST['id']!=='' or $_POST['password']!=='')
{
    $try = true;
    $db = new PDO('sqlite:database.db');
    $s = $db->prepare('SELECT * FROM user WHERE id=? AND password=?');
    $s->execute(array($_POST['id'], $_POST['password']));
    $ok = $s->fetch() !== false;
}
------

sqlite3とはそもそも何か?
SQLiteのデータベースを操作するためのコマンド

https://hydrocul.github.io/wiki/commands/sqlite.html

上記で実施した
sqlite3 database.db
とは
sqlite3 データベース名
でデータベースへ接続するコマンドを実行していることを意味する。

そこからselectでデータベースの中身を調べてFLAGを探す
今回はselect * from user;
でflagをget
これはselect * from user;自体はもはや決まり文句のようなコマンド?

もしくはsource内のSELECT * FROM userを参考にしたか??
PHPあたりを勉強するともっとわかるのだろうか??