WEB漏洞-CSRF及SSRF

CSRF 漏洞

原理

CSRF(Cross-site request forgery):跨域请求伪造,也被称为One Click Attack或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
常见攻击手段发送csrf的连接,通过伪造请求从而受害者点击后会利用受害者的身份发起这个请求。例如新增一个账号,修改用户密码等等。
CSRF攻击攻击原理及过程如下

	用户a 网站b 钓鱼网站c
	用户a打开浏览器,访问受信任网站,输入用户名和密码请求登录网站b;
	在用户信息通过验证后,网站b产生Cookie信息并返回给浏览器,此时用户登录网站b成功,可以正常发送请求到网站b;
	用户a未退出网站b之前,在同一浏览器中,打开一个TAB页访问网站c(内含恶意代码);
	网站c接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点b;
	用户a在接收到这些攻击性代码后,在用户不知情的情况下携带Cookie信息,向网站b发出请求。网站b并不知道该请求其实是由网站c发起的, 所以会根据用户		       							     a的Cookie信息以a的权限处理该请求,导致来自钓鱼网站c的恶意代码被执行。

注意:CSRF攻击成功的两个必要条件:
登录受信任网站b,并在本地生成Cookie。(如果用户没有登录网站b,那么钓鱼网站c在诱导的时候,请求网站b的api接口时,会提示你登录),且cookies或者session 尚未过期。
在不登出b的情况下,访问危险网站c(其实是利用了网站b的漏洞)。
这里用户a生成的cookie保证了用户可以处于登录状态,但网站b其实拿不到cookie。
原理:攻击者盗用了你用户的身份信息,以用户的名义发送恶意请求,对服务器来说这个请求是合法用户发起的,却完成了攻击者所期望的一些操作。
利用条件:已经登录系统,被目标网站授权,cookie值或session值未过期,没有二次验证缺一不可

xss与csrf的区别

如果hacker事先在网站的首页如果发现了一个XSS漏洞,则hacker可能会这样做: 欺骗用户或用户不小心访问埋伏了XSS脚本(盗取cookie的脚本)的页面,用户中招,那么hacker就可以拿到用户的cookie,然后hacker顺利登录到小白的后台,小黑自己修改小白的相关信息。

所以跟上面比一下,就可以看出CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。
因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:

对敏感信息的操作增加安全的token;
对敏感信息的操作增加安全的验证码;
对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

在这里插入图片描述

演示

靶场:pikachu
登录
在这里插入图片描述

点击修改,抓数据包
在这里插入图片描述
显而易见,发送这个数据包就会更改数据,那么我们可以写一个钓鱼简易网站
被攻击者访问这个网站,如果对方是已经被授权登录,就会触发里面的script代码,导致信息被修改

<!DOCTYPE html>
<html>
<script>
function openReport() {   document.write('<img src="http://站点/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=15988767673&add=cba+lakes&email=kobe%40pikachu.com&submit=submit" width=0 height=0>');  
 } 
</script>
<body> 
<form>
<button type='button' onclick='openReport()'>submit</button>  
</form>
</body>
</html>

在同一个浏览器下访问这个html
在这里插入图片描述
点击submit,返回用户页面查看,地址被篡改,成功
在这里插入图片描述

CSRF 漏洞检测,防御

检测演示

进行相关操作后抓取数据包,右键选择Generate CSRF FoC
在这里插入图片描述

然后修改些相关数据,将代码cv后放在本地网站中然后进行访问,访问之后查看原来的数据有无改变
在这里插入图片描述

防御方案

1.当用户发送重要的请求时需要输入原始密码
2.设置随机Token
给数据包添加唯一的编号

优点:
比Referer安全,对于 GET 请求,token 将附在请求地址之后,这样 URL 就变成 http://url?csrftoken=tokenvalue。 而对于 POST 请求来说,要在 form 的最后加上隐藏域"<"input type=“hidden” name=“csrftoken” value=“tokenvalue”/>,这样就把 token 以参数的形式加入请求了。
Token通常使用的方法就是在每次页面加载时,使用 javascript 遍历整个 dom 树,对于 dom 中所有的 a 和 form 标签后加入 token。这样可以解决大部分的请求,但是对于在页面加载之后动态生成的 html 代码,这种方法就没有作用,还需要程序员在编码时手动添加 token。
缺点:
难以保证 token 本身的安全。

token在哪里

案例:
靶场:pikachu
打开csrf的Token,然后submit抓取第一次数据包
在这里插入图片描述

抓取第二次数据包
会发现两次的token值时不一样的
在这里插入图片描述

3.同源策略:检验referer来源,请求时判断请求连接是否为当前管理员正在使用的页面(管理员在编辑文章,黑客发来恶意的修改密码链接,因为修改密码页面管理员并没有在操作,所以攻击失败)
referer值与当前的访问的页面不在同一个域名
在这里插入图片描述

优点:
简单易行,网站的普通开发人员不需要操心 CSRF 的漏洞,只需要在最后给所有安全敏感的请求统一增加一个拦截器来检查 Referer 的值就可以。特别是对于当前现有的系统,不需要改变当前系统的任何已有代码和逻辑,没有风险,非常便捷。
缺点:
Referer 的值是由浏览器提供的,可以被代理工具或者抓包工具篡改,二次抓包修改绕过

4.设置验证码
5.限制请求方式只能为POST
6.将cookie设置为HttpOnly

CSRF攻击很大程度上是利用了浏览器的cookie,为了防止站内的XSS漏洞盗取cookie,需要在cookie中设置“HttpOnly”属性,这样通过程序(如JavaScript脚本、Applet等)就无法读取到cookie信息,避免了攻击者伪造cookie的情况出现。设置cookie为HttpOnly的代码如下:response.setHeader( “Set-Cookie”, “cookiename=cookievalue;HttpOnly”);

7.在 HTTP 头中自定义属性并验证

SSRF漏洞解释,原理等

解释

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
注释:除了http/https等方式可以造成ssrf,类似tcp,connect 方式也可以探测内网一些ip 的端口是否开发服务,只不过危害比较小而已。

前提条件:
利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务。
SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制,如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
SSRF利用存在缺陷的Web应用作为代理攻击远程和本地的服务器。

攻击方式:
对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
攻击运行在内网或本地的应用程序需对内网Web应用进行指纹识别,识别企业内部的资产信息;
攻击内外网的Web应用,主要是使用HTTP GET请求就可以实现的攻击(struts2、SQli等);
利用file协议读取本地文件等。

数据流:攻击者----->服务器---->目标地址

根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF:

file_get_contents()
file_get_contents() 函数把整个文件读入一个字符串中,和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
fsockopen()
curl_exec()

如果一定要通过后台服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求,则请做好目标地址的过滤。

SSRF漏洞检测,案例,防御等

限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS请求
限制不能访问内网IP,防止对内网进行攻击
屏蔽或者过滤返回的详细信息

案例

靶场:pikachu-ssrf
各个协议调用探针:http,file,dict,ftp,gopher等
漏洞攻击:端口扫描,指纹识别,漏洞利用,内网探针等
http://192.168.64.144/phpmyadmin
file:///D:/www.txt
dict://192.168.64.144:3306/info
ftp://192.168.64.144:21

SSRF(curl)实验步骤

第一步:打开目标网站,并根据提示点击。

在这里插入图片描述
第二步,见url可知,网站通过get传file值到服务器,服务器根据file值返回相应的东西
在这里插入图片描述
观察URL,发现它传递了一个URL给后台
在这里插入图片描述

第三步:我们可以把 url 中的内容改成内网的其他服务器上地址和端口,探测内网的其他信息,比如端口开放情况,下面这个例子就探测出127.0.0.1这台机器开放了3306端口

在这里插入图片描述

SSRF(file_get_content)实验步骤

第一步:访问目标网站,并根据提示点击
在这里插入图片描述
第二步,见url可知,网站通过get传file值到服务器,服务器根据file值返回相应的东西
在这里插入图片描述
分析:
在这里插入图片描述
可知是通过file_get_contents()把文件读取到字符串,然后进行输出
file_get_content 可以对本地和远程的文件进行读取,比如

http://xxx.xxx.xxx.xxx:xx/vul/ssrf/ssrf_fgc.php?file=http://xxx.xxx.xxx.xxx:xx/readme.txt

在这里插入图片描述

XSS、CSRF、SSRF的区别

相同点

XSS,CSRF,SSRF三种常见的Web服务端漏洞均是由于,服务器端对用户提供的可控数据过于信任或者过滤不严导致的。

不同点

XSS:是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的脚本语句被执行。
CSRF:是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以利用用户的Cookie信息伪造用户请求发送至服务器。
SSRF:是服务器对用户提供的可控URL过于信任,没有对攻击者提供的RUL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值