如果参数包含等号,CGI 脚本不会接收参数

发布于 2024-11-24 02:37:04 字数 1234 浏览 5 评论 0原文

我有一个 CGI 脚本(编译的 C 程序),它输出其命令行参数(argv[0]、argv[1] 等)。

如果我尝试 http://ajf.me/c/?abc 我会得到“abc”作为第二个参数。

但是,如果我尝试 http://ajf.me/c/?a=bc 我不获取任何第二个参数。

为什么使用 = 会阻止参数传递给程序?

如果重要的话,这里是 C 代码:

#include <stdio.h>

int main (int argc, char *argv[]) {
    int i;
    printf("Content-Type: text/html;charset=utf-8\n\n");
    printf("<!DOCTYPE html>\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>ajf.me powered by ANSI C!</title>\n");
    printf("</head>\n");
    printf("<body>\n");
    printf("<h2>Supplied Arguments</h2>\n");
    printf("argc: %d\n", argc);
    printf("<ol>\n");
    for (i = 0; i < argc; ++i) {
        printf("<li>%s</li>\n", argv[i]);
    }
    printf("</ol>\n");
    printf("<em>Yes, this is vulnerable to null-byte injection. For instance, <a href=\"?Injected%%00Null\" style=\"font-family: monospace; color: green;\">?Injected\\0Null</a>.</em>\n");
    printf("</body>\n");
    printf("</html>\n");
}

I have a CGI script (compiled C program) that outputs its command line arguments (argv[0], argv[1] etc.).

If I try http://ajf.me/c/?abc I get "abc" as the second parameter.

However, if I try http://ajf.me/c/?a=bc I do not get any second parameter.

Why does using = stop the parameters from being passed to the program?

If it matters here is the C code:

#include <stdio.h>

int main (int argc, char *argv[]) {
    int i;
    printf("Content-Type: text/html;charset=utf-8\n\n");
    printf("<!DOCTYPE html>\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>ajf.me powered by ANSI C!</title>\n");
    printf("</head>\n");
    printf("<body>\n");
    printf("<h2>Supplied Arguments</h2>\n");
    printf("argc: %d\n", argc);
    printf("<ol>\n");
    for (i = 0; i < argc; ++i) {
        printf("<li>%s</li>\n", argv[i]);
    }
    printf("</ol>\n");
    printf("<em>Yes, this is vulnerable to null-byte injection. For instance, <a href=\"?Injected%%00Null\" style=\"font-family: monospace; color: green;\">?Injected\\0Null</a>.</em>\n");
    printf("</body>\n");
    printf("</html>\n");
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半岛未凉 2024-12-01 02:37:05

在命令行上向 CGI 程序传递参数一定是 Web 服务器的异常情况。通常,? 之后的部分可在名为 QUERY_STRING 的环境变量中使用。

您可能值得查看 CGI 规范。

Passing parameters to a CGI program on its command line must be an anomaly of your web server. Normally the part after the ? is available in an environment variable called QUERY_STRING.

It would probably be worthwhile for you to review the CGI specification.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文