0x01 CSRF介绍:

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

0x02 CSRF环境搭建:

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

<?php
header("Content-Type:text/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']}"."<br/>";}}
}
?><!DOCTYPE html>
<html>
<head><title>CSRF利用场所</title>
</head>
<body>
<b><h2>CSRF测试环境</h2></b>
<form action="" method="post"><b>user:<input type="text" name="username" /></b><b>pass:<input type="password" name="password" /></b><input type="submit" value="Ok" name="sub" />
</form>
</body>
</html>

0x03 代码解释:

代码:  <?php ?>  开始和结束 没一门编程语言都有       
代码:   header("Content-Type:text/html;charset=utf-8");  将页面的编码设置为UTF-8
代码:

if(isset($_POST['sub'])){ $username = $_POST['username'];$password = $_POST['password'];

解释:

代码:
没错 又到了这里 看过我的细说SQL注入的就知道 我解释过一遍了 没看过那篇帖子的也没事哈 我再解释一遍。

$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要查询的表 adminsqlif($row=mysql_query($sql)){  //判断sql语句是否执行了while($rows = mysql_fetch_array($row)){   //执行就把数据库里面的数据表里面的所有字段表用while循环取出来echo "user:{$rows['username']}-----pass:{$rows['password']}"."<br/>";  //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哪里 插入这些代码 然后执行即可

0x04 正题:

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

构建环境:

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

点击ok 提交数据

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

<script>
function s(){document.getElementById('fuck').submit();  //这里是javascript的代码(详情:[url]http://www.jquerycn.cn/a_10756[/url])
}
</script>
<body onload=s()>
<form action="http://localhost/php/xss/fanshexing.php" method="post" id="fuck"><input type='hidden' name="username" value="heike"><input type='hidden' name="password" value="888888"><input type='hidden' name="sub" value="123456">
</form>
</body>

构建环境:

攻击者视角:我现在的身份是一枚"非法用户" 我现在要去拿这个构造的页面发给笨蛋管理员,假设现在我发送QQ邮件给管理员发了个文件 就是我构造的页面 发给了他
如果管理员打开了 就会自动提交

<input type='hidden' name="username" value="heike">   用户
<input type='hidden' name="password" value="888888">  密码

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

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

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

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

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

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


我用的是2345浏览器在工具哪里可以设置代理服务器

点击进入Internet后 点击连接

局域网设置

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

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

环境构造:
ok 现在我是一名"非法用户" 我发现了这个网站的后台登录地址 而且发现了木有存在token验证
我首先打开了他们的管理员登录的人口地方

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

开启burpsuite

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

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

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

复制代码 创建一个HTML文件

如果想修改账号 就吧 <input type="hidden" name="username" value="test" />  value="账号在这里 可以随便修改其他的 这里我就修改为test1"
OK了 Ctrl+s 就可以保存了
查询一下 现在有用户:
有三个用户 我们把这个文件发给管理员
环境构造:我现在又是管理员了 我打开了这个文件 并且在我没有退出登录和销毁cookie的情况下 打开了这个文件

点击提交,添加成功:

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

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

0x06 CSRF的检测以及防御

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

也可以看看cookie或者post包中有没有token这种东西

转自:https://bbs.ichunqiu.com/thread-24127-1-1.html?from=sec

【CSRF技巧拓展】————1、用代码来细说Csrf漏洞危害以及防御相关推荐

  1. 【XSS技巧拓展】————4、浅谈跨站脚本攻击与防御

    跨站脚本简称xss(cross-site scripting),利用方式主要是借助网站本身设计不严谨,导致执行用户提交的恶意js脚本,对网站自身造成危害.xss漏洞是web渗透测试中最常见而又使用最灵 ...

  2. vscode 快速调到定义处_vim技巧:在程序代码中快速跳转,在文件内跳转到变量定义处...

    本篇文章介绍 vim 的一些使用技巧: 在程序代码中快速跳转 在文件内跳转到变量定义处 在程序代码中快速跳转 在 vim 中查看代码文件时,可以使用下面命令在程序代码中快速跳转,提高效率. % 跳转到 ...

  3. 【Python】python初学者应该知道与其他语言差异化的高效编程技巧(附测试代码+详细注释)

    目录 1. 交换变量 2. 集合去重 3. 列表推导.集合推导和字典推导 4. 统计字符串中各个字符出现的次数 5.优雅地打印JSON数据 6.行内的if语句 6. 符合正常逻辑的数值比较 7. 田忌 ...

  4. 【XSS技巧拓展】————14、XSS攻击另类玩法

    今天就来讲一下大家都熟悉的 xss漏洞的攻击利用.相信大家对xss已经很熟悉了,但是很多安全人员的意识里 xss漏洞危害只有弹窗或者窃取cookie.但是xss还有更多的花式玩法,今天将介绍几种. 1 ...

  5. CSRF漏洞利用以及防御手段(详细解释)

    基础知识 CSRF漏洞基础知识 靶场实验(DVWA) DVWA security:low 查看源码 <?phpif( isset( $_GET[ 'Change' ] ) ) {// Get i ...

  6. 30.WEB漏洞-RCE代码及命令执行漏洞

    30:WEB漏洞-RCE代码及命令执行漏洞 参考文章:https://www.cnblogs.com/zhengna/p/15775737.html 本文为博主学习复现笔记 文章目录 30:WEB漏洞 ...

  7. 防范因编写代码产生的系统漏洞

    用于互联网服务的系统安全性是至关重要的.在过去的2018年,发生了多起用户信息泄密事件,其中不乏著名的互联网公司,攻击者都是利用系统漏洞获取用户的账号和密码,从而进一步获取用户的信息. 什么是系统漏洞 ...

  8. REC代码及命令执行漏洞

    RCE代码及命令执行漏洞 1.RCE介绍 全称:remote command/code execute 分为远程命令执行和远程代码执行 1.命令执行漏洞: 直接调用操作系统命令 代码执行漏洞: 靠执行 ...

  9. Java项目代码依赖包安全漏洞检测插件Dependency Check

    最近在搞Java的后端项目,需要更新jar依赖包,找到了一个jar包漏洞检测的插件Dependency Check. Dependency-Check是OWASP(Open WebApplicatio ...

最新文章

  1. 加盟依图科技后,颜水成首篇顶会论文提出“高效多人体姿态检测SPM”
  2. Nacos离GA更进一步:0.9.0发布
  3. 转载 mysql 数据库优化配置实例
  4. SQL Server 2012 sa 用户登录 18456 错误
  5. Linux目录、文件的创建与删除
  6. 七招制胜ASP.NET应用程序开发
  7. oracle数据库SQL入门
  8. Emmet:HTML/CSS代码快速编写神器
  9. Java并发——线程安全
  10. shell if语句特殊用法(高级用法),工具安装判断
  11. 自媒体公约:良性发展大于利益本能
  12. Android input监控耳机插入demo
  13. Struts2之OGNL表达式与值栈对象及常用标签的使用
  14. 最新的SAS SID 2023可用至2023年1月SAS 9.4 SID续订更新sas sid 2022服务器通用版server
  15. 程序员分哪几种,分别薪资是多少
  16. GPS测量原理及应用 知识总结
  17. 《戴尔·卡耐基传记》--[美]戴尔·卡耐基
  18. 关于Java基础部分知识的综合应用之成员调度系统的项目
  19. chat--hxxdfd
  20. java基础_设计模式_设计基础(小鸭子游戏)

热门文章

  1. epplus word html,使用EPPlus(C#)读写Excel
  2. 使用PyCharm运行.sh文件
  3. QT程序编译时的错误:QMAKESPEC has not been set, so configuration cannot be deduced.
  4. vuex总结(四)——mutations
  5. CF487E Tourists(圆方树+树链剖分)
  6. 嵌入式Android底层开发
  7. 合肥九型人格与领导力提升
  8. 艺术|油画|欣赏| 遥想当年赤壁
  9. circRNA:环状RNA简介
  10. KingPager,自己做的分页控件,纯JS,支持所有语言