欢迎访问Sunbet官网(www.sunbet.us),Allbet欧博官网(www.ALLbetgame.us)!

首页Sunbet_安全防护正文

GoAhead 内存信息走漏破绽剖析

b9e08c31ae1faa592019-12-1798安全技术漏洞分析

0x1 破绽形貌

GoAhead 是一个开源、简朴、轻盈、功能强大、能够在多个平台运转的嵌入式Web Server。许多厂商的产物使用过GoAhead,比方IBM、HP、Oracle、波音、D-link。

GoAhead 版本 4.X 到 5.0存在一个内存信息走漏破绽。

破绽信息一

破绽信息二

0x2 破绽复现

wget https://github.com/embedthis/goahead/archive/v5.0.0.zip
unzip v5.0.0
cd goahead-5.0.0
#编译GoAhead
make
#运转GoAhead Web服务器
sudo ./build/linux-x64-default/bin/goahead -v ./ 0.0.0.0:8888

接见goahead服务

GoAhead 内存信息走漏破绽剖析  安全技术 漏洞分析 第1张

破绽发作在文件http.c的websRedirect函数,websRedirect望文生义,处置惩罚跳转的要求。

在route.txt中设置一条能够跳转的路由,比方: 强迫跳转到login.html页面

通过 4 个简单的步骤获取 Azure 中的 DC 哈希

译文声明 本文是翻译文章,文章原作者fortynorthsecurity,文章来源:fortynorthsecurity.com 原文地址:https://fortynorthsecurity.com/blog/powershell-azure-and-password-hashes-in-4-steps/ 译文仅供参考,具体内容表达以及含义原文为准 0x00 前言 不久前,在这篇文章中了解到用于从 AWS 中运行的域控制器中窃取哈希的工具。于是手动测试了该过程,并且在无需与域控制器本身交互的情况下,成功的提取了密码哈希。一般有如下操作: 制作 AWS 中域控制器硬盘的快照; 将快照转换成 AWS 内的卷; 将该卷挂载到可控制的其他虚拟机上(本例使用 Debian ec2 实例进行测试); 使用 SecretsDump 之类的工具从安

route uri=/ auth=form handler=continue redirect=401@/login.html

此时接见根目录,当http头host字段太长时,致使内存信息走漏。

GoAhead 内存信息走漏破绽剖析  安全技术 漏洞分析 第2张

0x3 破绽剖析

在websRedirect函数,会将http head中的host信息拷贝到hostbuf中,后期会拼接http字符串返回给用户,显现页面的跳转信息。

1625 PUBLIC void websRedirect(Webs *wp, cchar *uri)
   1 {
   2     .....
   3     char    hostbuf[ME_GOAHEAD_LIMIT_STRING];
          .....
          .....
  13     if ((host = (wp->host ? wp->host : websHostUrl)) != 0) {
  14         scopy(hostbuf, sizeof(hostbuf), host);
                ....
                ...

ME_GOAHEAD_LIMIT_STRING的值为256,当host长度大于256时。scopy为防备发作溢出,不举行复制,返回-1。

scopy函数

14151 PUBLIC ssize scopy(char *dest, ssize destMax, cchar *src)
    1 {
    2     ssize      len;
    3
    4     assert(src);
    5     assert(dest);
    6     assert(0 < dest && destMax < MAXINT);
    7
    8     len = slen(src);
    9     if (destMax <= len) {
   10         return -1;
   11     }
   12     strcpy(dest, src);
   13     return len;
   14 }

scopy没有举行拷贝,hostbuf也没有初始化,此时hostbuf内存的信息为内存中的随机的信息,而且将这些信息返回给客户端,致使了内存信息走漏。这就是为何上面burp suite response会涌现乱码的缘由。

1625 PUBLIC void websRedirect(Webs *wp, cchar *uri)
   1 {
            .....
            .....
            .....

  22     if (smatch(uri, "http://") || smatch(uri, "https://")) {
  23         /* Protocol switch with existing Uri */
  24         scheme = sncmp(uri, "https", 5) == 0 ? "https" : "http";
  25         uri = location = makeUri(scheme, hostbuf, 0, wp->url);
  26     }
  27     secure = strstr(uri, "https://") != 0;
  28     fullyQualified = strstr(uri, "http://") || strstr(uri, "https://");
  29     if (!fullyQualified) {
  30         port = originalPort;
  31         if (wp->flags & WEBS_SECURE) {
  32             secure = 1;
  33         }
  34     }
  35     scheme = secure ? "https" : "http";
  36     if (port <= 0) {
  37         port = secure ? defaultSslPort : defaultHttpPort;
  38     }
  39     if (strstr(uri, "https:///")) {
  40         /* Short-hand for redirect to https */
  41         uri = location = makeUri(scheme, hostbuf, port, &uri[8]);
  42
  43     } else if (strstr(uri, "http:///")) {
  44         uri = location = makeUri(scheme, hostbuf, port, &uri[7]);
  45     } else if (!fullyQualified) {
  46         uri = location = makeUri(scheme, hostbuf, port, uri);
  47     }
  48     message = sfmt("<html><head></head><body>\r\n\
  49         This document has moved to a new <a href=\"%s\">location</a>.\r\n\
  50         Please update your documents to reflect the new location.\r\n\
  51         </body></html>\r\n", uri);
  52     len = slen(message);
  53     websSetStatus(wp, HTTP_CODE_MOVED_TEMPORARILY);
  54     websWriteHeaders(wp, len + 2, uri);
  55     websWriteEndHeaders(wp);
  56     websWriteBlock(wp, message, len);
  57     websWriteBlock(wp, "\r\n", 2);
  58     websDone(wp);
  59     wfree(message);
  60     wfree(location);
  61 }

0x4 总结一下

破绽发生的缘由是因为没有初始化内存,大概我见地比较少,觉得这类破绽比较不常见,挖到这个破绽的Dbappsecurity老哥是代码审计到的?


网友评论