寰宇撷光

返回

Web 安全的知识向来繁多琐碎,此处仅按照自己的理解收录了一些技巧和CTF解题思路,可供日后参阅。

本博客内容仅供学习与防御研究使用,所有测试须在获得明确授权或在受控实验环境中进行,严禁将本文方法用于未授权入侵或违反当地法律的行为。

概述#

部分概念尚未学习,放在此处以供参考。

  • 信息收集(Recon):DNS、子域枚举、端口扫描、指纹识别(server、框架、CMS)、公开泄露(github, pastebin)、证书透明度(cert.sh)等。
  • HTTP 基础与 header 利用:Host, Origin, Referer, X-Forwarded-For(和 IP 绕过)、Cookie/Session 机制、CORS 原理与绕过思路、CSRF 概念与利用。
  • 常见 Web 漏洞(分类化):XSS(反射/存储/DOM)、CSRF、IDOR(水平/垂直访问控制)、Auth Logic Flaws(逻辑缺陷)、SSRF、XXE、文件包含(LFI/RFI)、文件上传、命令注入、SQLi、NoSQLi、HTTP Desync、模板注入(SSTI)等。
  • 检测/利用工具链:Burp Suite、ffuf/gobuster/dirsearch、sqlmap、nmap、curl、httpie、wfuzz、ffmpeg(解析文件)、jq(JSON)等。
  • 防护与加固要点:输入校验、参数化查询、最小权限、禁止直接在 webroot 执行用户上传文件、正确配置 CORS、HTTP Security headers(CSP、HSTS、X-Frame-Options)、session 安全等。
  • 常见绕过技巧(简短 cheat sheet):url 编码、双编码、大小写、注释(SQL)绕过、替换分隔符、使用 ../../%2e%2e/、使用 data: / file: / gopher: schema。

信息收集 / Recon#

  • 通过遍历网站的各层目录,寻找其中是否包含:可直接访问的应用程序代码和数据、后端系统的入口和凭据、敏感的操作系统文件。
  • 目录遍历常见思路:
    • 直接使用字典暴力搜索,逐个访问。
    • 可以从网站根目录下的 robots.txt 文件中获取到一些线索和相关路径信息。
    • 观察网页源代码中的 <script> 标签,可能会暗含一些功能的路径或入口。

常见Web漏洞#

目录遍历(Path Traversal)#

定义 有的网站应用未能实现对请求中目录遍历操作的禁止,从而允许攻击者通过构造路径(如 ../)访问服务器上 web 根目录之外的文件或目录,导致敏感文件(配置、备份、凭证等)泄露。

常见触发点

  • 接收文件名或路径参数的接口(?file=, ?path=, download=, load=, view= 等)例如:https://insecure-website.com/loadImage?filename=../../../etc/passwd
  • 不当拼接文件路径并直接读取/返回文件的后端代码

Tips

  • 许多服务器会对 .. 进行过滤或对 ../ 做规范化;因此需要用 URL 编码(%2e%2e%2f)等方式绕过过滤器。

认证与访问控制#

基础概念

  • 垂直权限提升:使用户访问原本不被允许访问的功能,例如非管理员用户访问管理员页面。
  • 水平权限提升:使用户能够访问属于其他用户的资源。

提权方式

  • 通过身份验证机制,伪装成其他用户:
    • 通过字典和脚本多次尝试登录,暴力获取用户登录凭证。但枚举账号时应先注意速率限制/锁定策略/等因素,盲目暴力登录会触发封禁。
    • 在登录页面进行枚举,可以通过返回内容(用户不存在 or 密码不正确)判断用户名是否有效。但现代应用常做“统一错误信息”来阻止枚举。
    • 还有基于时间、响应码、副信息(JSON结构/HTML差异)的枚举方式(即侧信道/时间差异)。

服务端请求伪造 (SSRF)#

  • SSRF 是一种由攻击者构造请求来利用的安全漏洞,可使服务器端应用程序向非预期位置发出请求。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。
  • 例如,某服务器在一般情况下,根据用户的请求向指定的某后端API请求数据。如果用户构造恶意请求,将API链接修改为管理页面,则会导致服务器请求管理页面的内容并返回给用户。

文件上传漏洞#

  • Web服务器可能允许用户将文件上传到其文件系统,而没有充分验证其名称,类型,内容或大小等内容。该功能便有可能会被利用于上传可执行文件、脚本到服务器上,进而进一步导致服务器沦陷。
  • 在文件上传漏洞中,最坏的情况是允许上传服务器端脚本(WebShell),例如PHP、Python、Java文件。WebShell是一种恶意脚本,攻击者只需向正确的路径发送HTTP请求,即可在远程Web服务器上执行任意命令。
  • 有时,Web服务器的文件类型检查机制非常弱,可以简单地通过修改请求的 Content-Type(如修改为 image/png)等方式绕过。
    • 因此后端不要仅依赖 Content-Type;应验证文件的“魔术字节”(magic bytes)和后缀、并将上传文件存放到不可执行目录。

操作系统命令注入#

  • 当 Web 应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如 PHP 中的 systemexecshell_exec 等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成命令执行攻击。
  • 在确定操作系统命令注入漏洞后,执行一些初始命令以获取有关系统的信息非常有用。下表是在Linux和Windows平台上有用的一些命令。
命令用途LinuxWindows
当前用户名whoamiwhoami
操作系统uname -aver
网络配置ifconfigipconfig /all
网络连接netstat -annetstat -an
运行的进程ps -eftasklist
  • 用户可以构造请求,通过改变 Web 应用在执行外部 shell 时传递的参数,执行任意命令。例如,可以通过这一命令进行测试:
    • ; echo testtesthello
    • ; 字符是shell命令分隔符,而 echo 命令使提供的字符串在输出中回显。这是测试某些类型的操作系统命令注入的有用方法。若存在该漏洞,则用户能够在返回的信息中看到回显的字段和报错信息。
    • 通常检测/注入常用的分隔符包括 ;&&|||`(反引号)或 $()

SQL 注入#

  • SQL注入(SQLi)是一个Web安全漏洞,允许攻击者干扰 Web 应用程序对其数据库的查询。这可能允许攻击者查看他们通常无法检索的数据,包括属于其他用户的数据,或应用程序可以访问的任何其他数据。在许多情况下,攻击者还可以修改或删除此数据,从而导致应用程序的内容或行为发生持久性更改。
  • 常见的手动检测可注入点的方法:
    • 发送单引号字符 ',并查找错误或其他异常。
    • 提交布尔条件(如 OR 1=1OR 1=2 ),并查找应用程序响应中的差异。
    • 提交可以在SQL查询执行时触发时间延迟的负载,并查找响应时间的差异。
【学习笔记】Web 安全学习笔记
https://astro-pure.js.org/blog/2025/web_security_note
Author Marshuni
Published at 2025年10月20日