【问题标题】:How can I run a unix command without using a space character so that I can execute a remote command?如何在不使用空格字符的情况下运行 unix 命令,以便执行远程命令?
【发布时间】:2012-09-02 00:26:16
【问题描述】:

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

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

这是我试图利用的代码:

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

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

因此,如果您选择接受它,您的挑战是通过更改注入字符串来运行“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)

也许这不可能?

谢谢

【问题讨论】:

    标签: ruby unix uri exploit command-execution


    【解决方案1】:

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

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

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

    【讨论】:

    【解决方案2】:

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

    1) 从命令提示符:

    two strings # 无引号:shell 看到两个字符串

    "one string" # 单引号 (') 或双引号 (") shell 只能看到一个字符串

    2) 来自字符串文字

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

    【讨论】:

    • 我不太确定这就是我所追求的。如何使用它来更改注入字符串以运行 ls -l ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2019-02-04
    • 2020-09-22
    • 2015-04-06
    相关资源
    最近更新 更多