JavaScriptによる記号プログラミング

  • 110 views
Uploaded on

JSオジサン#4 にて。

JSオジサン#4 にて。

More in: Engineering
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
110
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. JavaScriptによる記号プログラミング @sters9 とあるイベントの思い出
  • 2. Who are you? 》 ごみばこ @sters9 》 いけいけうぇっぶえんじにゃあ (=^-ω-^=) × PHPでケーキを焼いたり × 最近イイ感じです♡
  • 3. Who are you? 》 「ごみばこいん」で検索!
  • 4. 名前のってなかったけど…?
  • 5. 名前のってなかったけど…?
  • 6. JavaScriptによる記号プログラミング とあるイベントの思い出
  • 7. とあるイベントにて
  • 8. とあるイベントにて 条件表示 HTMLソース HTMLレンダリング
  • 9. とあるイベントにて XSSで alert を実行するだけ! ただし入力した /[A-Za-z0-9]+/ が規制される Input要素がひとつある
  • 10. とあるイベントにて (;˘ω˘) 記号で書けばいいのでは…?
  • 11. 記号プログラミング
  • 12. 記号プログラミング
  • 13. 記号プログラミング "abc"[0] ES5からしか使えない!
  • 14. 記号プログラミング "abc"[0] ES5からしか使えない! charAtで参照しよう(闇)
  • 15. せっかくなので解説。 記号でプログラムを書く ↓
  • 16. せっかくなので解説。 記号でプログラムを書く ↓ 文字列からJSを実行する ↓
  • 17. せっかくなので解説。 記号でプログラムを書く ↓ 文字列からJSを実行する ↓ Eval相当が必要 ↓
  • 18. せっかくなので解説。 記号でプログラムを書く ↓ 文字列からJSを実行する ↓ Eval相当が必要 ↓ Function("alert()")() を実行する ↓
  • 19. せっかくなので解説。 Function("alert()")() を実行する ↓
  • 20. せっかくなので解説。 Function("alert()")() を実行する ↓ "alert()" を創る必要がある ↓
  • 21. せっかくなので解説。 Function("alert()")() を実行する ↓ "alert()" を創る必要がある ↓ 文字を創るために 数字を創る必要がある ↓
  • 22. せっかくなので解説。 Function("alert()")() を実行する ↓ "alert()" を創る必要がある ↓ 文字を創るために 数字を創る必要がある ↓ (闇)
  • 23. 記号プログラミング
  • 24. 1をつくる -(~[]) // 1をつくる [] 配列生成 ~ not演算子 => 1の補数ってやつ。 ビット反転。 ~[] ~0 と同義 = -1 ~"" などでも同様 つまり -(~[]) は 1
  • 25. 2をつくる -(~[]) << -(~[]) // 2をつくる 1 << 1 1 を 1 ビット左シフト つまり (0001) が (0010) となり 2
  • 26. 4、8、16、128をつくる シフト演算で生産
  • 27. "[object Object]" ({})+'' {} 空Objectを生成 + '' toStringメソッドの 暗黙的呼び出しが発生する Object型のtoString 未定義であれば "[object Object]"
  • 28. "true" をつくる (!![])+'' ![] !true と同義 !![] !!true と同義、 !!true は true true + "" toString変換 ➡ "true"
  • 29. "false" をつくる true をひっくり返すだけ。
  • 30. "undefined" をつくる []['']+'' 未定義オブジェクトを参照しにいく → undefined undefined + '' → toString変換により "undefined"
  • 31. "constructor" をつくる 生成した数値と文字列を利用して、charAtメ ソッドから取り出す
  • 32. Function をつくる [].constructor.constructor
  • 33. Function をつくる [].constructor.constructor Array.constructor => function Array(){} (function Array(){}).constructor => Function Function(){}
  • 34. alertをつくる 生成した数値と文字列を利用して、charAtメ ソッドから取り出す
  • 35. 発火
  • 36. ありがとうございました