「echo os.system('/bin/bash')」が動作するのはなぜですか?

「echo os.system('/bin/bash')」が動作するのはなぜですか?

私は一種のハッキングチャレンジをしていましたが、そのうちのいくつかは私が命令の少ない制限されたシェルに閉じ込められていることを発見しました。利用可能なコマンドの1つはですecho。何時間も苦労して最後にいくつかのヒントを追加することにしました。これはあなたが限られた殻から抜け出すことがわかりましたecho os.system('/bin/bash')...これを見た後にGoogleで検索することができましたが、あなたが見つけることができる以外にそれに関する情報は見つかりませんでした。何か限られたシェルの状況。 zshとbashで試してみると、端末では機能しません。なぜこれはまだ機能しますか?このos.system部分は私がPythonのように見えます。誰かが私に背景知識を教えてもらえますか?これがPythonなら、echoでどのように使用できますか?

ベストアンサー1

これが問題だと思います。シェル0.9.15、Pythonで実装された制限されたシェルです。

脆弱な機能は、check_path()コマンドラインからユーザーが特定のパスにアクセスできることを確認する機能です。

問題は、この関数がeval()コマンドラインから引用符を削除する方法として使用されることです。この関数は有効なPython式も幸せに実行します。

        行項目の場合:
            #潜在的な引用符を削除します
            努力する:
                プロジェクト=評価(プロジェクト)
            とは別に:
                渡す

この問題は、後で呼び出しを正規表現に置き換えることで、次のコミットでeval()解決されました。https://github.com/ghantoos/lshell/commit/4e05ac2e9c12142beed0e0fa16331ee0fd7dbd42#diff-edb4dda47bc5b086988a93df2615df6f

おすすめ記事