如何在不使用空格字符的情况下运行 unix 命令以便我可以执行远程命令?

Chr*_*ris 2 ruby unix exploit uri command-execution

我一直在学习远程/任意命令执行。在这样做的过程中,我遇到了一些我认为尝试和利用会很有趣的 Ruby。

我在设法让它运行 'ls' 命令时取得了一些成功,但我不知道如何将空格字符添加到我的命令中。如果我在其中添加一个空格,URI 调用的 parse 方法将引发异常。

这是我试图利用的代码:

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

require 'uri'
URI.parse(injection)
puts `curl '#{injection}'`
Run Code Online (Sandbox Code Playgroud)

因此,如果您选择接受它,您的挑战是通过更改注入字符串来运行“ls -l”命令而不是“ls” 。除了第一行,您不能更改任何内容。

我尝试过的事情:

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)
Run Code Online (Sandbox Code Playgroud)

也许这是不可能的?

谢谢

Rob*_*ier 5

您可以使用内部字段分隔符 ( <space><tab><newline>)。由于无论如何这是 shell 所分隔的,它将接受它作为分隔符。

injection = "www.google.com';ls$IFS-l;#"
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,感谢周六晚上的精彩拼图。)