CSRF漏洞的挖掘与利用

0x01 CSRF的攻击原理html

CSRF 百度上的意思是跨站请求伪造,其实最简单的理解咱们能够这么讲,假如一个微博关注用户的一个功能,存在CSRF漏洞,那么此时黑客只须要伪造一个页面让受害者间接或者直接触发,而后这个恶意页面就能够使用受害者的微博权限去关注其余的人微博帐户。CSRF只要被批量化利用起来其危害仍是比较大的。ajax

举个例子,好比笔者在新浪首页执行了一次搜索请求。json

 

 

能够看到这里有个Referer的信息,Referer也就是请求来源地址,也就是说这个请求是从http://www.sina.com.cn这里发起的。而后去掉Referer,去执行这个请求,发现这个请求仍然能够进行正常的搜索,那么就说明这个请求没有判断请求来源也就是Referer,在请求头部也没有发现存在token的迹象,那么笔者能够判断此处存在CSRF,这个CSRF是没有任何危害的,可是换成其余请求呢?好比加关注,修改资料或者其余敏感操做呢?服务器

 

0x02 CSRF漏洞成因及分类post

1)第一种测试

请求直接是个GET请求,而后请求中没有token验证参数,而后还有一个固定的变量能够被控制。这种是比较常见的一种CSRF漏洞。这种漏洞的检测方法很简单:网页操做某功能,抓包后,若是发现知足上面条件,而后再去页面测试下,基本就能够肯定存在不存在CSRF漏洞了。spa

实例.net

某微博站曾存在的一个漏洞,关注用户微博的请求以下(其中key的值是每个用户独有惟一的):code

1
http://***.****.com/reflow/follow?resType=json&isAjax=1&key=226216966

笔者根据上面的测试方法进行测试发现无token,可是对referer作了校验,可是csrf的状况仍是存在的,由于被攻击者的referer每每是和CSRF漏洞的GET请求是同域的,因此除非验证的至关的严格,通常状况下的验证是无效的,此类的站点输入微博类的站点,用户能够随随便便在上面发送微博,微博中能够带上该连接,只要受害者点击便可关注黑客的微博了。orm

 

2)第二种

请求是个POST请求,post请求中没有token参数,而后请求也没有验证referer信息。这种是存在CSRF状况最多的一种。这种漏洞的检测方法也很简单:网页操做某功能,抓包后,若是发现没有token等参数,而后就将referer信息设置为空,再次发包请求,若是请求成功了,就说明这里有CSRF漏洞。

若是有token等参数,能够尝试将token去掉,而后再将referer也去掉,进行验证。这种CSRF漏洞的利用,是须要在本身服务器构造一个form表单的,而后将服务器form表单的URL做为CSRF攻击进行利用的,或者用js代码生成form表单,或者用ajax实现。

实例

某微博主页刷粉丝,利用poc以下:

1
2
3
4
5
6
7
8
9
10
< html >
     < body >
         < form name = "px" method = "post" action = "http://widget.******.com/plugin/followbutton/addfans" >
             < input type = "text" name = "page_id" value = "60185****" >
         </ form >
         < script >
          document.px.submit();
          </ script >
      </ body >
  </ html >

 

3)第三种

请求是POST,post请求中没有token参数,可是验证了referer信息。然而能够将post请求改写为get请求,而后经过第一种状况下的那个方法利用。这种的检测方法,就是先执行了第二种的验证后,发现有对CSRF进行防护。而后将post请求改写为GET请求,发现仍然能够成功执行。漏洞成因是由于服务器端接收请求参数的时候,没有严格的用$_POST 而是用的相似于 $_REQUEST这种post,get请求的参数均可以接收的写法。

相关文章
相关标签/搜索