利用流量检测技术防范任意文件读取漏洞

Oyst3r 于 2025-02-10 发布

前言

工作需要,记录📝学习,先从 Arbitrary File Read Vulnerabilities 分析吧。

准备工作

  1. Suricata 7.0.8
  2. 熟悉 pcre、任意文件读取漏洞的原理

带入攻击者视角,目前有一个任意文件读取漏洞的利用点,他会去读哪些东西(直白点就是攻击者字典中的内容)?

  1. 利用绝对路径 or 相对路径,如.././,以及它的编码形式,如%2e%2e%2f%252e%252e%252f(绕过防护)去读取网站源码文件,目的是去读到关键性的信息(数据库配置文件、密钥、甚至Passwd)。
  2. 读取服务器配置文件,如/etc/passwd/etc/hosts/root/.bash_history等等这样的,若后端开发语言为Java会去读,若为PHP毫无疑问会去读php.ini等等。
  3. 若后端语言为PHP,必然会测的就是伪协议,例如file://php://zip://http://等等,后端语言为Java的话会去测测jar等等。
  4. 还有一些在字典中高频出现的后缀.jar.tar.gz.zip等等。
  5. 很火的云安全,云与容器相关,例如AWS元数据、容器环境信息。

好多好多Payload,这里把它泛化为四大类–>路径穿越及绕过技巧、读取特定的敏感文件(OS特定的、开发框架特定的、云与容器相关的等等)、伪协议与特殊协议、文件名后缀。

设计好一个yaml规则配置文件如下

patterns:
  paths:
    - (?:(?:%2e|%252e|\.\.|\.){1,}(?:%2f|%252f|\/|\\){1,}){1,2}
    - (?:\\x[0-9a-f]{2}){1,2}

  files:
    os:
      - \/etc\/passwd
      - \\boot\.ini
      - \/\.ssh\/id_rsa
      - \/\.bash_history
      - \/etc\/hosts
    framework:
      - \/etc\/php\/php\.ini
      - web\.xml
      - \/etc\/nginx\/nginx\.conf

  protocols:
    - (?:file:\/\/|php:\/\/|zip:\/\/|http:\/\/)

  extensions:
    - [^&]*\.(?:tar\.gz|jar|db|bak)