网络安全

SSRF与CSRF

2019-01-07  本文已影响12人  Otis4631

什么是csrf

csrf通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

csrf的攻击方式

攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

image

完成一次csrf攻击必须要有的条件

登录受信任的网站A,在本地生成Cookie,在不登出A的情况下,访问危险网站B,
下面有例子:
1.http://www.mybank.com/Transfer.phptoBankId=11&money=1000
使用GET请求更新资源,在访问危险网站B的之前没有登出A,而B中的<'img'>以GET的方式请求第三方资源,
2.使用POST请求完成转账操作,
表单如下

<form action="Transfer.php" method="POST">
  <p>ToBankId: <input type="text" name="toBankId" /></p>
  <p>Money: <input type="text" name="money" /></p>
  <p><input type="submit" value="Transfer" /></p>
</form>

后台处理php

<?php
    session_start();
    if (isset($_REQUEST['toBankId'] && isset($_REQUEST['money']))
    {
        buy_stocks($_REQUEST['toBankId'], $_REQUEST['money']);
    }
  ?>

这样依旧会让网站存在csrf漏洞,

银行后台使用了_REQUEST去获取请求的数据,而_REQUEST既可以获取GET请求的数据,也可以获取POST请求的数据,这就造成了在后台处理程序无法区分这到底是GET请求的数据还是POST请求的数据。在PHP中,可以使用_GET和_POST分别获取GET请求和POST请求的数据。在JAVA中,用于获取请求数据request一样存在不能区分GET请求数据和POST数据的问题。依旧可以使用GET完成请求资源的操作,达到恶意攻击

3.经过_GET,_REQUEST请求之后,依旧出现了漏洞,使用$_POST来请求资源,
php代码如下:

<?php
    session_start();
    if (isset($_POST['toBankId'] && isset($_POST['money']))
    {
        buy_stocks($_POST['toBankId'], $_POST['money']);
    }
  ?>

此时的危险B网站,也构造了一个form表单,使用javascript自动提交表单,请求资源

<html>
  <head>
    <script type="text/javascript">
      function steal()
      {
               iframe = document.frames["steal"];
               iframe.document.Submit("transfer");
      }
    </script>
  </head>

  <body onload="steal()">
    <iframe name="steal" display="none">
      <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
        <input type="hidden" name="toBankId" value="11">
        <input type="hidden" name="money" value="1000">
      </form>
    </iframe>
  </body>
</html>

总结一下上面3个例子,CSRF主要的攻击模式基本上是以上的3种,其中以第1,2种最为严重,因为触发条件很简单,一个<'img'>就可以了,而第3种比较麻烦,需要使用JavaScript,所以使用的机会会比前面的少很多,但无论是哪种情况,只要触发了CSRF攻击,后果都有可能很严重。

csrf的防御方法

什么是ssrf

服务器端请求伪造,是一种有攻击者构造形成有服务器发起的攻击,一般是外网无法访问的内网。

ssrf形成的原因

由于服务端提供了其他服务器应用获取数据的功能且没有对目标地址做过滤与限制,比如从制定的URL地址获取网页文本内容,加载指定的地址图片,下载等
其中成因与php相关的函数

<?php
if (isset($_POST['url'])) 
{ 
$content = file_get_contents($_POST['url']); 
$filename ='./images/'.rand().';img1.jpg'; 
file_put_contents($filename, $content); 
echo $_POST['url']; 
$img = "<img src=\"".$filename."\"/>"; 
} 
echo $img; 
?>
这段代码使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。

<?php 
if (isset($_POST['url']))
{
$link = $_POST['url'];
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($curlobj);
curl_close($curlobj);

$filename = './curled/'.rand().'.txt';
file_put_contents($filename, $result); 
echo $result;
}
?>
这段代码使用fsockopen函数实现获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。

<?php 
function GetFile($host,$port,$link) 
{ 
$fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
if (!$fp) { 
echo "$errstr (error number $errno) \n"; 
} else { 
$out = "GET $link HTTP/1.1\r\n"; 
$out .= "Host: $host\r\n"; 
$out .= "Connection: Close\r\n\r\n"; 
$out .= "\r\n"; 
fwrite($fp, $out); 
$contents=''; 
while (!feof($fp)) { 
$contents.= fgets($fp, 1024); 
} 
fclose($fp); 
return $contents; 
} 
}
?>

ssrf利用方式

ssrf漏洞如何挖掘

1.从web功能上寻找

1.分享:通过URl地址分享网页内容
2.转码服务:通过URL地址吧原地址的网页内容调优,时期适合手机屏幕浏览
3.在线翻译:通过URL地址翻译对应文本内容
4.图片的加载与下载:通过URL地址加载或下载图片
5.图片,文章收藏功能

2.从URL关键字中寻找

share,wap,url,link,src,source,target,u,
3g,display,sourceURl,imageURL,domain

排除法

ssrf防御

1.过滤返回信息,验证远程服务器对请求时的响应是比较容易的方式,如果web应用是去获取某一种类型文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准,
2.统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态
3.限制请求的端口为http常用端口,比如,80,443,8080,8090
4.黑名单内网ip,避免应用被用来获取获取内网数据,攻击内网
5.禁用不需要的协议,仅仅永续http和https请求

可以通过burpsuite插件自动化监测ssrf漏洞,
实例:
weblogic配置不当,天生ssrf漏洞
discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞
CVE-2016-1897/8 - FFMpeg
CVE-2016-3718 - ImageMagick

作者:青山i
链接:https://www.jianshu.com/p/2f60dbd68eb8
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

上一篇 下一篇

猜你喜欢

热点阅读