浏览器的编码常识:在JavaScript中,有三套编/解码的函数:escape/unescape、encodeURI/decodeURI、encodeURIComponent/decodeURIComponent;除了JavaScript提供的这三种加/解密方法外,我们还需要了解HTMLEncode、URLEncode、JSEncode、UTF-7编码、Base64编码的相关知识;
html中的代码注入技巧:完整的HTML代码分为:标签名、属性名、属性值、文本、注释。其中可以是JavaScript事件、资源链接或data对象;1.标签:(由于HTML语言的松散性和各标签的不同优先级,使得我们可以创造出很多代码混淆或绕过方式;另外还有一种特殊的注释:IE HTML条件控制语句);2.属性:(HTML标签中的属性同样也是大小写不敏感的,并且属性值可以用双引号引起来,也可以用单引号,甚至不用引号在HTML语法上也是正确的;此外,标签和属性之间、属性名和等号之间、等号和属性值之间可以用空格、换行符(chr(13))、回车符(chr(10))或者tab(chr(9))等,并且个数不受限制;还有一个常识对我们来说非常重要,HTML中通过属性定义的事件在执行时会做HTMLDecode编码);3.HTML事件(另一种特殊的HTML属性是事件属性,一般以on开头。它继承了普通的HTML属性的所有特点:大小写不敏感、引号不敏感等)
css中的代码注入技巧:与HTML一样,我们可以将CSS分为选择符、属性名、属性值、规则和声明几部分;与HTML类似,CSS的语法同样对大小写不敏感,属性值对单引号不敏感,对资源类属性来说,URL部分的单双引号以及没有引号也都不敏感,并且凡是可以使用空格的地方使用tab制表符、回车和换行也都是可以被浏览器解析;1.CSS资源类属性:(与HTML的资源类属性类似,CSS的一些资源类属性的XSS利用也是通过伪协议来完成的,这种利用方式目前只能在IE下被执行,并且IE9已经可以防御住;CSS还有一类资源类属性可以嵌入XML、CSS或者JavaScript,比如,Firefox2独有的-moz-binding、IE独有的behavior以及规则@import);2.expression:(expression是IE所独有的CSS属性,其目的就是为了插入一段JavaScript代码);3.利用UTF-7编码进行CSS代码混淆(介绍monyer在线加解密工具时,提过两个加/解密:UTF7Encode和UTF7Decode。将页面进行UTF7编码,这为混淆我们的代码、绕过u对方的过滤器提供了很大便利)
JavaScript中的代码注入技巧
突破url过滤:可以参考如下一些技巧来绕过过滤:URL编码、十进制、十六进制、八进制、混合编码、不带http:协议、最后加个点;
更多经典的混淆checklist:通过大量的模糊测试可以发现很多奇怪的XSS利用点,浏览器之间存在大量细微的差异,很难总结出完美的规律;可以参考html5sec.org网站上整理的Checklist,还有一个由Gareth Heyes主导构建起来的在线fuzzing平台(shazzer.co.uk);
6.8.其他案例分享-GmailCookieXSSFireCookie是Firefox浏览器扩展Firebug的一个插件,专门用于Cookie的各种操作,非常方便
第七章 漏洞利用漏洞利用要完美,就得保证利用过程的原生态,本意就是让被攻击者区分不出,甚至被攻击后很长一段时间或者永远都不知道发生过这样的事情
7.1.渗透前的准备1.目标环境:对于开源CMS的渗透,可以通过白盒、黑盒 方式了解透,大大方便后续的渗透。而对于闭源的CMS,我们只能利用黑盒进行,会更麻烦,需多走几个步骤
2.目标用户:目标用户的角色可以很多种,如:CMS管理员、客服、普通用户、黑客/安全人员等
3.预期效果:最后明确本次渗透过程中每一阶段的效果,如:获取Cookie、添加一篇文章、传播网马、盗取密码、破坏数据等
7.2.偷取隐私数据XSS探针:xssprobe:通过它可以获取目标页面的通用数据;利用这些通用数据,有时能让我们直接获取目标用户的权限(通过Cookies利用);
referer惹得祸:Referer指请求来源,很多网站通过这个来判断用户是从哪个页面/网站过来的,Referer是公开的,故不可在Referer中存在与身份认证或者其他隐私相关的信息,但很多网站设计之初没考虑到Referer的风险性,从而导致出现了安全问题;
浏览器记住的明文密码:2010年时,各浏览器开始逐渐加入“记住密码”的功能(这些浏览器包括Firefox、Chrome、IE、Opera、Safari等),记住密码不同于老方式“记住登录状态”。“记住登录状态”主要是设置了持久型的Cookie,这和浏览器没关系,而是Web服务自己设置的;与记住表单内容相比,记住密码更危险,因为通过DOM就能获取其中的密码,而且是明文;可以在XSS利用中使用该POC获取用户的明文密码,由于不同的Web环境下的密码表单项不太一样,此时只需要修改相关的表单项值就行;
键盘记录器:键盘记录器实际上用处并不大,还不如劫持表单项的各种事件方便;
7.3.内网渗透技术内网渗透是一门独立的学问,通过Web层面(主要是JavaScript)进行的内网渗透实际上是一种很浅的渗透,不过带来的威力有可能很大
获取内网ip:目前,内网IP的获取还有一个比较好的方式,即通过Java Applet,但需要JRE支持