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.屏蔽返回的信息详情