csrf学习总结
CSRF(跨站请求伪造)
成因:
Web应用缺乏对请求来源的验证,导致攻击者可以利用用户已经登录的状态(通过Cookie)发起伪造请求。
Cookie起的作用:
- 自动携带机制:浏览器会自动携带Cookie,攻击者可以利用这一点发起伪造请求。
(如果用户已经登录了example.com,浏览器会在访问example.com的任何页面时自动携带session_id Cookie。)
- 身份验证依赖:Web应用依赖Cookie来验证用户身份,但没有验证请求来源是否合法。
攻击类型分类
GET型:(链接)
POST型:(表单)
XSS型:
(API接口调用触发)?
操作性质分类:
数据操作类:
- 增加操作
- 删除操作
- 修改操作
文件操作类:(?)
- 文件读取操作
- 文件上传操作
- 文件删除操作
如何查看是否有csrf
在报文中找
- token——CSRF令牌,最有效的
- Authorization——API认证
- Referer——检测请求的来源,有可能伪造
看看去掉这些后,重新发request,看看是否能成功
{本质是存在一些我们得不到的防伪数据}
生成相关的脚本
BP上有一个功能可以生成对应简单的链接
例子:
DVWA的low版CSRF题目
直接用bp打开
有
输入密码后,发现url多了一些内容
有
我删掉referer的内容后仍然是成功的
而且,好像没有发现什么token值,直接改url上面的password_new和password_conf为111
仍然成功
这就有了CSRF漏洞出现了
现在尝试用bp生成一个脚本:
找到如图按键
会帮我什么生成相关脚本
这样就节省了编代码的力气了(不过对于复杂的可能会比较难生成,而且想构造符合具体情况的话,还是要自己去构造的)
它还能生成url——点击Test in browser(仅限于bp的Browser上用),输入到Browser上
点那个按键进去后就可以把密码改为111
cors
CORS是一种安全机制,它允许一个域(源)的Web应用去请求另一个域的资源。
它允许服务器明确地告诉浏览器,哪些外部域可以访问它的资源。服务器通过在HTTP响应头中添加Access-Control-Allow-Origin等CORS相关的头信息,来告诉浏览器是否允许跨域请求。
(1)简单请求
(2)预检请求
判断
改一下origin,看看Access-Control-Allow-Origin会不会跟着改动;
或者,Access-Control-Allow-Origin直接就设为*了(任何域都可以访问你的资源)
JSONP
JSONP的核心思想是利用<script>标签的src属性不受同源策略限制的特点,通过动态创建<script>标签来加载跨域服务器上的数据。
(1)基本原理
- 当浏览器解析
<script>标签时,会加载src属性指定的URL,并执行返回的JavaScript代码。 - 如果服务器返回的是一个JSON对象,直接返回会报错(因为JSON不是有效的JavaScript代码)。因此,服务器需要返回一个函数调用,将JSON数据作为参数传递给这个函数。
- 客户端定义一个回调函数,用于处理返回的数据。
前提
被攻击网址(服务器)要满足
有JSONP接口,且没有被严格限制:
- 支持JSONP接口。(要目标网址上有可以callback的参数(类似的也可), ——即开放了一个JSONP接口)
- 允许用户动态指定回调函数名。
- 返回的JSON数据中包含用户可控的内容。
- 返回的JSON数据被错误地解析为HTML内容。
- 返回的JSON数据包含敏感信息。
[!CAUTION]
实现xss攻击
(如果目标网站的JSONP接口返回的JSON数据被错误地解析为HTML内容,攻击者可以通过构造恶意的JSON数据来实现XSS攻击)
1 <script src="https://example.com/api/data?callback=<script>alert(1)</script>"></script>
xxs+csrf组合拳getshell
待续。。。




