Submitted by gouki on 2010, November 16, 8:49 AM
看到这篇文章的时候是在晚上,然后就觉得好郁闷,不过也挺佩服淘宝QA那些人的奇思怪想,看看他们是怎么说的吧。
一、关于文件名
大家都知道在 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代码
- <?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 编码后输出。
参考:
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
--EOF——
原文来自:http://qa.taobao.com/?p=10139,虽然这个条件很苛刻,但毕竟还是存在被注入的可能啊,而且这种注入真的很妖。
Tags: linux, xss, php
Linux | 评论:0
| 阅读:18576
Submitted by gouki on 2010, November 16, 8:44 AM
在虚拟机上装了一个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
DataBase | 评论:0
| 阅读:19365
Submitted by gouki on 2010, November 15, 8:43 PM
Yii的module功能确实很方便,但现在的问题在于,我需要为每个module单独指定一个数据库连接,这样我就可以将不同的系统整合在一起了。找了不少资料,好象都没有这样类似的功能。master/slave之类倒是有不少类似的整合方案的。
测试了一下,发现可以这样操作,即在全局配置文件中的module里为module加上components中加上db,然后就基本OK了。但即使这样,你还是会发现不太正常,会提示db不存在,其实需要在这个db数组中加上class=>CDBconnection就一切OK了。会自动加载的哦。(烂桔在这里帮了不少忙)
然后数据连接就是Yii::app()->getModules('modulename')->db。【不过他在这里说的是findModules,我看了一下,getModules就直接可以用了。HOHO】
如果你有master和slave,也可以按照这样的配置,然后再在onBeforeFind方法里设定db=Yii::app()->getModules('module')->readerDb之类的。并在onAfterFind后再置 db为write的链接。(感谢HM提出方案)
如果有多个slave,又想使用同一个slave缓存,则可以先随机取得slave的名称。然后存入session,然后再指定链接。这样,每一个用户使用的slave就会是唯一的。其实提高了效率(感谢神仙提出来)
Tags: framework, yii, module
PHP Framework | 评论:1
| 阅读:19547
Submitted by gouki on 2010, November 14, 9:45 PM
1、老王在自己的博客上(http://www.huoding.com)上介绍了如何用yql获取网页的数据,其实我是在很早就有尝试yql,但。。仅限于使用yahoo自带的一些API,比如weather,从没想过,用它来获取网页中的内容(我用phpQuery的,我还是觉得object的xpath没有象jQuery那样操作起来方便)
2、encodeToGb2312,这个听起来感觉就有点妖,事实上:escape(),encodeURI(),以及encodeURIComponent().都是我们比较常用的,为什么要转成GB2312呢?http://www.html-js.com/上说了他的理由:
XML/HTML代码
- 但是现在有个问题,我要做一个页面跳转的功能,页面的url是拼接起来的,url前面部分是某个搜索引擎的基本url,后面接着是参数:
- 例如:
- http://s.taobao.com/search?q=%E6%B7%98%E5%AE%9D%E7%BD%91
- 点开之后就会发现,淘宝接收到的参数是乱码的
-
- 主要原因在于类似淘宝这样的网站都是gb2312编码的,如果传进一个utf-8的值进去,就会被解析成乱码.
所以,他写了一个encode2gb2312的JS库,他转载了一份encode2gb2312的JS库,你可以在这里找到:http://www.html-js.com/?p=920 【作者说了,不是他写的,抱歉,特此更正】
Misc | 评论:1
| 阅读:16064
Submitted by gouki on 2010, November 11, 6:14 PM
来自颓废小魔的博客,主要是自己了解一下,这样万一哪天自己要写CSS了也可以参考一下:
CSS代码
- height:100px;
- [;color:#0F0;]
- height:100px\9;
- *height:100px;
- _height:100px;
- height:100px\0;
发现这些写法都好妖啊。。还是firefox好。不过,我也发现一点问题那就是UBUNTU下的FF和WIN下的FF看我的博客的样式居然也不太一样估计是字体的关系了。。(很明显的是我用openoffice的WORD文档让老婆帮我打印的时候,字体变的一塌糊涂)
Tags: css, hack, browser
Javascript | 评论:0
| 阅读:17351