0%

web安全——CSRF和SSRF

CSRF

​ CSRF(Cross-site request Forgery,跨站请求伪造)通过伪装成受信任用户请求受信任的网站。

1
注意:scrf漏洞并不需要获取用户的cookie等信息

目标:已经登陆了网站的用户

目的:以合法用户的身份来进行一些非法操作

需要条件:

​ 1.用户已经登陆了目标网站

​ 2.目标用户访问了攻击者构造的url

攻击过程:

​ 1.找到存于登陆状态的存在csrf网站的合法用户,向其发送可以构造的恶意链接,诱使其点击

​ 2.用户点击该链接,由该合法用户向服务器发出包含恶意链接里隐藏操作(如删除数据、转账等)的请求

​ 3.服务器收到已经登录用户的请求,认为是合法用户的主动的操作行为,执行该操作

典型的csrf实例

​ 当你使用网上银行进行转账时,首先需要登录网上银行,点击转账按钮后,会发出http://www.xxbank.com/pay.php?user=xx&money=100请求,当存在攻击者想要对你进行csrf攻击时,他会向你发送一个邮件或者短信,其中包含可以构造的恶意链接 http://www.bank.com/pay,php?user=hack&money=100,并且采用一定的伪装手段诱使你进行点击,当你点击后即向该hack转账100元。

流量中检测csrf的可行性

​ 1.对于比较低级的csrf而言,可以直接通过检测请求的referer字段来进行确定是否为scrf。因为在正常scrf页面中应该是在主页等页面跳转得到,而csrf请求一般的referer是空白或者是其他网站,但是该方法可以被绕过。

​ 2.完全的检测很难

csrf漏洞修复建议

​ 1.验证请求的referer

​ 2.在请求中加入随机的token等攻击者不能伪造的信息


SSRF

​ SSRF(Server-Side Request Forgery,服务端请求伪造)是一种有由攻击者构造请求,服务器端发起请求的安全漏洞。

目标:外网无法访问的服务器系统

目的:获取内网主机或者服务器的信息、读取敏感文件等

形成原因:服务器端提供了从其他服务器获取数据的功能,但没有对目标地址做限制和过滤

攻击过程:

​ 1.用户发现存在ssrf漏洞的服务器a的页面访问的url,以及可使用SSRF攻击的参数

​ 2.修改要请求参数要请求的文件,将其改成内网服务器b和文件,直接访问

​ 3.服务器a接收到要访问的参数所包含的服务器b和文件名,去服务器b下载资源

​ 3.对于服务器b,由于是服务器a发起的请求,直接将文件返回给服务器a

​ 4.服务器a将该文件或页面内容直接返回给用户

两种典型的ssrf攻击实例:

​ 本地存在ssrf漏洞的页面为:http://127.0.0.1/ssrf.php?url=http://127.0.0.1/2.php

原始页面的功能为通过GET方式获取url参数的值,然后显示在网页页面上。如果将url参数的值改为http://www.baidu.com ,这个页面则会出现百度页面内容。

​ 因此利用这个漏洞,我们可以将url参数的值设置为内网址,这样可以做到获取内网信息的效果。

探测内网某个服务器是否开启

​ 将url参数设置为url=”192.168.0.2:3306”时,可以获取大到该内网主机上是否存在mysql服务。

读取内网服务器文件

​ 访问ssrf.php?url=file:///C:/Windows/win.ini 即可读取本地文件

流量中检测SSRF可行性分析:

​ 对于只能抓到外网向内网访问的流量的网口来说,从流量中检测SSRF只能从请求参数异常返回包是否异常、是否包含敏感信息来进行检测。

SSRF漏洞修复建议:

​ 1.限制请求的端口只能是web端口,只允许访问http和https的请求

​ 2.限制不能访问内网IP,以防止对内网进行攻击

​ 3.屏蔽返回的信息详情