-
-
[原创]dwva靶场-- csrf
-
发表于: 4天前 476
-
csrf攻击的核心是:攻击者诱导已登录用户在不知情的情况下,向目标网站发送一个恶意请求,利用用户当前cookie执行非预期的操作(如修改密码、转账等)。当目标网站仅依赖 cookie验证身份,而未对请求的来源或内容做额外校验时,即存在csrf漏洞。
无额外验证
修改密码后发现通过get传参
ba0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8X3y4K6M7X3k6Q4x3V1k6Q4x3@1k6H3j5i4y4K6N6$3!0J5k6q4)9#2k6X3&6W2N6#2)9K6c8o6p5I4x3e0p5I4x3g2)9J5y4X3q4E0M7q4)9K6b7Y4m8S2M7%4y4%4L8%4u0V1i4K6g2X3j5$3!0F1k6W2)9K6c8o6p5I4x3e0p5I4x3g2)9J5y4X3q4E0M7q4)9K6b7V1y4Z5j5h3&6Y4k6g2)9K6c8p5y4Z5j5h3&6Y4k6g2)9J5x3H3`.`.
打开同一浏览器下的新标签页,访问
de7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8X3y4K6M7X3k6Q4x3V1k6Q4x3@1k6H3j5i4y4K6N6$3!0J5k6q4)9#2k6X3&6W2N6#2)9K6c8o6t1J5x3U0t1J5x3W2)9J5y4X3q4E0M7q4)9K6b7Y4m8S2M7%4y4%4L8%4u0V1i4K6g2X3j5$3!0F1k6W2)9K6c8o6t1J5x3U0t1J5x3W2)9J5y4X3q4E0M7q4)9K6b7V1y4Z5j5h3&6Y4k6g2)9K6c8p5y4Z5j5h3&6Y4k6g2)9J5x3H3`.`.
密码已经被修改为222222
如果有referer做校验,如
要求请求的 Referer 头必须包含服务器主机名,也就是包含127.0.0.1就行了,其他的协议类型啊,端口,路径一概不管
但一般情况下我们很难对referer头进行修改,常见做法为将恶意html文件上传到dvwa服务器(如通过文件上传漏洞),然后让受害者访问该页面。
生成恶意文件1.html
<a href="27aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8X3y4K6M7X3k6Q4x3V1k6Q4x3@1k6H3j5i4y4K6N6$3!0J5k6q4)9#2k6X3&6W2N6#2)9K6c8o6p5J5x3K6b7#2y4W2)9J5y4X3q4E0M7q4)9K6b7Y4m8S2M7%4y4%4L8%4u0V1i4K6g2X3j5$3!0F1k6R3`.`. =123456&Change=Change#">click</a>
将1.html放到/var/www/html/vulnerabilities/csrf下
打开同一浏览器下的新标签页,访问
11fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8X3y4K6M7X3k6Q4x3V1j5`.1.html
点击后密码成功被修改为123456
如果加了token验证,如
如果存在xss漏洞,攻击者可以利用xss读取页面中的 token,然后构造请求(但 xss本身已是更严重的漏洞)
假设我们利用其他漏洞拿到了token,构造恶意文件2.html(在1.html加上token值)
<a href="caaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8X3y4K6M7X3k6Q4x3V1k6Q4x3@1k6H3j5i4y4K6N6$3!0J5k6q4)9#2k6X3&6W2N6#2)9K6c8s2m8S2M7%4y4Q4x3U0k6S2L8i4m8Q4x3@1u0H3j5i4y4K6N6$3!0J5k6q4)9#2k6X3y4G2L8X3k6Q4x3@1b7`.
pass&Change=Change&user_token=b37dc5f9ee0365122d3b06b0cadc5bbd">click</a>
打开同一浏览器下的新标签页,访问
5a7K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8X3y4K6M7X3k6Q4x3V1j5`.2.html
点击后密码成功被修改为pass
impossible
代码核心防护机制分析:
验证当前密码(杀手锏)
$pass_curr = $_GET[ 'password_current' ];
// ... 处理密码 ...
$data = $db->prepare( 'SELECT password FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );
// ...
if( ( $pass_new == $pass_conf ) && ( $data->rowCount() == 1 ) )
代码强制要求用户在修改密码前,必须输入正确的旧密码。服务器会将输入的旧密码进行 md5加密,并与数据库中的记录比对。
为什么这能防住csrf?
csrf的本质:攻击者利用受害者的登录状态(cookie),在受害者不知情的情况下发送请求。
攻击者的困境:攻击者可以伪造修改密码的请求(比如把密码改成 hacked),但攻击者不知道受害者的旧密码是多少。
结果:如果攻击者不填旧密码,或者填错,$data->rowCount() 就会是 0,导致验证失败,密码修改被拒绝。
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
赞赏
- [原创]dwva靶场-- xss 460
- [原创]dwva靶场-- sql注入 524
- [原创]dwva靶场-- csrf 477