0x00 前言
一直以来对于 jsonp 这些东西都不怎么理解 对csrf也都仅仅局限于懂原理的地步 今日发现 DoraBox 靶场上有例子 便结合文章和实例来自我总结一番
0x01 什么是跨域
浏览器有一个最为核心的策略叫做同源策略: 同domain(或ip),同端口,同协议视为同一个域 同一个域只能读写同一个域的资源 举个简单的例子 a.com 是在正常情况下是无法获取 b.com上的资源的
- 跨域本质
跨域本质就是绕过同源策略的严格限制,安全与实用往往有时候会有一定的矛盾性,开发人员更注重的是功能的开发使用,例如有时候同二级域名下的不同三级域名需要进行一些信息数据传输时,共享一些资源时,同源策略将其限制,但是又要实现该功能,此时就诞生了一些跨越请求的技术
0x02 JSONP跨域与劫持
JSONP 跨域就是利用script 中 src 不受同源策略影响的一种特性
JSONP 劫持就是攻击者获取到了本应传给网站其他接口的一些数据
0x03 JSONP 劫持简单例子
所以通过上面的描述 我们其实就可以 自己定义一个页面 通过src来引入接口 从而获取接口的数据
以上就是一个接口返回的信息 我们通过构造一个页面来进行JSONP 劫持
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JSONP劫持测试</title>
</head>
<body>
<script type="text/javascript">
function test(result)
{
alert(result.address);
}
</script>
<script type="text/javascript" src="http://localhost/csrf/jsonp.php?callback=test">
</script>
</body>
</html>
Code language: HTML, XML (xml)
通过构造上面的代码可以构成 JSONP劫持
这里我们通过构造一个html的页面 并在其中引入了script src地址为jsonp接口
JSONP劫持是属于CSRF漏洞种的比较常见的一种 :
JSONP是一种可以导致敏感信息泄露的一种漏洞 攻击者可以精心构造一个网页然后通过邮件钓鱼等方式来诱使受害者点击链接 如果受害者点击了链接,则攻击者便可以获取受害者的个人的信息,如邮箱、姓名、手机等信息
JSONP还可以结合xss 由于对输入的callback函数名过滤不严格,导致输入的数据直接输出到前端造成XSS 这种xss是反射性xss
0x04 CORS跨域
CORS 跨域资源分享 CORS需要浏览器和服务器同时支持,相比JSONP更加复杂,但是一般目前的浏览器都是支持的,服务器只需要进行相应配置 会在发送跨域请求时在HTTP请求头中添加一些字段来验证,关键字段如下:
- Access-Control-Allow-Origin:指定哪些域可以访问域资源。例如,如果a.com想要访问b.com的资源,那么开发人员可以使用此标头安全地授予a.com对b.com资源的访问权限。
- Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送cookie。仅当allow-credentials标头设置为true时,才会发送Cookie。
- Access-Control-Allow-Methods:指定可以使用哪些HTTP请求方法(GET,PUT,DELETE等)来访问资源。此标头允许开发人员通过在a.com请求访问b.com的资源时,指定哪些方法有效来进一步增强安全性。
它允许浏览器想跨域服务器,发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制
XMLHttpRequest
XMLHttpRequest 使得浏览器发出http请求和接受http请求
XMLHttpRequest相当于是秘书一样 充当一个中间人传话的效果 该对象用于在后台与服务器交换数据
XMLHttpRequest 是浏览器所提供的一个对象 这个对象可以使得浏览器发出和接受http请响应
简单的CORS跨域流程如下
- 服务器配置支持CORS 默认所有域都可以访问
- 浏览器把当前域名添加到origin当中 发送跨域请求 通俗的来说 首先要亮明自己的身份是吧 不然服务器哪知道要不要允许你跨域呢
- 服务器根据资源配置文件 在响应头中添加Access-Control-Allow-Origin Header,返回结果 如果是可以的话 就是 Access-Control-Allow-Origin Header : true
- 浏览器比较 Access-Control-Allow-Origin Header 和origin 如果获得授权就将结果返回给页面
CORS 跨域实例
可以看到这里是允许所有域访问的
CORS 跨域漏洞 利用概要
受害者登陆允许CORS的网站a.com 然后又不幸点击了攻击者的evil.com 链接 这个时候受害者已经登陆了a.com网站 有一定的权限 不幸点了攻击者的链接之后 由于有CORS 跨域漏洞 导致 evil.com 可以直接向 a.com 请求一些敏感数据的请求 如果 a.com 配置了 Access-Control-Allow-Origin 未预期那么就可以成功获取到 敏感信息
0x05 总结
最后来总结一下
JSONP 劫持 是利用script 中src 不受同源策略影响 在网页中引入一些接口的链接 诱使受害者点击 从而 获取一些敏感数据
CORS 跨域 这个有两个前提 需要 浏览器和服务器同时支持 服务器要允许 在允许CORS 的网站下 通过跨域请求从而获取敏感信息
参考文章
https://www.freebuf.com/articles/web/208672.html
https://yq.aliyun.com/articles/69313
https://juejin.im/post/5b1cebece51d4506ae71addf#heading-1