马鞍山网站设计制作,知名的咨询行业网站制作,南昌网站排名,建立个人网站要钱吗0x00 简要介绍 CSRF#xff08;Cross-site request forgery#xff09;跨站请求伪造#xff0c;由于目标站无token/referer限制#xff0c;导致攻击者可以用户的身份完成操作达到各种目的。根据HTTP请求方式#xff0c;CSRF利用方式可分为两种。 0x01 GET类型的CSRF 这种类…0x00 简要介绍 CSRFCross-site request forgery跨站请求伪造由于目标站无token/referer限制导致攻击者可以用户的身份完成操作达到各种目的。根据HTTP请求方式CSRF利用方式可分为两种。 0x01 GET类型的CSRF 这种类型的CSRF一般是由于程序员安全意识不强造成的。GET类型的CSRF利用非常简单只需要一个HTTP请求所以一般会这样利用 img srchttp://wooyun.org/csrf.php?xx11 / 如下图在访问含有这个img的页面后成功向http://wooyun.org/csrf.php?xx11发出了一次HTTP请求。所以如果将该网址替换为存在GET型CSRF的地址就能完成攻击了。 乌云相关案例 http://wooyun.org/bugs/wooyun-2010-023783 http://wooyun.org/bugs/wooyun-2010-027258 (还未公开) 0x02 POST类型的CSRF 这种类型的CSRF危害没有GET型的大利用起来通常使用的是一个自动提交的表单如 form actionhttp://wooyun.org/csrf.php methodPOST
input typetext namexx value11 /
/form
script document.forms[0].submit(); /script 访问该页面后表单会自动提交相当于模拟用户完成了一次POST操作。 乌云相关案例 http://wooyun.org/bugs/wooyun-2010-026622 http://wooyun.org/bugs/wooyun-2010-022895 0x03 其他猥琐流CSRF 过基础认证的CSRF(常用于路由器): POC: img srchttp://admin:admin192.168.1.1
/* ![CDATA[ */!function(){try{var tcurrentScriptin document?document.currentScript:function(){for(var tdocument.getElementsByTagName(script),et.length;e--;)if(t[e].getAttribute(cf-hash))return t[e]}();if(tt.previousSibling){var e,r,n,i,ct.previousSibling,ac.getAttribute(data-cfemail);if(a){for(e,rparseInt(a.substr(0,2),16),n2;a.length-n;n2)iparseInt(a.substr(n,2),16)^r,eString.fromCharCode(i);edocument.createTextNode(e),c.parentNode.replaceChild(e,c)}}}catch(u){}}();/* ]] */ / 加载该图片后路由器会给用户一个合法的SESSION就可以进行下一步操作了。 乌云相关案例 WooYun: TP-LINK路由器CSRF可干许多事影响使用默认密码或简单密码用户 0x04 如何修复 针对CSRF的防范有以下几点要注意 关键操作只接受POST请求 验证码 CSRF攻击的过程往往是在用户不知情的情况下构造网络请求。所以如果使用验证码那么每次操作都需要用户进行互动从而简单有效的防御了CSRF攻击。 但是如果你在一个网站作出任何举动都要输入验证码会严重影响用户体验所以验证码一般只出现在特殊操作里面或者在注册时候使用 检测refer 常见的互联网页面与页面之间是存在联系的比如你在www.baidu.com应该是找不到通往www.google.com的链接的再比如你在论坛留言那么不管你留言后重定向到哪里去了之前的那个网址一定会包含留言的输入框这个之前的网址就会保留在新页面头文件的Referer中 通过检查Referer的值我们就可以判断这个请求是合法的还是非法的但是问题出在服务器不是任何时候都能接受到Referer的值所以Refere Check 一般用于监控CSRF攻击的发生而不用来抵御攻击。 Token 目前主流的做法是使用Token抵御CSRF攻击。下面通过分析CSRF 攻击来理解为什么Token能够有效 CSRF攻击要成功的条件在于攻击者能够预测所有的参数从而构造出合法的请求。所以根据不可预测性原则我们可以对参数进行加密从而防止CSRF攻击。 另一个更通用的做法是保持原有参数不变另外添加一个参数Token其值是随机的。这样攻击者因为不知道Token而无法构造出合法的请求进行攻击。 Token 使用原则 Token要足够随机————只有这样才算不可预测
Token是一次性的即每次请求成功后要更新Token————这样可以增加攻击难度增加预测难度
Token要注意保密性————敏感操作使用post防止Token出现在URL中0x05 测试CSRF中注意的问题 如果同域下存在xss的话除了验证码其他的方式都无法防御这个问题。 有个程序后端可能是用REQUEST方式接受的而程序默认是POST请求其实改成GET方式请求也可以发送过去存在很严重的隐患。 当只采用refer防御时可以把请求中的修改成如下试试能否绕过 原始referhttp://test.com/index.php 测试几种方式以下方式可以通过的话即可能存在问题 http://test.com.attack.com/index.php
http://attack.com/test.com/index.php
[空]refer为空构造的方法 由于浏览器特性跨协议请求时不带referGeckos内核除外比如https跳到http如果https环境不好搭建的话ftp其实也是可以的iframe srcdata:text/html,script srchttp://www.baidu.com/script //IE不支持利用 xxx.srcjavascript:HTML代码的方式; 可以去掉referIE8要带。
iframe idaa src/iframe
script
document.getElementById(aa).srcjavascript:htmlbodywooyun.orgscripteval(你想使用的代码)/script/body/html;
/scripthttp://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/