我一直在学习远程/任意命令执行。在这样做的过程中,我遇到了一些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)
也许这不可能?
由于
答案 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\"";