ctfのお勉強

ksnctfを解いてみた

ksnctf

#35 simple auth 2

認証ページとソースコードが落ちている。
一見SQL injectionかなともおもい。

ソースコードを見るとdbにアクセスしているところが見られる。
dbファイル名入れると直接ダウンロード。

試しにsqliteで開いてみるとノーパスでそのままアクセスできた。
あとはテーブルの中身を探っていくとFLAGが。

#26 Sherlock Holmes

長い文章が。ソースぺージもありステガノを疑ってDiffを取ってみるも
違いはなさそう。

アクセス先URLを見ると、必ず index.plを返してtxtを表示させているようだ。

http://ctfq.sweetduet.info:10080/~q26/index.pl/a_scandal_in_bohemia_1.txt
http://ctfq.sweetduet.info:10080/~q26/index.pl/a_scandal_in_bohemia_2.txt
http://ctfq.sweetduet.info:10080/~q26/index.pl/a_scandal_in_bohemia_3.txt

ルートパスを開くと、
http://ctfq.sweetduet.info:10080/~q26/
ファイルが見えてくる。

flag.txtはあるが、index.plを見ろと。
index.plを見るとヒントが。

ヒントに従って、インジェクション(index.pl/%7Cecho%20h%40ck3d%5C%21%20%3E%20cracked.txt)して、ファイルを作って
FLAGが

ctfのお勉強

ksnctfを解いてみた

ksnctf

#14 John

問題を見た瞬間からJohn the Ripper かなと推測。
よくみるとここに辞書があるよと書いてあるので、辞書を持ってきて保存。

user99:$6$SHA512IsStrong$DictionaryIsHere.http//ksnctf.sweetduet.info/q/14/
dicti0nary_8Th64ikELWEsZFrf.txt:15491:0:99999:7:::

あとはjohnを実行するだけ。
f:id:skymay:20170219102526p:plain

結果を確認する。

#john --show shad

頭の文字がフラグになっているので、それをいれてやる。

ctfのお勉強

ksnctfを解いてみた

ksnctf

そろそろ難しくなってきた。。

#13 Proverb

SSH: ctfq.sweetduet.info:10022
ID: q13
Pass: 8zvWx00MakSCQuGq

sshでアクセスしてみる。ファイルが並んでいる。

-r-------- 2 q13a q13a 22 6月 1 05:21 2012 flag.txt
---s--x--x 1 q13a q13a 14439 6月 1 04:59 2012 proverb
-r--r--r-- 1 root root 755 6月 1 04:58 2012 proverb.txt
-r--r--r-- 1 root root 151 6月 1 04:48 2012 readme.txt

開けるファイルから見ていくとreadme.txtとproverb.txtは読めるみたい
proverbを実行するとproverb.txtを読み込んで表示される様子
readmeには/tmp配下でやれと記載が。

/tmp配下に移動してみるとlsコマンドは実行できないがproverbとかのファイルはある模様。
サブディレクトリを作ってやれとご指定があるので、サブディレクトリ作成して
homeからproverbをコピーしようとするができず。
/tmp配下にあるものをコピーしてみるとコピーできる。
flagもコピーしてflag.txtのファイルをproverb.txtに名前変更して実行すると。。

ctfのお勉強

ksnctfを解いてみた

ksnctf

#32 Simple Auth

ログインページとphpソースコードがある。
まずはソースコードを見てみると、postを取り出して値をそのまま比較している。

   if (strcasecmp($_POST['password'], $password) == 0)

"=="による緩やかな比較が0ということで
strcasecmpの返り値がFALSEか0か"0"かNULLか””あたりとなるとTRUEとなり突破できます。
仕様をグーグル先生に聞いてみることにします。


1. strcasecmpの仕様を調べる
strcasecmpの仕様を調べると、PHP5.3以降では引数エラー時にNULLを返す仕様に変更になっているようです。
(最新versionではどうなってるんでしょうか。。調べていません。。)

2. $_POSTの仕様を調べる
phpのPOSTの仕様を調べてみるとContributed Notesのところにヒントが。
PHP: $_POST - Manual


chromeデバッカで少し書き換えて、適当な文字列入れてsubmitするとFLAGが表示されます。

ctfのお勉強

ksnctfを解いてみた

ksnctf

Math2

数学問題。
2分探索で求める問題。

Step1. 10^n

def calc_digits(x)
  min = 1
  max = x.size
  p max
  while max - min > 2 do
    ave = (max + min) / 2
    if (10 ** ave) ** 101 > x
      max = ave
    else
      min = ave
    end
  end
  min
end

def calc_y(x, digits)
  min = 10 ** digits
  max = 10 ** (digits + 1)

  while max - min > 1 do
    ave = (min + max) / 2
    if ave ** 101 > x
      max = ave
    elsif ave ** 101 < x
      min = ave
    elsif ave ** 101 == x
      ave
    end
  end
end

digits  = calc_digits(x)
p digits
y = calc_y(x, digits)
p "FLAG_#{y}"

#28 Lo-Tech Cipher

zipを解くと画像が二枚。ステガノかと適当に試してみるもなにもみつからず。
二枚の画像を合わせてみると文字列がうっすらと見えて。
"the last ::: in the ZIP.."
zipも重ねてみると答えが。

ctfのお勉強

ksnctfを解いてみた

ksnctf

#20 G00913

πの10桁一致する初めのprime numberを見つける問題。
とりあえず、πを長めに取ってプログラムで1桁目から試してみる。

pi="31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421"

def is_prime n
  for d in 2..(n - 1)
    if (n % d) == 0
      return false
    end
  end
  true
end

for i in 1..pi.length-10
  num=pi[i..i+9]
  p "check:"+num
  if is_prime(num.to_i)
    p "found:"+num.to_s
    break
  end
end

しばらく放置してたら見つかりました。

#25 Reserved

何かのプログラム言語のような気がしますが、
さっぱりなのでとりあえず始めの方の文字列でググります。

length q chr uc and print chr ord uc qw q flock q and print chr oct ord q or no and print chr ord uc q each ne and print chr ord uc qw q gt q and print chr oct hex ord uc q my m and print chr ord uc q each ne and print chr ord qw q sin q and print chr oct ord uc q each le and print chr length q q splice srand getservbyname setnetent ne reset endprotoent foreach scalar rewinddir cos setnetent not else getprotobyname q and print chr ord qw q ge q and print chr ord uc q eval le and print chr ord uc qw q sin q and print chr ord uc qw q no q and print chr ord qw q use q and print chr ord q mkdir m and print chr ord q each le and print chr ord q pop and print chr oct ord q open no and print chr ord q eval le and print chr ord q eval le and print chr oct hex ord uc q gt log and print chr ord q q eq and print chr ord q q eq and print chr ord q q q and print chr ord qq q q and print chr ord uc q lt eval and print chr ord q chr lc and print chr ord q map m and print chr ord qw q ne q and print chr ord q mkdir m and print chr ord q q q and print chr ord q my alarm and print chr ord q pop and print chr ord qw q uc q and print chr oct oct ord uc qw q bind q and print chr ord q q eq and print chr ord q split s and print chr ord q open do and print chr ord q ge log and print chr ord qw q not q and print chr ord q oct no and print chr ord q xor x and print chr ord qw q die q and print chr ord q ne sin and print chr oct oct ord uc qw q fork q

どうやらperlらしいです。ppencodeというらしいです。
実行するとフラグが出てきます。

なんかググる力に依存しまくってるような。。


つづく?

ctfのお勉強

ksnctfを解いてみた

ksnctf

#3 Crawling Chaos

ソースコード見てみるとscriptでうにょうにょしている問題。
少しググってみると出てくる出てくる。
だた、まともに一個一個仕様と照らし合わせて、コードをたどっても大変そうなので、nodejsで実行してみました。

f:id:skymay:20170202163619p:plain

平文が出てくる。
あとはコードを読んでみるとi番目の文字にi+1掛けて比較していることがわかるので、戻してやると。

#5 Onion

暗号化されている模様。
base64か。繰り返しdecodeしてみる。

for i in 0..20
  p "i:"+i.to_s
  basic_enc=Base64.decode64(basic_enc)
  p basic_enc
  p "--------"
end

15回目でbegin 666 と出てくる。
uuencodeでデコート。