首页 > 网络安全 > linux filename xss

linux filename xss

2010年11月15日 发表评论 阅读评论

一、关于文件名
大家都知道在 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 "Stored in: " . $_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 编码后输出。

四、声明
本文思想来源于晚上喝酒 miao 的想法,我只是做总结与验证。

参考:
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

转载请注明:woyigui's blog [http://www.woyigui.cn/]
本文标题:linux filename xss
本文地址:http://www.woyigui.cn/2010/11/15/linux-filename-xss/

分类: 网络安全 标签: , ,
  1. toby57
    2010年11月15日05:35 | #1

    感觉这东西在实际利用中意义不大。

    [回复]

    DBappSecurity 回复:

    @toby57, 灰常有意义,楼下有人解答了。

    [回复]

  2. 处男哥
    2010年11月15日10:13 | #2

    我还以为你昨天喝的差不多了,早知道应该留你继续去酒吧喝

    [回复]

  3. osk
    2010年11月15日11:45 | #3

    当利用成功的时候,就有意义了。

    [回复]

  4. xi4oyu
    2010年11月15日17:16 | #4

    干吗非要client是linux,抓包改好了

    [回复]

  5. 2010年11月15日21:07 | #5

    @xi4oyu
    哈哈,怕有些人不会,抓包肯定是没问题的。

    [回复]

  6. 匿名路过
    2010年11月16日12:37 | #6

    之前有一个yahoo的xss就是应用这个实现的.

    [回复]

  7. anuuxi
    2013年5月28日19:01 | #7

    喝多了吧?!!!

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
*