手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2010年11月16日的文章

linux filename xss攻击

看到这篇文章的时候是在晚上,然后就觉得好郁闷,不过也挺佩服淘宝QA那些人的奇思怪想,看看他们是怎么说的吧。

一、关于文件名
大家都知道在 windows 下面文件名是有规则,定义了一些保留的字符,他们分别是:

< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

而linux下面是没有对这些大部分字符进行限制的,可以随意定义的,那么,我们就可以将 XSS Pyload 存储在文件名中,如图所示:
大小: 13.74 K
尺寸: 318 x 231
浏览: 1588 次
点击打开新窗口浏览全图
我们可以看到可以成功将 xss pyload 存储在文件名当中了。
二、利用攻击
很多时候,由于代码的各种环境,让我们的攻击成为可能,查看以下PHP上传文件代码:

PHP代码
  1. <?php  
  2. if ($_FILES["file"]["error"] > 0)  
  3.   {  
  4.   echo "Error: " . $_FILES["file"]["error"] . "<br />";  
  5.   }  
  6. else  
  7.   {  
  8.   echo "Upload: " . $_FILES["file"]["name"] . "<br />";  
  9.   echo "Type: " . $_FILES["file"]["type"] . "<br />";  
  10.   echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";  
  11.   echo "Stored in: " . $_FILES["file"]["tmp_name"];  
  12.   }  
  13. ?>  
  14. <html>  
  15. <body>  
  16. <form action="" method="post" enctype="multipart/form-data">  
  17. <label for="file">Filename:</label>  
  18. <input type="file" name="file" id="file" />  
  19. <br />  
  20. <input type="submit" name="submit" value="Submit" />  
  21. </form>  
  22. </body>  
  23. </html>  
当文件上传成功,程序将文件信息进行输出。而此时没有对文件名进行任何处理,那么,如果将我们定义好的特殊字符的文件名进行上传,然后经过程序输出,就可以攻击了,如图所示:

大小: 39.65 K
尺寸: 500 x 226
浏览: 1637 次
点击打开新窗口浏览全图

可以看到,我们确实可以攻击成功了!那么,并不是所有的上传地方都存在,要满足以下条件才可以:
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

--EOF——

原文来自:http://qa.taobao.com/?p=10139,虽然这个条件很苛刻,但毕竟还是存在被注入的可能啊,而且这种注入真的很妖。

Tags: linux, xss, php

Mysql: 'reading initial communication packet'

在虚拟机上装了一个mysql,然后在自己的机器上连接的时候出现这个错误: 'reading initial communication packet',找了一下资料发现原来默认的my.cnf中,对SERVER的IP进行了简单的绑定,只要去掉绑定即可

于是先whereis mysql,知道了mysql配置文件的位置在/etc/mysql下,然后
vim /etc/mysql/my.cnf
找到:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address           = 127.0.0.1

将bind-address前加上注释即可,然后/etc/init.d/mysql restart ,OK一切都搞定了。
做个笔记

Tags: mysql, remote, bind