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あたりを勉強するともっとわかるのだろうか??

2017年3月5日日曜日

kali linuxのインストールとWing IDEの準備

サイバーセキュリティプログラミング pythonで学ぶハッカーの思考
を購入

さっそく、第1章を読んで、kali linuxとWing IDEを導入
kali linuxはVirtualBoxに導入
参照ページはこちら

その後、python環境の確認と必要パッケージの導入実施
以下コマンドのみ紹介

###バージョン確認###
#python --version

###パッケージ管理ツールのインストール###
#apt-get install python-setuptools pytho-pip

###GitHubを使ったトロイの木馬をビルドするために使うモジュールのインストール###
#pip intall github3.py

###正しくインストールされたかの確認###
#python
>>>import github3
>>>exit()


続いてWing IDEの導入
結果からいうと本に記載のあるdebの導入は失敗
dpkg -i wingide5_5.1.5-1_amd64.deb
(本ではwingide5_5.1.5-1_i386.deb しかし検証環境は64bitのためamd64.debを使用)

https://wingware.com/pub/wingide/5.1.5/
より
wingide-5.1.5-1-x86_64-linux.tar.gz
をダウンロードして導入
導入手順はこちらを参照

起動は、GUIからはできなかった。
以下のコマンドでWingIDEを起動
#wing5.1

その後は
[Stack Data]タブ

[Debug Probe]タブ
の使い方の説明あり。
[Debug Probe]タブについては
エディタ画面に以下のコマンドを記載
converted_integer
1
converted_interger = 2
その後F5を押すとスクリプトの実行を再開できると本には説明がある。
F5をおしてみたが、実際成功しているのかどうかがよくわからない。

予定
サイバーセキュリティプログラミング pythonで学ぶハッカーの思考
の2章実施


2017年1月15日日曜日

esxi 5.5から6.5へアップデート時Initializing IOV発生_

以下の手順で、esxi 5.5から6.5へアップデート

環境
作業環境:windows10
esxiはHP ML110 G7にインストール

1.esxi6.5のisoイメージをダウンロード

2.isoイメージをDVDに書き込み

3.esxi環境にdvdをセット。

4.esxiを再起動。再起動後、F11をクリック⇒dvdで起動する

5.6.5のインストーラーを選択。

6.initializing IOVとなって、そのまま処理が止まった。

以下のページに対処方法の記載あり。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14155250564

VMインストーラー起動直後にShift Oを押す(画面下部に記載あり)

出てきたコマンドの後ろにそのまま(スペース)noIOMMUを入力してエンター

普通にインストール→完了したらDVDメディアを取り出して、再起動

また最初の起動画面でShift Oを押す(画面下部に記載あり)

出てきたコマンドの後ろにそのまま(スペース)noIOMMUを入力してエンター

普通にVMが起動するので、トラブルシューティングオプションからSSHを使用するよう設定する。またIPアドレスを振って外部からSSH接続できるようにしておく

外部のPCからSSH接続(チャレンジレスポンス)で接続し、そのあとに
vi /bootbank/boot.cfg
開いたらkerneloptの項目の後ろに(スペース)noIOMMUを入力し保存する。


------
bootstate=0
kernel=tboot.b00
title=Loading VMware ESXi
kernelopt=no-auto-partition noIOMMU
modules=b.b00 --- jumpstrt.gz --- useropts.gz --- features.gz --- k.b00 --- char
build=6.5.0-4564106
updated=2
------

再起動してみて