Google CTF 2017 – Geokitties v2 writeup

Overview Problem page: https://geokittiesv2.web.ctfcompetition.com/ Copy of source code: https://gist.github.com/tyage/cac08c8e17b90b840fb22cb434cff127 It receives comment, then admin checks it and clicks a link. The comment is validated by using htmlparser2. Allowed tags are: p, a, b, img, br, i Invalid attributes: on(.*)= and href=javascript:... Solution What we should do is find the differences in parsing between Google Chrome and htmlparser2. After some time, I realize that when input is utf-16 string, Chrome parses it as utf-16 string but htmlparser2 does not. [Read More]

Google CTF 2017 – The X Sanitizer writeup

Overview Problem page: https://sanitizer.web.ctfcompetition.com Copy of source code: https://gist.github.com/tyage/6eabacf6001bd068287842b1052132e4 The application sanitize input and render it. Sanitizing method The method of sanitizing is follow: 1. Remove the words that match with /meta|srcdoc|utf-16be/i from input. 2. Register a ServiceWorker then, render input in iframe 3. In iframe, it load <script src=sanitize> which executes the following code: onload = _=> setTimeout(_=> parent.postMessage(document.body.innerHTML, location.origin), 1000); remove = node => (node == document) ? document. [Read More]

嘘つきPHP ZipArchive::addGlobと壊れたファイルパス

こんにちは. KMC5回生のtyageです. この記事は, KMCアドベントカレンダー 5日目の記事です. 昨日はnonyleneさんの Android Studio をビルドする でした. 唐突ですが, 今日はPHPの話をします. TL;DR PHPのZipArchiveライブラリには, globパターンでファイルを追加する addGlob メソッドがある. これにはいくつかoptionが指定できるのだが, 挙動がおかしい. 送った修正PRに反応をもらえたため, 12/1にリリースされた PHP 7.1 に含まれないかなと期待していたが, 特に進展はなかった. みんな困ってないんか…? ZipArchive::addGlob PHPでオシゴトをしていると, PHPでZipファイルを作りたい瞬間があるのではないかと思います. 私も, リクエスト内容が書かれたjsonファイルや画像をZipファイルでまとめてPOSTする超コズミックなAPIを叩く, 最高の機会がありました. (社会の歯車である一労働者は, 用意されたAPIに文句を言う前に黙々と作業をしなければいけない時があります.) また, 様々な都合でZip圧縮前のフォルダを残しておく必要があったため, こんなコードを書いたのです. $dir = '/tmp/workdir/';   // create jsons/api.json $jsonDir = $dir . 'jsons'; mkdir($jsonDir); file_put_contents($jsonDir. 'api.json', json_encode($request));   // create archive.zip $zip = new ZipArchive(); $zip->open($dir . 'archive.zip', ZipArchive::CREATE); $zip->addGlob($dir . '**/**', 0, ['remove_path' => $dir]); $zip->close(); ZipArchive::addGlobは, 第一引数にファイル検索パターンを, 第二引数にglobのフラグを, 第三引数にその他optionを指定します. [Read More]