generated at
JavaScript
TODO

Loose Comparison
== < のような演算子は"あいまいな比較"、つまり暗黙の型変換を含む比較を行う。
TSG CTF 2023 - Upside-down cake
JSF**k
[]()!+ の6文字のみで任意のJavaScriptを実行するというもの
ここから試すことができる: http://www.jsfuck.com/
JSF**kで起こすXSSペイロードをコードゴルフする問題
この問題にはコード長の制限があり、CTFの開始時からだんだんコード長の制限が増えていき、誰かが問題を解いた時点でコード長はロックされそれ以上は増えなくなるという形式(LockDown)を取っているのが面白い。

String.prototype.replace
第2引数が操作できるとき、単純な置換にならない特殊な動作を起こせる

Regexp
直前に評価した入力など、Regexpオブジェクトには様々な状態が格納されている

Proxy
色々フックできて便利
sandbox escapeにも使えることがある


arguments, callee, caller
escape問などで
たいていstrict modeなので使えない方が多い

this.constructor.constructor("return process").mainModule.require("child_process").execSync("ls -al")
有名なSandbox Escapeの手法
どんな方法でもいいのでFunctionオブジェクトにアクセスできれば文字列から任意の関数を作れる
process.mainModule.requireの代わりにprocess.bindingも使える

スプレッド構文
{...obj} [..obj] でobjを辞書や配列として展開できる
{isAdmin: false, ...obj} のようなときに、objが {isAdmin: true} なら前方の isAdmin を上書きできる

行終端子
行の終端として認識される文字は \r \n の他に \u2028 \u2029 がある
// {user_input} のように文字列を入れられるが \r \n が使えないとき、 \u2028 などを使うことでコメントを終わらせて次の行を書ける
javascript: URLで改行が禁止されているときに \u2028 を入れると改行できることもある。FireFoxでできたが、現在も有効か要調査
TODO: リンク貼る

Bracket Notation (ブラケット記法)
a[b] みたいなやつ
JavaScriptのプロパティアクセスはドットでも添字でもアクセスできる
a["b"]["c"] a.b.c は等価
obj["constructor"] でObject.prototype.construtorを参照できる
SECCON CTF 2023 Quals - Bad JWT