CSRF漏洞定义
跨站请求伪造(英语: Cross-site request forgery),也被称为one- click attack或者sessionriding,通常缩写为CSRF或者XSRF;是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS利用的是用户对指定网站的信任,CSRF利用的是网站对用户网页浏览器的信任。
跨站请求攻击,简单地说,是攻击者通过些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
成因
Wb应用的身份验证机制虽然可以保证一个请求是来自于某个用户的浏览器却无法保证该请求是用户发起的。
危害
导致用户、管理员信息泄露
修改用户、管理员账号安全设置
盗取用户、管理员账号.
欺骗用户进行危险操作
与XSS漏洞结合提高漏洞危害。
CSRF与XSS不同
XSS攻击过程
攻击者发现XSS漏洞--构造代码--发送给受害者-- 受害者打开攻击者获取受害者cookie--完成攻击
CSRF攻击过程
攻击者发现CSRF漏洞--构造代码--发送给受害者 一受害者打开一- 受害者执行代码-- 完成攻击XSS容易发现,因为攻击者需要登陆后台完成攻击,管理员可以查看日志发现攻击者;CSRF不同他的攻击是管理员自己实现的,攻击者只负责构造了代
XSS可配和CSRF传播病毒
模拟用户操作算改数据窃取数据传播蠕虫等等
防御方法
CSRF核心是 跨域 + 伪造
跨域:通过在服务端对HTTP请求头Referer字段进行检查
伪造核心:请求中的所有参数都可以事先预测
伪造:客户端页面添加伪随机数,如:验证码,一次性Token
验证码: 区分人和机器;不可预测;需要用户输入;体验低
Token:字母+数字的随机串;作为隐藏参数自动提交;体验高;若存在XSS可被读取
缓解方法:缩短Session有效时间
1.token防御:
CSRF漏洞实质:服务器无法准确判断当前请求是否是合法用户的自定义操作漏洞修补逻辑分析如果服务器在用户登录之后给予用户一个唯一合法令牌,每一次操作过程中,服务器都会验证令牌是否正确,如果正确那么执行操作,不正确不执行操作。一般情况下,给予的令牌写入表单隐藏域的value中,随着表单内容进行提交Token防御代码分析
2.Referer防御
Referer防御CSRF原理: HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基于此可以获得一些信息用于处理当用户点击被构造好的CSRF利用页面,那么在执行用户对应操作时,提交的HTTP请求中就有对应的Referer值,此时服务端判断Referer值是否与服务器的域名信息有关,如果不想管则不执行操作Refer防御代码编写在PHP中使用$SERVER[HTTPREFERER]获取页面提交请求中的Referer值
3.验证码防御
验证码防御目前被认为是对抗CSRF最简单而且有效的防御方法,CSRF在用户不知情的情况下完成对应的操作,而验证码强制用户与应用程序进行交互,才能最终完成操作,可以被认为是二次验证,但是出于对用户体验考虑,不可能每一次操作都加入验证码。所以验证码只是一种辅助手段,不能作为防御CSRF的主要解决方案。
绕过Referer字段
判断Referer是否存在某关键词
例如: Referer判断是否存在target.com这个关键词,通过在网站中建立一个target.com的目录再把CSRF利用页面放在该目录下
判断Referer是否有某域名
例如: 判断Referer开头是否以target.com以及target子域名,并没有验证根域名为target.com,所以可以通过构造子域名x.126.com.evil.com来进行绕过
SSRF漏洞
成因
SSRF(ServeF-SideRequestForgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。通俗的来说就是我们可以伪造服务器端发起的请求,从而获取客户端所不能获取到的数据。ssrf漏洞形成的原因主要是服务器端口所提供的接口中包含了所要请求的内容URL参数,并未对客户端所传输过来的URL参数进行过滤
危害
可以对外网、服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息盗取用户、管理员账号:攻击运行在内网或本地的应用程序(比如溢出)对内网we应用进行指纹识别,通过访问默认文件实现攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2漏洞利用saq注)
利用file协议读取本地文件
利用Redis未授权访问,HTTP CRLF注入达到getshel
SSRF漏常见位置
分享网页
URL地址
手机转码 (将网页内容转换为适合手机端的浏览)
图片、文章收藏ur
加载API
调试工具
下载图片
在线翻译
搜索关键词
特征
file:/// -- 本地文件传输协议,主要用于访问本地计算机中的文件
dict:// -- 字典服务器协议,dict是基于查询相应的TCP协议,服务器监听端口2628
sftp:// -- SSH文件传输协议(SSH File Transfer Protocol),或安全文件传输协议(Secure File Transfer Protocol)
ldap:// -- 轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议
tftp:// -- 基于lockstep机制的文件传输协议,允许客户端从远程主机获取文件或将文件上传至远程主机
gopher:// -- 互联网上使用的分布型的文件搜集获取网络协议,出现在http协议之前
SSRF漏洞和URL跳转的区别?
ssrf漏洞是服务器发起的请求(也可认为是后端发起的请求)url跳转是浏览器发起的请求(也可认为是前端发起的请求
SSRF利用Gopher(脚本)攻击内网
SSRF绕过
利用重定向302跳转
利用DNS欺骗
切换编码
利用IPv6地址
127。0。0。1
http://example.com@127.0.0.1
http://127.0.0.1.xip.io/
利用其他协议file:///等
攻击方式
防御方式
1、过滤返回的信息,如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
3、限制请求的端口,比如80,443,8080,8090。
4、禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。
5、使用DNS缓存或者Host白名单的方式。