一、Web安全的关键点浏览器的同源策略同源策略:不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源。http://www.topo.com 的不同域/同域站点是否同域原因https://www.topo.com不同域协议不同,https与http是不同的协议http://alpha.topo.com不同域域名不同,alpha子域与www子域不同http://topo.com不同域域名不同,顶级域与www子域不是一个概念http://www.topo.com:8080不同域端口不同,8080与默认端口80不同http://www.topo.com/a/同域满足同协议、同域名、同端口,只是目录不同默认情况下是不允许跨域访问的,只有目标站点(http://www.topo.com)明确返回HTTP响应头:Access-Control-Allow-Origin: http://www.evil.com,那么www.evil.com上的客户端脚本才有权通过AJAX对www.topo.com上的数据进行读写操作。AJAXAsynchronous JavaScript and XML(异步的 JavaScript 和 XML)AJAX是在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。DOMDocument Object Mode (文档对象模型)中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。二、前端基础Web安全事件的角色:W3C、浏览器厂商、Web厂商、攻击者、用户。URLUniform Resource Locator(统一资源定位符)protocol://hostname[:port]/path/[;parameters][?query]#fragmentURL有三类编码方式:escape、encodeURI、encodeURIComponent,对应着三个解码函数unescape、decodeURI、decodeURIComponent。HTTPHyper Text Transfer Protocol(超文本传输协议)详情JavaScript<script>alert(1)</script><img src=# onerror=“alert(1)” /><input type=‘text’ value=“x” onmouseover=“alert(1)” /><iframe src=“javascript:alert(1)"></iframe><a herf=“javascript:alert(1)">x</a>…Cookie[name] [value] [domain] [path] [expires] [httponly] [secure]名称、值、所属域名、所属相对根路径、过期时间、是否有HttpOnly标志、是否有Secure标志三、前端黑客之XSSCross Site Script(跨站脚本),发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行,XSS就会产生。反射型XSS发出请求时,XSS代码出现在URL中,作为输入提交到服务端,服务端解析后响应,在响应内容中出现这段XSS代码,最后浏览器解析执行。存储型XSS提交的XSS代码会存储在服务端,下次请求目标页面时不用再提交XSS代码。DOM型XSSDOM型XSS的XSS代码不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析,可以认为完全是客户端的事情。常见的输入点:document.URLdocument.URLUnencodeddocument.locationdocument.referrerdocument.cookiewindows.locationwindows.name常见输出点:直接输出HTML内容:document.write()document.writeln()document.body.innerHtml=直接修改DOM树:document.forms[0].action=document.attachEvent()document.create()document.execCommand()document.body. …()替换document URLdocument.location=document.location.hostname=document.location.replace()document.location.asign()document.URL=window.navigate()打开或修改新窗口document.open()window.open()window.location.href=直接执行脚本eval()window.execScript()window.setInterval()window.setTimeout()XSS危害:挂马、盗取用户Cookie、Dos客户端浏览器、钓鱼攻击、劫持用户Web行为、蠕虫式挂马刷广告等等。四、前端黑客之CSRFCross-site request forgery(跨站请求伪造跨站的请求)跨站点的请求:跨站点请求的来源一般为其他站点,但是也可以来自本站。请求是伪造的:发出的请求不是用户的意愿的请求。HTML CSRF发起的CSRF请求都属于HTML元素发出的,HTML中能设置href/src等连接的标签都可以发起一个GET请求,如:<link href=”"><img src=”"><meta http-equiv=“refresh” content=“0; url="><iframe src=”"><script src="">…CSS中的:@import ““background:url(”")CSRF危害:篡改目标网站上的用户数据、盗取用户隐私数据、作物其他攻击向量的辅助攻击手法、传播CSRF蠕虫。五、前端黑客之界面操作劫持界面操作劫持攻击是一种基于视觉欺骗的Web会话劫持攻击,它通过在网页的可见输入控件上覆盖一个不可见的框(iframe),让用户以为在操作可见控件,但是实际上用户的操作行为被其不可见的框所劫持,执行不可见框中的恶意劫持代码,从而完成在用户不知情的情况下窃取敏感信息,篡改数据等攻击。分类点击劫持劫持的是用户的鼠标点击操作,主要的劫持目标是有重要会话交互的页面,比如,银行交易页面、后台管理页面或者劫持用户的摄像头和麦克风。拖放劫持在现在的Web应用中,有一些需要用户采用鼠标拖放完成的操作,而且用户也经常在浏览器中使用鼠标拖放操作来代替复制粘贴。因此,拖放操作劫持很大程度的扩展了点击劫持的攻击范围,也将劫持模式从单纯的鼠标点击扩展到了鼠标拖放行为。通过劫持某个页面的拖放操作实现对其他页面链接的窃取,这些链接中可能会有session key、token、password等信息;或者可以把其他浏览器中的页面内容拖放到富文本编辑器模式中,这样就能够看到页面源代码了,而这些HTML源代码中可能会存在敏感信息。触屏劫持移动智能终端设备由于体积限制,一般都没有鼠标、键盘这些输入设备,用户更多的操作是依靠手指在触屏上的点击或滑动等动作完成。在移动设备上,类似点击劫持的攻击模式,实现了对用户触摸屏操作的劫持攻击。原理分析点击劫持:CSS透明层+iframe利用CSS中透明属性opacity,取值范围0~1,取值0时透明度最高用iframe嵌入被劫持界面:<iframe id = “victim” src=“www.victim.com” scrolling=“no”>危害界面操作劫持实际上突破了CSRF的防御策略,这是一种社工色彩很强的跨域操作,而这种跨域正好是浏览器自身的特性,带来的危害可以很大,比如,篡改与删除数据,偷取隐私甚至爆发蠕虫。六、漏洞挖掘CSRF的漏洞挖掘目标表单是否有有效的token随机串目标表单是否有验证码目标是否判断了Refere来源网站根目录下的crossdomain.xml的"allow-access-from domain"是否是通配符目标JSON是否可以自定义callback函数界面劫持的漏洞挖掘目标的HTTP响应头是否设置了X-Frame-Options字段目标是否有Javascript的Frame Busting机制更简单的是用iframe嵌入目标网站试试反射型XSS漏洞挖掘反射型XSS最常见的就是直接在URL中进行注入,URL的格式如下:<scheme>://<netloc>/<path>?<query>#<fragment> 在完整的URL构成中,<path>、<query>、<fragment>都是用户可控的一般情况下可以通过将payload加入到参数来测试XSS的存在与否<script>alert(1)</script>’"><script>alert(1)</script><img/src=@ onerror=alert(1) />’ onmouseover=alert(1) x=’ onmouseover=alert(1) x=
javascript:alert(1)//’";alert(1)//}x:expression(alert(1))…..根据请求后的反应看是否有弹出窗或浏览器脚本错误,如果有则说明目标存在XSS漏洞例如:www.test.com/xss.php?id=1,这里输入点为id=1,既然有输入点,查看结果则依赖于输出点,可能是以下几处:HTML标签之间,<div id=“body”>[输出]</div>HTML标签内,<input type=“text” value=[输出] />Javascript代码的值,<script>a="[输出]”;…</script>CSS代码的值,<style>body{font-size:[输出]px;…}</style>HTML标签之间有很多标签之间的脚本是无法执行的,如:<title>、<textarea>、<xmp>、<iframe>、<noscript>、<plaintext>,可以先闭合前面的标签,来使得脚本能够成功执行。</title><script>alert(1)</script>HTML标签内" onmouseover=alert(1) x=" 这种是闭合属性,然后使用on事件来触发脚本。"><script>alert(1)</script> 这种是闭合属性后又闭合标签,然后直接执行脚本。细分为三种场景:1.输出在src/href/action等属性内2.输出在on*事件内3.输出在style属性内Javascript代码的值</script><script>alert(1)//CSS代码的值与“输出再在style属性内”类似,构造能执行的Javascript语句,闭合标签。存储型XSS漏洞挖掘与反射型XSS相比,存储型XSS漏洞挖掘的差别在于:存储型XSS一般都是基于表单的提交,然后进入服务端存储,最终在某个页面输出。一般情况下,存储型XSS表单提交之后的输出点有以下几种可能:表单提交后跳转到的页面可能是输出点。表单所在的页面可能是输出点。表单提交后不见了,整个网站的某个源文件是输出点,需要借助爬虫进行分析。