2

リモート/任意のコマンド実行について学習しています。そうしているうちに、試して活用するのが楽しいと思われる Ruby に出くわしました。

「ls」コマンドを実行することができたので、ある程度成功しましたが、コマンドにスペース文字を追加する方法がわかりません。スペースを追加すると、URI が呼び出す parse メソッドが例外をスローします。

悪用しようとしていたコードは次のとおりです。

injection = "www.google.com';ls;#"

require 'uri'
URI.parse(injection)
puts `curl '#{injection}'`

したがって、それを受け入れることを選択した場合の課題は、注入文字列を変更するだけで「ls」の代わりに「ls -l」コマンドを実行することです。最初の行以外は変更できません。

私が試したこと:

ls%2f-l   - # Doesn't raise an exception but unix doesn't unescape CGI encodings.
ls\x20-l  - # Raises an exception because Ruby parses the UTF-8.

# Other various escape combinations (\\x20, etc)

多分それは不可能ですか?

ありがとう

4

2 に答える 2

5

内部フィールド区切り文字 ( <space><tab><newline>) を使用できます。これはとにかくシェルが分離するものであるため、セパレーターとして受け入れます。

injection = "www.google.com';ls$IFS-l;#"

(ところで、素敵な土曜日の夜のパズルをありがとう。)

于 2012-09-02T01:10:54.810 に答える
0

です - 可能です。文字列を引用符で囲むだけです。

1) コマンドプロンプトから:

two strings # 引用符なし: シェルは 2 つの文字列を認識します

"one string"# 一重引用符 (') または二重引用符 (") を使用すると、シェルは 1 つの文字列しか認識しません

2) 文字列リテラルから

mystring = "\"this will be interpreted as one string\"";

于 2012-09-02T00:31:34.230 に答える