CSRF

CSRF原理:经常与XSS混淆。

从信任的角度进行区分:XSS:利用用户对站点的信任;CSRF:利用站点对已经身份认证的信任(有一定的信任)【默认情况:站点不信任客户端】

结合社工在身份认证会话过程中实现攻击

场景:

1、修改账号密码、个人信息(email、收货地址)

2、发送伪造的业务请求(网银、购物、投票)

3、关注他人社交账号、推送博文

4、在用户非自愿、不知情情况下提交请求

属于业务逻辑漏洞(所有请求都是正常的请求)

关键操作(支付、提交订单等)缺少确认机制(如验证码)

自动扫描程序无法发现此类漏洞

漏洞利用条件

被害用户已经完成身份认证(即已登录)

新请求的提交(重要性的)不需要重新身份验证

攻击者必须了解Web Application请求的参数构造

诱使用户触发攻击的指令(社工)

Burpsuite CSRF PoC generator

Post/Get方法

CSRF漏洞演示过程【win7为受害者,修改密码页面,kali为攻击机】

低级别,无需输入原密码【伪造页面和链接,诱使受害者点击】

注:GET方法:将会在页面有明显显示;POST方法:将可隐藏操作

GET

POST

查看网页源代码,直接修改表单的代码,保存成页面文件,诱使用户点击【使用burpsuite截断重放】

保存成html文件,伪造链接,发给受害者

代码审计

low

  <?php

     if (isset($_GET['Change'])) {

         // Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf']; if (($pass_new == $pass_conf)){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new); $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); echo "<pre> Password Changed </pre>";
mysql_close();
} else{
echo "<pre> Passwords did not match. </pre>";
} }
?>

medium【绕过referer】

  <?php

     if (isset($_GET['Change'])) {

         // Checks the http referer header
if ( eregi ( "127.0.0.1", $_SERVER['HTTP_REFERER'] ) ){ //判断来源,限制接受本机IP的包【可将其替换或在referer中包含127.0.0.1】 // Turn requests into variables
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf']; if ($pass_new == $pass_conf){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new); $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); echo "<pre> Password Changed </pre>";
mysql_close();
} else{
echo "<pre> Passwords did not match. </pre>";
} } }
?>

high  【需输入原密码】

  <?php

     if (isset($_GET['Change'])) {

         // Turn requests into variables
$pass_curr = $_GET['password_current'];
$pass_new = $_GET['password_new'];
$pass_conf = $_GET['password_conf']; // Sanitise current password input
$pass_curr = stripslashes( $pass_curr );
$pass_curr = mysql_real_escape_string( $pass_curr );
$pass_curr = md5( $pass_curr ); // Check that the current password is correct
$qry = "SELECT password FROM `users` WHERE user='admin' AND password='$pass_curr';";
$result = mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' ); if (($pass_new == $pass_conf) && ( $result && mysql_num_rows( $result ) == 1 )){
$pass_new = mysql_real_escape_string($pass_new);
$pass_new = md5($pass_new); $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';";
$result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); echo "<pre> Password Changed </pre>";
mysql_close();
} else{
echo "<pre> Passwords did not match or current password incorrect. </pre>";
} }
?>

自动扫描程序的检测方法【代码安全,确认机制角度】

在请求和响应过程中检查是否存在anti-CSRF token

检查服务器是否验证anti-CSRF token的名值

检查token中可编辑的字符串

检查referrer头是否可以伪造

对策

Captcha

anti-CSRF token

Referrer头  【可绕过机率较大】

降低会话超时时间

小白日记50:kali渗透测试之Web渗透-CSRF的更多相关文章

  1. 小白日记28:kali渗透测试之Web渗透-扫描工具-Nikto

    扫描工具-Nikto #WEB渗透 靶机:metasploitable 靶场:DVWA[默认账号/密码:admin/password] #新手先将DVWA的安全性,调到最低,可容易发现漏洞 侦察[减少 ...

  2. 小白日记30:kali渗透测试之Web渗透-扫描工具-Skipfish

    WEB渗透-skipfish Skipfish是一个命令行模式,以C语言编写的积极的Web应用程序的安全性侦察工具,没有代理模式. 它准备了一个互动为目标的网站的站点地图进行一个递归爬网和基于字典的探 ...

  3. 小白日记51:kali渗透测试之Web渗透-WebShell(中国菜刀、WeBaCoo、Weevely)

    webshell 本质:<?php echo shell_exec($_GET['cmd']);?> windows平台 中国菜刀官网:胖客户端程序,国产中比较优秀的webshell,适用 ...

  4. 小白日记54:kali渗透测试之Web渗透-补充概念(AJAX,WEB Service)

    补充概念 AJAX(异步javascript和XML) Asynchronous javascript and xml 是一个概念,而非一种新的编程语言,是一组现有技术的组合 通过客户端脚本动态更新页 ...

  5. 小白日记52:kali渗透测试之Web渗透-HTTPS攻击(Openssl、sslscan、sslyze、检查SSL的网站)

    HTTPS攻击 全站HTTPS正策划稿那位潮流趋势 如:百度.阿里 HTTPS的作用 CIA 解决的是信息传输过程中数据被篡改.窃取 [从中注入恶意代码,多为链路劫持] 加密:对称.非对称.单向 HT ...

  6. 小白日记45:kali渗透测试之Web渗透-SqlMap自动注入(三)-sqlmap参数详解-Optimization,Injection,Detection,Techniques,Fingerprint

    sqlmap自动注入 Optimization [优化性能参数,可提高效率] -o:指定前三个参数(--predict-output.--keep-alive.--null-connection) - ...

  7. 小白日记37:kali渗透测试之Web渗透-手动漏洞挖掘(三)-目录遍历、文件包含

    手动漏洞挖掘 漏洞类型 #Directory traversal 目录遍历[本台机器操作系统上文件进行读取] 使用者可以通过浏览器/URL地址或者参数变量内容,可以读取web根目录[默认为:/var/ ...

  8. 小白日记35:kali渗透测试之Web渗透-手动漏洞挖掘(一)-默认安装引发的漏洞

    手动漏洞挖掘 即扫描后,如何对发现的漏洞告警进行验证. #默认安装 流传linux操作系统比windows系统安全的说法,是因为windows系统默认安装后,会开放很多服务和无用的端口,而且未经过严格 ...

  9. 小白日记34:kali渗透测试之Web渗透-扫描工具-Burpsuite(二)

    扫描工具-Burpsuite 公共模块 0.Spider 爬网 手动爬网 先禁用截断功能 手动将页面中点击所有连接,对提交数据的地方,都进行提交[无论内容] 自动爬网[参数设置] 指定爬网路径,否则其 ...

随机推荐

  1. 开着奥迪做Uber司机是什么心态?

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. angular的directive笔记

    原贴地址 1,tansclude: 是指令能够能够把外部定义的内容传回指令模板内部(通过在内部标签使用ng-transclude).这个外部指定的内容是根据外部的作用域控制的,跟指令的作用域无关.这个 ...

  3. JS的一些小验证

    1,文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  4. Android中使用gzip传递数据

    HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术.大流量的WEB站点常常使用GZIP压缩技术来减少文件大小,减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时 ...

  5. C#中的DllImport

    大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功 ...

  6. jsp转发action的问题找不到acton

    -----------------------------jsp转发action的问题找不到acton------------------------------------------- jsp: ...

  7. spring含参数 环绕通知demo

    题目:有一个懂得读心术的人需要完成两件事情:截听志愿者的内心感应和显示他们在想什么 <?xml version="1.0" encoding="UTF-8" ...

  8. Oracle 建表常用数据类型的详解

    创建表时,必须为表的各个列指定数据类型.如果实际的数据与该列的数据类型不相匹配,则数据库会拒绝保存.如为学生指定出生日期为“1980-13-31”. 在Oracle中,常见的数据类型有: 字符串:字符 ...

  9. Android Studio Push rejected: Push to origin/Alpha1.0 was rejected

    android studio git 右键项目, git pull 刷新选择Alpha1.0同步后,再commit and push

  10. vector和iterator及collection

    Collection是所有集合的最上层接口,它里面定义了所有集合对象都可以进行的操作:它有两个子接口,分别是List和Set.List会记录放在其中元素的放入顺序,形象地说,可以认为是一个传送带,它上 ...