知识学堂
  • ·联系电话:+86.023-75585550
  • ·联系传真:+86.023-75585550
  • ·24小时手机:13896886023
  • ·QQ 咨 询:361652718 513960520
当前位置 > 首页 > 知识学堂 > 常见技术问题
XSS成因与防范
更新时间:2012-06-03 | 发布人:本站 | 点击率:656
什么是xss漏洞
 
XSS又叫CSS英文缩写为CrossSite Script,中文意思为跨站脚本攻击,具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的.
< (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
分享到: QQ空间 新浪微博 开心网 人人网