请注意,本文编写于 463 天前,最后修改于 463 天前,其中某些信息可能已经过时。
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。
curl_exec,file_get_contents
1.file读文件
2.dict协议查看端口开放情况
3.gopher
gopher协议支持发出GET、POST请求:可以先截获get请求包和post请求包,在构成符合gopher协议的请求。gopher协议是ssrf利用中最强大的协议
1)http://www.baidu.com@10.10.10.10与http://10.10.10.10 请求是相同的,利用[::]绕过localhost
2)ip地址转换成进制来访问
3)可以指向任意ip的域名:xip.io
4)短链接
5)302转跳
6)DNS解析
1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3,限制请求的端口为http常用的端口
4,黑名单内网IP
5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
6.安全包,对转跳进行追踪
跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。
服务端在收到路由请求时,生成一个随机数,在渲染请求页面时把随机数埋入页面,服务端设置setCookie,把该随机数作为cookie或者session种入用户浏览器 当用户发送 GET 或者 POST 请求时带上_csrf_token参数 后台在接受到请求后解析请求的cookie获取_csrf_token的值,然后和用户请求提交的_csrf_token做个比较,如果相等表示请求是合法的。
在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站。
5.在 HTTP 头中自定义属性并验证:
通过 XMLHttpRequest
这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest
请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
Referrer-Policy
用户可以通过浏览器配置或者Referrer-Policy 关闭 referer 的发送。
如果页面中包含了如下 meta 标签,所有从当前页面中发起的请求将不会携带 referer:
<<span class="title">meta name="referrer" content="never">
json发包格式是Content-Type:application/json
,可尝试使用text/plain
发包
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://xxx.com/csrf" method="POST" enctype="text/plain">
<input type="hidden" name='{"data":"我是数据","address":"' value='"}' />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
因为 input框 的组成方式就是 name=value 这种格式所以肯定会在最后带一个 =
添加 value='"}'
是为了闭合 json 防止爆错
CORS,跨域资源共享(Cross-origin resource sharing),是H5提供的一种机制,WEB应用程序可以通过在HTTP增加字段来告诉浏览器,哪些不同来源的服务器是有权访问本站资源的,当不同域的请求发生时,就出现了跨域的现象。
Access-Control-Allow-Origin
指定哪些域可以访问本域的资源。例如,如果requester.com
想要访问provider.com
的资源,那么开发人员可以用此授予requester.com
访问provider.com
资源的权限。1.同于csrf跨站请求伪造,发送钓鱼链接,读取用户敏感数据。
2.结合xss漏洞利用漏洞,针对httponly js代码无法读取
漏洞:Origin 校验/语法错误;信任null
Access-Control-Allow-Origin: nul
l。来自内部文档和沙盒请求的跨域资源调用可以指定null来源。应针对私有和公共服务器的可信来源正确定义CORS头。Access-Control-Allow-Origin:*
在受到同源规则的限制下(同协议、同域名、同端口),资源不允许跨域访问,但是在实际的使用过程中总有一些地方需要跨域去调用其他域下的资源。
这时候jsonp身为跨域的方法中的一个就孕育而生了,由于html标签中的<script>
、<img>
、<iframe>
这三个标签是允许进行资源的跨域获取的,jsonp就是利用了这三个标签中的其中一个 <script>
利用js代码动态生成script标签然后利用标签中的src属性来进行资源的跨域调用。
利用回调函数'包'住我们的json数据返回
厂商没有对jsonp请求对来源进行校验和过滤导致任意域都能获取到数据
攻击者构造恶意的html页面,利用链接诱导受害者进行点击,从而获取到受害者的敏感信息
1、严格安全的实现 CSRF 方式调用 JSON 文件:限制 Referer 、部署一次性 Token 等。
2、严格安装 JSON 格式标准输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 )。
3、严格过滤 callback 函数名及 JSON 里数据的输出。
4、严格限制对 JSONP 输出 callback 函数名的长度(如防御上面 flash 输出的方法)。
5、其他一些比较“猥琐”的方法:如在 Callback 输出之前加入其他字符(如:/**/、回车换行)这样不影响 JSON 文件加载,又能一定程度预防其他文件格式的输出。还比如 Gmail 早起使用 AJAX 的方式获取 JSON ,听过在输出 JSON 之前加入 while(1) ;这样的代码来防止 JS 远程调用。
JSONP 只支持 GET 请求,CORS 支持所有类型的 HTTP 请求。JSONP 的优势在于支持老式浏览器,以及可以向不支持 CORS 的网站请求数据。
全部评论 (暂无评论)
info 还没有任何评论,你来说两句呐!