什么是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