网站地图    收藏   

主页 > 后端 > 网站安全 >

XSS成因与防范 - 网站安全 - 自学php

来源:自学PHP网    时间:2015-04-17 13:02 作者: 阅读:

[导读] 什么是xss漏洞XSS又叫CSS英文缩写为CrossSite Script,中文意思为跨站脚本攻击,具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会...

什么是xss漏洞
 
 
XSS又叫CSS英文缩写为CrossSite Script,中文意思为跨站脚本攻击,具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的.
 
xss的漏洞危害
 
获取用户cookie
修改页面信息
浏览器劫持
与其他漏洞结合(如:csrf漏洞)
其他
xss漏洞是如何产生的
 
以下Velocity模板VM中常见的代码
 
<span>$!productName</span>
<script>var from = ‘$!rundata.Parameters.getString(‘from’)';</script>
对于第一种类型的代码我们可以输入变量为
 
<iframe src=http://www.2cto.com></iframe>
 
第一种类型的代码将变为
 
<span><iframesrc=http:// www.2cto.com></iframe></span>
 
对于第二种类型的代码我们可以输入变量为
 
‘;hackerFunction(document.cookie);’
 
第二种类型的代码将变为
 
<script>var from = ”;hackerFunction(document.cookie);”;</script>
 
以上两种类型的代码都轻易的被植入了恶意的脚本,也就是说产生了传说中的xss漏洞。
 
xss漏洞可通过escapeHtml和JavaScript转义进行防御
 
转义过后上面的代码将会变成
 
<span><iframe src&equalshttp&colon&sol&solhacker&periodcom><&soliframe></span>
 
转义后用户输入的恶意脚本代码就不会被执行从而达到了预防和修复的目的。
 
xss漏洞校验
 
 
 
确定xss漏洞的基本方法是使用攻击字符串来验证的,例如将”><script>alert(document.cookie)</script>这个字符串被提交给每个应用程序的每个参数。同时,攻击者监控这个输入的响应,如果攻击字符串原样出现在响应中,几乎可以肯定应用程序存在xss漏洞。
 
 
 
黑盒手动测试
 
有输入框的页面测试
对于非富文本在输入框中输入特殊字符<”hack ‘> 提交
 
在提交后的页面查看源代码根据关键字hack查找源代码中的hack前后的<”>’是否已经被转义成
 
<">&apos 如果未被转义说明这个输入框存在xss漏洞的嫌疑(提交bug)。
 
对于富文本输入框输入<img onerror=”alert(123)”src=http:// www.2cto.com>提交页面,如果页面有出现排版问题或者js错误说明这个输入框存在xss漏洞的嫌疑(提交bug)。
 
有些时候,通过上述的基本方法,可能无法确定应用程序中存在xss漏洞,需要对应用程序进行复制的测试来确认。许多应用程序实施基于黑名单的过滤,试图阻止xss攻击,通常,这些过滤在请求参数中寻找<script>之类的表达式,并采取一些防御措施,如删除它或者进行编码转换,或者完全阻止这类请求。基本检测方法中使用的基础攻击字符串往往被这些过滤阻止了。但是,有时候,不使用script标签,也可以利用xss漏洞。
 
对于应用程序实施的过滤xss漏洞,我们可以尝试通过各种方法避开,比如:
 
”><script >alert(document.cookie)</script>对于完整的字符串过滤,可以加个空格跳过。
 
”><sCrIpt>alert(document.cookie)</script>也可以尝试大小写是否有区别
 
”%3e%3cscript%3ealert(document.cookie)</script>将<>进行编码后尝试跳过
 
”><sc<script>ript>alert(document.cookie)</script>如果只对一个script字符串过滤,可以尝试嵌套的方法避开过滤。
 
 
页面链接参数的测试
链接带参数的如:
 
http://mall.taobao.com/?ad_id=&am_id=&cm_id=&pm_id=
 
该链接包含了4个参数,对于这种的测试方法和输入框测试方法一样只不过把参数当成你的输入框进行
 
提交。如:
 
http://mall.taobao.com/?ad_id=<”hack’>&am_id=&cm_id=&pm_id=
 
 
 
黑盒工具测试
 
推荐工具
 
Paros(免费)
Acunetix.Web.Vulnerability.Scanner (商业工具)
白盒代码扫描测试
 
 
<span>$!productName</span>
 
此类的非富文本代码我们可以强制要求规范为:
 
<span> $!stringEscapeUtil.escapeHtml ($!productName)</span>
 
对于富文本的我们可以强制要求代码规范为通过过滤层过滤。
 
根据以上的两条规则,我们可以从白盒代码上去进行静态扫描代码是否按照规范编写来预防和筛选xss漏洞。
 
 
 
另类XSS
 
linux filename xss
 
一、关于文件名
大家都知道在windows 下面文件名是有规则,定义了一些保留的字符,他们分别是:
< (less than)
 
> (greater than)
 
: (colon)
 
" (double quote)
 
/ (forward slash)
 
\ (backslash)
 
| (vertical bar or pipe)
 
? (question mark)
 
* (asterisk)
 
而linux下面是没有对这些大部分字符进行限制的,可以随意定义的,那么,我们就可以将XSS Pyload 存储在文件名中,如图所示:
我们可以看到可以成功将xss pyload 存储在文件名当中了。
二、利用攻击
很多时候,由于代码的各种环境,让我们的攻击成为可能,查看以下PHP上传文件代码:
 
<?php
 
if ($_FILES["file"]["error"] > 0)
 
  {
 
  echo "Error:" . $_FILES["file"]["error"] . "<br/>";
 
  }
 
else
 
  {
 
  echo"Upload: " . $_FILES["file"]["name"] ."<br />";
 
  echo "Type:" . $_FILES["file"]["type"] . "<br/>";
 
  echo "Size:" . ($_FILES["file"]["size"] / 1024) . " Kb<br/>";
 
  echo "Storedin: " . $_FILES["file"]["tmp_name"];
 
  }
 
?>
 
<html>
 
<body>
 
<form action="" method="post"enctype="multipart/form-data">
 
<label for="file">Filename:</label>
 
<input type="file" name="file"id="file" />
 
<br />
 
<input type="submit" name="submit"value="Submit" />
 
</form>
 
</body>
 
</html>
 
当文件上传成功,程序将文件信息进行输出。而此时没有对文件名进行任何处理,那么,如果将我们定义好的特殊字符的文件名进行上传,然后经过程序输出,就可以攻击了,如图所示:
 
可以看到,我们确实可以攻击成功了!那么,并不是所有的上传地方都存在,要满足以下条件才可以:
1、文件上传后保存前进行了一次原样输出。
2、直接按原文件名进行存储。
3、其他特定环境,看程序逻辑。
4、web server 为linux。
5、上传攻击机器为linux。
示例代码:http://code.google.com/p/madal-example-project/source/browse/trunk/controllers/image_uploader.php?r=2
更多的:http://code.google.com/query/#q=$_FILES[%22file%22][%22name%22]
线上攻击测试:http://www.woyigui.cn/fileupload.php
 
三、防范
1、存储时以随机文件名保存。
2、任意时候对文件名进行处理后输出,可以进行html 编码后输出。
 
参考:
 
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论