什么是xss漏洞
XSS又叫CSS英文縮寫為CrossSite Script,中文意思為跨站腳本攻擊,具體內(nèi)容指的是惡意攻擊者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執(zhí)行,從而達到惡意用戶的特殊目的.
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
而linux下面是沒有對這些大部分字符進行限制的,可以隨意定義的,那么,我們就可以將 XSS Pyload 存儲在文件名中,如圖所示:
我們可以看到可以成功將 xss pyload 存儲在文件名當中了。
二、利用攻擊
很多時候,由于代碼的各種環(huán)境,讓我們的攻擊成為可能,查看以下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>
當文件上傳成功,程序?qū)⑽募畔⑦M行輸出。而此時沒有對文件名進行任何處理,那么,如果將我們定義好的特殊字符的文件名進行上傳,然后經(jīng)過程序輸出,就可以攻擊了,如圖所示:
可以看到,我們確實可以攻擊成功了!那么,并不是所有的上傳地方都存在,要滿足以下條件才可以:
1、文件上傳后保存前進行了一次原樣輸出。
2、直接按原文件名進行存儲。
3、其他特定環(huán)境,看程序邏輯。
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、任意時候?qū)ξ募M行處理后輸出,可以進行 html 編碼后輸出。
參考:
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx