热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

细说_用代码来细说Csrf漏洞危害以及防御

篇首语:本文由编程笔记#小编为大家整理,主要介绍了用代码来细说Csrf漏洞危害以及防御相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了用代码来细说Csrf漏洞危害以及防御相关的知识,希望对你有一定的参考价值。














i春秋社区















CSRF介绍














CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本XSS,但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

















CSRF环境搭建














环境搭建嘛,肯定要php的咯,不过别担心,这不有俺在嘛 我给你尝尝代码的味道。
CSRF测试代码:











html;charset=utf-8");


if(isset($_POST['sub'])){


        $username = $_POST['username'];


        $password = $_POST['password'];


        $cOnn= mysql_connect("localhost","root","root");


        $db=mysql_select_db("test");


        $query = mysql_query("SET NAMES 'gbk'");


        $sql="INSERT INTO `adminsql` (`id` ,`username` ,`password`)VALUES (13 , '$username' , '$password')";


        $row=mysql_query($sql); //执行sql插入语句


        $sql="SELECT * FROM adminsql";


        if($row=mysql_query($sql)){


                while($rows = mysql_fetch_array($row)){


                echo "user:{$rows['username']}-----pass:{$rows['password']}"."
";


        }


 


}


}


?>


 





       




CSRF测试环境



        user:


        pass:


       























上层代码解释














代码:  开始和结束 没一门编程语言都有
           


代码:header("Content-Type:text/html;charset=utf-8");  将页面的编码设置为UTF-8

代码:代码











if(isset($_POST['sub'])){ 


                     $username = $_POST['username'];


                     $password = $_POST['password'];











解释:







用代码来细说Csrf漏洞危害以及防御





代码:











$cOnn= mysql_connect("localhost","root","root");    //连接数据库  mysql_connect("HOST你的网站","你数据库账号","你数据库密码"); 赋值给$conn变量 


 


$db=mysql_select_db("test");     //mysql_select_db("test");  mysql_select_db()函数是设置数据库, 第一个参数是你数据库名 注意: 是数据库名 不是表名!   


 


 


$query = mysql_query("SET NAMES 'gbk'");  //mysql_query()函数是执行一条sql语句 他这里是设置数据库字符编码为gbk


 


 


$sql="INSERT INTO `adminsql` (`id` ,`username` ,`password`)VALUES (13 , '$username' , '$password')";  //SQL语句 INSERT INTO(插入)  INSERT INTO 后       面的反引号是你的数据表名 就是数据库test下的表











再后面的括号(`id`,`username`,`password`); 这里是数据表里面的值 我有三个字段表  分别是id、usernam、 password这三个  
后面的VALUES (13 , '$username' , '$password')";  //第一个参数是id 我没设置那个自增长ID(详情:http://jingyan.baidu.com/article/fcb5aff7b3a025edaa4a7130.html)   
在后面的就懂了吧 就是我前面吧HTML表单的值赋值给那个变量:











$username =      $_POST['username'];


      $password = $_POST['password'];











懂俺意思了吧 嘻嘻  就是啊 你单击提交的数据 会插入到数据库的深处
















代码:











$sql="SELECT * FROM adminsql";   //SELECT(查询) from要查询的表 adminsql


        if($row=mysql_query($sql)){  //判断sql语句是否执行了


                while($rows = mysql_fetch_array($row)){   //执行就把数据库里面的数据表里面的所有字段表用while循环取出来


                echo "user:{$rows['username']}-----pass:{$rows['password']}"."
";  //echo 输出到页面上  前面的mysql_fetch_array()函数是一行一行获取         值  他吧值赋给了$rows变量 这个函数获取到的值全是array数组 所以要 $rows['username']; 这样取值 输出  


        }











我把数据库发给你们吧:











[table=98%,none]


[tr=none ][td][align=right][align=right][size=1em]1[/align]


[align=right][size=1em]2[/align]


[align=right][size=1em]3[/align]


[align=right][size=1em]4[/align]


[align=right][size=1em]5[/align]


[align=right][size=1em]6[/align]


[align=right][size=1em]7[/align]


[align=right][size=1em]8[/align]


[align=right][size=1em]9[/align]


[align=right][size=1em]10[/align]


[align=right][size=1em]11[/align]


[align=right][size=1em]12[/align]


[align=right][size=1em]13[/align]


[align=right][size=1em]14[/align]


[align=right][size=1em]15[/align]


[align=right][size=1em]16[/align]


[align=right][size=1em]17[/align]


[align=right][size=1em]18[/align]


[align=right][size=1em]19[/align]


[align=right][size=1em]20[/align]


[align=right][size=1em]21[/align]


[align=right][size=1em]22[/align]


[align=right][size=1em]23[/align]


[align=right][size=1em]24[/align]


[align=right][size=1em]25[/align]


[align=right][size=1em]26[/align]


[align=right][size=1em]27[/align]


[align=right][size=1em]28[/align]


[align=right][size=1em]29[/align]


[align=right][size=1em]30[/align]


[align=right][size=1em]31[/align]


[align=right][size=1em]32[/align]


[align=right][size=1em]33[/align]


[align=right][size=1em]34[/align]


[align=right][size=1em]35[/align]


[align=right][size=1em]36[/align]


[align=right][size=1em]37[/align]


[align=right][size=1em]38[/align]


[align=right][size=1em]39[/align]


[align=right][size=1em]40[/align]


[align=right][size=1em]41[/align]


[align=right][size=1em]42[/align]


[align=right][size=1em]43[/align]


[align=right][size=1em]44[/align]


[align=right][size=1em]45[/align]


[align=right][size=1em]46[/align]


[align=right][size=1em]47[/align]


[align=right][size=1em]48[/align]


[/align][/td][td][align=right][size=1em][size=1em]-- phpMyAdmin SQL Dump


[size=1em]-- version phpStudy 2014


[size=1em]-- [url]http://www.phpmyadmin.net[/url]


[size=1em]--


[size=1em]-- 主机: localhost


[size=1em]-- 生成日期: 2017 年 06 月 23 日 21:14


[size=1em]-- 服务器版本: 5.5.53


[size=1em]-- PHP 版本: 5.3.29


 


[size=1em]SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


[size=1em]SET time_zOne= "+00:00";


 


 


[size=1em]/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;


[size=1em]/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;


[size=1em]/*!40101 SET @OLD_COLLATION_COnNECTION=@@COLLATION_CONNECTION */;


[size=1em]/*!40101 SET NAMES utf8 */;


 


[size=1em]--


[size=1em]-- 数据库: `test`


[size=1em]--


 


[size=1em]-- --------------------------------------------------------


 


[size=1em]--


[size=1em]-- 表的结构 `adminsql`


[size=1em]--


 


[size=1em]CREATE TABLE IF NOT EXISTS `adminsql` (


[size=1em]  `id` int(11) NOT NULL,


[size=1em]  `username` varchar(32) NOT NULL,


[size=1em]  `password` varchar(32) NOT NULL


[size=1em]) ENGINE=InnoDB DEFAULT CHARSET=utf8;


 


[size=1em]--


[size=1em]-- 转存表中的数据 `adminsql`


[size=1em]--


 


[size=1em]INSERT INTO `adminsql` (`id`, `username`, `password`) VALUES


[size=1em](1, 'aaaa', ''),


[size=1em](1, 'aaaa', ''),


[size=1em](1, 'aaaa', 'xss'),


[size=1em](1, 'aaaa', 'xss'),


[size=1em](1, 'csrf', 'csrf');


 


[size=1em]/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


[size=1em]/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;


[size=1em]/*!40101 SET COLLATION_COnNECTION=@OLD_COLLATION_CONNECTION */;


 


[/align][/td][/tr]


[/table]











在mysql的SQL哪里 插入这些代码 然后执行即可

















进入正题














好了 有了环境 我们就更方便测试了 访问代码页:







用代码来细说Csrf漏洞危害以及防御





构建环境:
ok  假设我现在是一枚网站管理员 现在localhost是我网站 localhost/php/xss/fanshexing.php 是我后台 现在我的同伴他说想帮我管理我的后台 我就把他创建了一个用户 用户名为(escape) 密码为(admin888)







用代码来细说Csrf漏洞危害以及防御





点击ok 提交数据







用代码来细说Csrf漏洞危害以及防御





OK 现在admin是我的号 而escape是我同伴的号 不过在此之前有一个黑客发现我的后台没有用token令牌 存在csrf漏洞 于是他就构造了一个html的文件
代码如下:




































构建环境:
攻击者视角:好 我现在的身份是一枚"非法用户" 我现在要去拿这个构造的页面发给笨蛋管理员 嘿嘿
假设现在我发送QQ邮件给管理员发了个文件 就是我构造的页面 发给了他


如果管理员打开了 就会自动提交
   用户
         密码
OK  到了管理员视角:


管理员:嘿 escape伙伴 快来瞧瞧 是一个html的文件 是一位叫构造者发给我们的 我们瞧瞧
escape:OK瞧瞧看
点击。。。







用代码来细说Csrf漏洞危害以及防御





当然 这些用户是我从数据库取出来的 在项目中可不会这样 所以说 笨蛋管理员还不知道 我已经在他的后台构造了一个我的用户







用代码来细说Csrf漏洞危害以及防御














如何构造一个添加管理员的页面?














没安装burpsuite请看:https://bbs.ichunqiu.com/forum.p...mp;page=1#pid284388
















前面的构造页面太多的代码了 难道我需要全部背下来吗??当然不需要 下来我来教大家怎么构造一个CSRF的添加管理员页面



1、打开burpsuite神器https://bbs.ichunqiu.com/forum.p...mp;page=1#pid284388







用代码来细说Csrf漏洞危害以及防御





OK 打开后要代理服务端才能收到请求的数据

2、代理服务器
在burpsuite的主页面中的proxy里的Options







用代码来细说Csrf漏洞危害以及防御





在浏览器这里设置代理服务器(详情:http://jingyan.baidu.com/article/f0e83a25da4d8222e591019d.html
我用的是2345浏览器在工具哪里可以设置代理服务器







用代码来细说Csrf漏洞危害以及防御





点击进入Internet后 点击连接







用代码来细说Csrf漏洞危害以及防御





局域网设置







用代码来细说Csrf漏洞危害以及防御





在我下面图画箭头的地方打钩
点击确定即可

3、开始构造
打开我们的管理员后台
查看后台现在有几个管理用户:







用代码来细说Csrf漏洞危害以及防御










用代码来细说Csrf漏洞危害以及防御





user:test  pass:test   开启浏览器服务器代理







用代码来细说Csrf漏洞危害以及防御





开启burpsuite







用代码来细说Csrf漏洞危害以及防御





代理好了服务器 开启了burpsuite 就点击ok







用代码来细说Csrf漏洞危害以及防御





OK 接受到了 右击burpsuite界面  Engagement tooles 里面的 Generrate CSRFPoC







用代码来细说Csrf漏洞危害以及防御





可以看到 他已经自己给你构造了一个页面:







用代码来细说Csrf漏洞危害以及防御





创建一个HTML文件







用代码来细说Csrf漏洞危害以及防御





如果想修改账号 就吧   value="账号在这里 可以随便修改其他的 这里我就修改为test1"
OK了 Ctrl+s 就可以保存了
查询一下 现在有用户:
有三个用户 我们把这个文件发给管理员

环境构造:我现在又是管理员了 我打开了这个文件 并且在我没有退出登录和销毁COOKIE的情况下 打开了这个文件







用代码来细说Csrf漏洞危害以及防御





点击提交添加成功:







用代码来细说Csrf漏洞危害以及防御




用代码来细说Csrf漏洞危害以及防御





根据以上流程 我写下了一个具体的流程图:







用代码来细说Csrf漏洞危害以及防御





到了这里 恐怕有很多人会问我 怎么去看这些漏洞是否存在?
答:你要是单单只是看看漏洞是否存在 可以看COOKIE或者post包中有没有token这种东西 如果存在token那就不能利用了 token就是个验证的玩意 只有服务器和后台有 所以你burpsuite是搜不到的

















CSRF的检测以及防御














CSRF出现的地方通常在权限控制的地方 如会员中心、后台管理、用户注册、发布帖子、用户后台处、交易管理处这几个地方
防御就是开启token验证 token验证能干什么?你开启了token验证后 客服端请求的值必须和服务端的值相同 不能进行修改 这样你burpsuite就不能在改了 就彻底防御了这个漏洞也可以看看COOKIE或者post包中有没有token这种东西













用代码来细说Csrf漏洞危害以及防御








点击下方
“阅读原文”查看更多,惊喜多多哟~













为了满足各位安全小伙伴日渐丰富的阅读需求,我们开始推出白帽日报系列~看完每天的文章后,可以继续聊聊热点趣事,学学安全技术新姿势,岂不快哉!话不多说,一起来看吧~







用代码来细说Csrf漏洞危害以及防御
























教育不应该随着毕业而结束,让我们活到老,学到老!
















1.【暑期最溜的福利活动】


玩得出挑,浪出风格。这个暑假来i春秋:搞事搞事搞事!


【送小米6、360isc安全训练营名额、500元京东卡、企安殿激活码、300泉币等等等】


https://bbs.ichunqiu.com/thread-24715-1-1.html






2.【思路分享】


我是如何发现网马箱子后门,并直接下载XXshell数据库的。 


【之前渗透一个网站,上传的一句话被各种拦截,不会免杀的我就在网上到处找一个能免杀的PHP大马了,然后。。】


https://bbs.ichunqiu.com/thread-24717-1-1.html






3.【翻译】


内核漏洞学习从入门到放弃—part1—熟悉HEVD


【本文默认读者已经配置好了基本实验环境,因为环境配置网络上有大量详细资源,在此编者不再单独成文介绍环境。】


https://bbs.ichunqiu.com/thread-24736-1-1.html






4.【技术分享】


一次奇葩的url跳转绕过


【前几天某src测试的时候发现的,完全可以用来钓鱼,欺骗性极高!  】


https://bbs.ichunqiu.com/thread-24731-1-1.html






























推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
author-avatar
adfa3sd5f6a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有