随手记

一、RealWorld|应急引发的规模性红队反制案例

  1. 该样本对原始frp进行了修改,替换掉了原始的frp字符串增加免杀性。动态运行时发现并且在运行时会自动读取config.ini配置文件。其配置文件对server地址进行了加密。读取后会删除该文件,且在参数中可指定关闭是否删除,所以这里铁铁的无法从当前主机上得到frp的服务器地址了。
  2. 根据受控主机新增文件,在die中查看文件信息的时候发现咦,有调试信息。但是当前的调试信息pdb文件既然是在F:\C\免杀尝试64位\x64\Release\免杀尝试64位.pdb。
  3. 查看Project1.exe时发现该文件主要功能为dump lsass.exe 进程等敏感操作。当静态分析时发现攻击者这个大聪明竟然Debug模式编译。并且用户名还是自己的id。
  4. 当分析acs.exe时,发现其为Cobaltscrike的下载器,该下载器对应的地址竟然是IP,地址为82...**对应端口为9091。令人十分惊讶,现在攻防竟然还敢未做防护直接硬上。
    1. 通过fofa查看该攻击IP开放端口,发现应然有Supershell的登录界面。搜了下发现supershell是一个跨平台的开源C2平台。
    2. 参考网络文章,其中作者指出如果没有修改 share_password密码,会使用salt生成JWT令牌存储在share_token中,用户名为anonymous,且用户名不影响管理员鉴权。可直接将cookies中的share_token替换为token,即可绕过登录。
    3. 复制返回后的Cookie在chrome中F12开启开发者工具,在Console中输入如下内容刷新后成功登录到Supershell,其中的生成客户端也与新增文件中的tomcat.exe名称相符。

二、探秘HTTP解析器的黑暗面:如何利用不一致性制造网络安全漏洞

如果使用不同语言的函数解析 HTTP 消息trim(),则可能会发生 HTTP Desync 攻击。

  1. 使用 Node.js 绕过 Nginx ACL 规则

    /admin\x0a当Node.js 服务器收到URI 时,该字符\xa0将被删除,从而允许成功检索端点/admin。

  2. 使用 Flask 绕过 Nginx ACL 规则

    Flask 从 URL 路径中删除字符\x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B, 和\x09,但 NGINX 不会。

    可以通过\x85在路径名末尾添加字符来规避 ACL 保护。

  3. 使用 Spring Boot 绕过 Nginx ACL 规则

    Spring 会从 URL 路径中删除字符\x09和\x3B,但 Nginx 不会。

  4. 通过 PHP-FPM 集成绕过 Nginx ACL 规则

    当两个.php文件位于 HTTP 请求的同一路径名中时,PHP 将匹配第一个文件,忽略斜杠之后的所有内容。由于 Nginx 配置为阻止对特定端点的请求/admin.php,因此可以通过执行以下请求来访问 admin.php 文件:admin.php/inmdex.php

  5. 绕过AWS WAF ACL

    在上面的示例中,如果请求标头中包含 SQL 注入负载X-Query,则 AWS WAF 会识别 SQL 注入尝试并使用403 ForbiddenHTTP 状态代码进行响应。这可以防止请求转发到后端,从而有效阻止通过 SQL 注入攻击对应用程序数据库的任何潜在利用。

    1. 使用行折叠绕过 AWS WAF ACL

    2. 错误的路径解析导致服务端请求伪造 @evildomain.com/

    3. Spring Boot 上的 SSRF 通过不正确的路径名解释 ;1337/api/v1/me

      1. 考虑到 Spring 允许在 Matrix 参数分隔符后面添加任何字符,因此也可以使用该@字符来获取任意端点。
      2. 令人惊讶的是,PHP 允许在路径名中第一个斜杠之前使用星号字符,并且在星号和第一个斜杠之间,几乎所有 ASCII 字符都被接受为有效的 HTTP 请求。
      3. @0xa9fea9fe/ 获取 EC2 元数据的结果有效负载
    4. HTTP 异步缓存中毒攻击

      1. 当请求中包含多个主机标头时,仅采用第一个标头,任何其他标头都将被忽略。
      2. 如果标头名称中存在以下字节,则将被忽略:\x1f, \x1d, \x0c, \x1e, \x1c, \x0b;

      该漏洞是由于主机标头解释不一致而引起的。如果缓存服务器错误地将忽略的字节作为标头名称的一部分,将其视为无效的主机标头,而 S3 将其解释为有效的主机标头,则可以在易受攻击的网站上缓存任意存储桶响应。

      GET / HTTP/1.1
      [\\x1d]Host: evilbucket.com
      Host: example.bucket.com
      Connection: close
      
      首先,缓存服务器检查标头\\x1dHost: evilbucket.com并将其视为任何其他未加密的标头;
      
      随后,缓存服务器将正确地将example.bucket.com标头解释为有效的主机标头,从而导致最终的缓存响应与该主机值相关联。
      
      到达 S3 存储桶后,标头\\x1dHost: evilbucket.com将被错误地解释为有效的主机标头,而预期的Host: example.bucket.com标头将被忽略。AWS 的这种误解将导致获取恶意标头的关联存储桶。
      
      最终结果是任意内容的页面完全缓存中毒。
      

      Untitled

三、【翻译】一个关于Synack红队目标的有趣的RCE !(019)

  1. 我发现了一个端点,它允许我更改应用程序运行时使用的配置文件。无法上传我自己的文件,这些文件是预先设置的并且只能在用户界面中编辑。有两个文件看起来很有趣,一个是 .properties 文件,另一个是 .groovy 脚本。回想起我的 CTF 时代,我想起了 groovy 脚本能够执行命令。经过一番研究后,我发现了以下文章,它为我提供了一种通过 groovy 脚本执行命令的方法: https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md?source=post_page

四、攻防演练-实战中的外网突破