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

时间:2012-09-02 00:26:17

标签: ruby unix uri exploit command-execution

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

我有点成功,因为我设法让它运行' ls'命令,但我无法解决如何在命令中添加空格字符的问题。如果我添加一个空格,URI调用的parse方法会抛出异常。

这是我试图利用的代码:

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

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

所以你的挑战,如果你选择接受它,就是运行一个&ls-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)

也许这不可能?

由于

2 个答案:

答案 0 :(得分:3)

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

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

(顺便说一下,感谢周六晚上的一个美好的谜题。)

答案 1 :(得分:0)

是 - 有可能。只需将您的字符串放在引号中:

1)从命令提示符:

two strings #No quote:shell看到两个字符串

"one string"#with single(')或double quotes(“)shell只能看到一个字符串

2)来自字符串文字

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