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

MySQL和SQL字段截短漏洞

这篇文章很有意思,以前注意过,但没仔细考虑过用来注入,或许就象王猛说的:

    了解很长一段时间的web安全了,个人觉得世上最聪明的程序员其实是黑客,一次想N步,逻辑超强,技术全面,从操作系统漏洞、到语言本身漏洞、数据库本身漏洞、再到开发者代码,无孔不入。

文章来自寂寞hacker,http://hi.baidu.com/isbx/blog/item/08ef48547ef1ad58574e00bf.html:
当前的Web开发者中肯定有不少人没有注意到作者所提到的这两个问题的。

第一个问题是这样的,MySQL默认有一个配置参数 max_packet_size,这个参数是用于限制MySQL客户端和MySQL服务器端数据通信的数据包大小,MySQL的默认配置是1MB。如果客 户端发送的数据超过了1MB,则MySQL服务器端会忽略掉这个请求数据。作者接下来举了两个利用这个缺陷的例子,第一个是利用超长数据来使MySQL的 日志记录程序失效,第二个是在PHP+MySQL的环境下,PHP的Session清理程序会由于一次发送的清理session数据的请求数据包超过 max_packet_size的限制,而导致清理session失败。

而实际上,由于很多PHP+MySQL的程序都会运行用户上传附件之类,而一般的PHP+MySQL的上传附件限制都是大于1MB的,所以PHP的 程序开发人员一般是会去修改max_packet_size的值为大于1MB。这就给我们的漏洞利用带来了一定的麻烦,毕竟在当前的网络状况下,构造 1MB多的数据去上传还是可以忍受的。但是太大的数据量就比较考验我们的耐心了,呵呵。

第二个问题就比较严重了,MySQL对于超过字段长度的数据插入操作会进行默认的字符串截短。例如一个字段定义的长度为10,如果插入的字符串长度 超过10,MySQL会将长度超过10的部分字符串自动舍去后插入到数据表中。默认配置条件下,MySQL会产生一个警告信息,但是这个警告信息不会被 Web应用程序捕获到。所以,从表面上来看,超长数据也是可以“成功”插入数据表的。作者在下面举的这个例子就很有代表性了,首先是一个场景假设:

  • The application is a forum where new users can register
  • The administrator’s name is known e.g. ‘admin’
  • MySQL is used in the default mode
  • There is no application restriction on the length of new user names
  • The database column username is limited to 16 characters

用户如果尝试注册一个用户名为admin的用户,会由于Web应用程序中的isAlreadyRegistered函数的校验而注册失败。

SQL代码
  1. SELECT * FROM user WHERE username='admin'  

但如果用户使用用户名’admin           x’来注册(注意admin和x之间有11个空格),则注册流程会是这样的:

isAlreadyRegistered函数会使用上面的SQL语句来检查user表中是否存在相同用户名的用户,查询结果肯定是不存在的。那么用户注册成功!

实际上,真正插入到user表中的用户名是’admin’!也就是说,MySQL不仅会截短超过长度限制部分的字符串,也会对字符串头尾的空白字符进行截短!所以,在user表中,现在存在了两个admin用户!

接下来,用户登陆,他使用的是用户名admin,密码是他刚才设置的’admin           x’的密码。假设Web应用程序的登陆认证和授权函数是这样的一段代码:

PHP代码
  1. $userdata = null;  
  2. if (isPasswordCorrect($username$password)) {  
  3.    $userdata = getUserDataByLogin($username);  
  4.    ...  
  5. }  

其中isPasswordCorrect函数使用的SQL语句为:

SQL代码
  1. SELECT username FROM users WHERE username = ? AND passhash = ?  

getUserDataByLogin函数使用的SQL语句为:

SQL代码
  1. SELECT * FROM users WHERE username = ?  

可以看得出,上面的语句使用了预编译的SQL语句,是无法实施SQL注入的。但是由于MySQL的默认字段截短策 略,isPasswordCorrect函数会成功执行并返回用户名admin,接下来的getUserDataByLogin也会正确执行,返回的结果 虽然是一个数组,但是Web应用程序一般是取返回数组中的第一个结果,也就是真正的管理员用户admin的所有数据!

怎么样,不用SQL注入,一样拿到管理员权限!

后记:经过测试,上面的漏洞利用过程在MySQL 4中是确实存在并且可以利用的。但是在MySQL 5中,本机测试失败。失败的关键就在于MySQL 5对于超过字段长度限制的字符串插入会报错,并停止字符串插入操作。

附:MySQL 4的测试过程

SQL代码
  1. mysql> select * from tb_sqltest where name='jason';  
  2. +----+-------+--------+------+------+------+------+  
  3. | id | name  | remark | time | col1 | col2 | col3 |  
  4. +----+-------+--------+------+------+------+------+  
  5. |  1 | jason | NULL    | NULL | NULL | NULL | NULL |  
  6. +----+-------+--------+------+------+------+------+  
  7. 1 row in set  
  8.   
  9. mysql> select * from tb_sqltest where name='jason        x';  
  10. Empty set  
  11.   
  12. mysql> insert into tb_sqltest (id,namevalues (2,'jason        x');  
  13. Query OK, 1 row affected  
  14.   
  15. mysql> select * from tb_sqltest where name='jason';  
  16. +----+-------+--------+------+------+------+------+  
  17. | id | name  | remark | time | col1 | col2 | col3 |  
  18. +----+-------+--------+------+------+------+------+  
  19. |  1 | jason | NULL    | NULL | NULL | NULL | NULL |  
  20. |  2 | jason | NULL    | NULL | NULL | NULL | NULL |  
  21. +----+-------+--------+------+------+------+------+  
  22. rows in set  

 

 

 

 

 

Tags: mysql

apmxe备份

说实话,看到Qeephp常年不更新后,也担心这个程序会消失。所以,我自己还是备份一下比较好。在以前的博客里我也作过介绍,但都是给的官方地址,而官方地址从fleaphp.net到fleaphp.org,再到现在的qeephp.com,很多链接都失效了。所以,我还是在本地备份一下较好。

这个版本已经又快一年没更新了,不过想来也没有什么好更新的东西。所以。我还是复制了一下官方的介绍:

APM Express 是一个集成了 Apache 2.2、PHP5、MySQL 5,以及 phpMyAdmin、QeePHP 框架(含示例)的绿色集成运行环境,简称为“APMXE”。解压缩即可使用,不写入任何系统文件,100% 绿色。

版本说明

  • Apache 2.2(完整)
  • PHP 5.2.9–2(完整)
  • XCache 2.0.4
  • MySQL 5.0(服务端和命令行工具)
  • phpMyAdmin 3.2
  • QeePHP 2.1(含示例)

 

使用说明

下载后可以获得一个 .zip 文件,其中包含安装程序。运行安装程序设置好解压缩目录后,即可通过快捷方式启动。启动后,通过浏览器访问 http://localhost/ 查看 APM Express 的欢迎页面。

注意:默认设置的端口号为 9000,MySQL 端口号为 9066

配置文件修改说明:
配置文件共有三个:
httpd.conf.tempalte - Apache2 的配置文件
mysql.ini.template - MySQL5 的配置文件
php.ini.template - PHP5 的配置文件


修改这三个文件后,启动 APM Express 时就会以这三个文件为基础生成 apache/mysql/php 的配置文件。所以要自定义设置,就改这三个文件。


配置文件模版

配置文件中所有 %APMXE% 的字符串将会在 APM Express 运行时替换为 apmxe.exe 所在路径。替换后的内容会写入三个新的配置文件,供 Apache/PHP/MySQL 使用。

两个下载地址:

说 明: apmxe-setup-2009-06-17.zip
官 方: apmxe-setup-2009-06-17.zip (11130.92 KB, 上传日期:2009-06-17 22:58)
本 地: apmxe-setup-2009-06-17.zip (11130.92 KB, 上传日期:2010-04-24 12:00)分流

说 明: apmxe-2009-01-20.zip
官 方: apmxe-2009-01-20.zip (7646.35 KB, 上传日期:2009-01-20 07:48)
本 地:apmxe-2009-01-20.zip (7646.35 KB, 上传日期:2010-04-24 12:00)分流

Tags: apmxe, amp

RTF文件批量转成HTML文件

rtf是一种富文本格式,根据RFC的规范,可以将其转为各种文件,如doc,wps等,但如果真的要根据RFC规范一点点的写程序,那就真的太累了。所以。。。我用wps转换了。
以前写过wps生成文档的程序,就是这篇闲着无聊,用WPS生成文档,现在,这个RTF转换到HTML也可以用PHP来完成

PHP代码
  1. <?php  
  2. $wps = new COM('WPS.Application');  
  3. $wps->Visible = false;  //不显示wps界面
  4. $filename = realpath('./RTF_to_HTML_Converter.rtf');  
  5. $stime = microtime(1);  
  6. for ( $ii = 0; $ii < 1000; $ii++ ){  
  7.     $savedfile = "c:\\convert\\{$ii}_test.html";  
  8.     $doc = $wps->Documents->Open($filename);  
  9.     $doc->SaveAs($savedfile, 8);  //参考Document.SaveFormat 属性  
  10.     $doc->Close();  
  11. }  
  12. $wps->Quit();    
  13. echo( sprintf( "%0.6f" , (microtime(1)-$stime) ) );  
  14. unset( $doc , $wps );    

测试了一下,生成1000个文件,花了257秒,4分多种,可以接受这个时间,只是在转换的时候,CPU超过50%,而且是在命令行下的。如果是在网页界面肯定是没有这么快的了。
PS:转换后,中文编码实体化了,&#30475;&#30475;&#20013;&#25991;&#24590;&#20040;&#36716;,变成这样的格式,它是什么内容呢?它们就是:【看看中文怎么转】<-- 可以看一下源码,就知道这7个字是什么样的了

Tags: rtf, html, wps

wordpress的SEO

这篇SEO的文章内容很长,而且里面的链接很多,我就不转载了,内容在http://xuui.net/librarys/seo-for-wordpress.html,我自己下载了一份,打包上传成附件。

作者举了这些例子:

1、设置一个友好链接

2、让 WordPress 的 URL 地址唯一化

3、合理设置一个 robots.txt

4、关于 Meta 内容

5、优化 title(页标题)内容

6、文章标题 (Headings) 二级标题、三级标题的使用

7、建立一个合理的导航结构

8、是否移除链接上的 nofollow 属性

9、建立一个 Site Map(站点地图)

10、页面的设计

11、关键词的使用

12、CSS

13、文章内容和反向链接

说明:如果有必要,这篇文章以后可以不断更新,就像 jim 一样,SEO for WordPress 这篇文章从 05 年一直写到现在。如果有什么不对的地方,也欢迎大家指正,以便及时修改。

--EOF--

由于文章一直在更新,所以,如果觉得有用的可以去网上查看和下载。基本上最早的来源是:http://www.osxcn.com/wordpress/seo-for-wordpress.html

附件: wordpress.rar (78.2 K, 下载次数:2203)

Tags: seo, wordpress, xuii.net

简历石沉大海的原因

fortunechina上有两篇文章不错,都是关于求职简历的。为什么你的简历石沉大海了呢?看看人家是怎么解释的。
来源:http://www.fortunechina.com/career/c/2010-04/02/content_33338.htm

    亲爱的安妮:

    大公司的人力资源部最近都怎么了?我承认,我上一次找工作已经是很久以前的事情了,但那会儿,只要你向人力资源部提交简历和求职信,总能得 到回复(哪怕只是一封群发的拒信)。

    现在情况似乎有些变化。我曾在一家中型公司担任品牌经理,自失业以来,我已经找了差不多一年的工作,一直很不顺利。通常,我是在招 聘网站或公司网站上看到具体的招聘广告,然后我会非常认真地准备好简历,发给公司的人力资源部。就这样我投了几十封求职信,结果却石沉大海,杳无音信。

    其他读者是否也有遇到这种情况?我怎样才能得到人力资源部的回复呢?如果这个要求都太过分的话,我如何才能越过他们找到工作呢? ——

     亲爱的琼:

    你的经历的确糟糕,但更糟的是,你可能都到了面试的阶段,也已经参加了一次甚至几次面试,一切都非常顺利,你的期望也非常高,结果……却没 有消息了(事实上,这种情况也并不少见)。

    我们很难相信,人力资源部门的那些人真的就那么忙,甚至都抽不出30秒钟,给你发封电子邮件,告之你是否有戏。不过,退一步想,如 果这些人对待求职者如此无礼,你肯定也不会想与他们共事。

    不过,我也得为人力资源部说句话,他们也的确招架不住了。首先,在很多公司,与其他部门一样,人力资源部裁员也很严重。人力资源管 理协会(Society for Human Resource Management)最近的调查显示, 2007年,人力资源部的平均雇员数是13人,而现在仅为9.2人。而一旦裁员达到30%,剩下的员工肯定是在苦苦挣扎。

     而且,并非是人力资源部的职员不同情你的遭遇。他们很多人都尝过很长一段时间没有工作的滋味。人力资源管理协会进行了另一项调查, 调查的对象是在2009年失业的人力资源部职员(其中85%是被裁员)。该调查发现,在新近找到工作的受访者中,有47%的人用了6-12个月的时间,另 外27%的人则花了一年多的时间,而在那些受访时仍未找到工作的人中,只有18%的人预期将在6个月内找到工作,43%的人认为自己还得再花一年甚至更长 的时间。

     最令人沮丧的是:在那些花了很长时间,终于在2009年找到工作的人中,有近一半(49%)的人表示更喜欢之前的工作。这份调查并 没有问及原因,但我猜应该是劳累过度的原因。人力资源部堆满了简历,可能应聘一个职位的简历就多达几百甚至数千份。你精心撰写的简历说不定就被埋在堆积如 山的简历中。人力资源部的雇员们好不容易才能看完简历,还哪顾得上体谅每位应聘者的心情。

     那么,你应该如何应对这种情况呢?薇姿•巴奈特(Vicki Barnett)是一家位于丹佛的职业指导公司的负责人,该公司名为“梦想成真”(Make It Happen)。巴奈特表示,你不应该将简历发给人力资源部,而是应该把简历的电子版、纸质或是两种版本同时发给公司中比负责你所应聘职位的招聘经理高一 两级的主管。当然了,这种人肯定非常繁忙,所以他/她会把你的简历转给比自己低一两级的人,也就是真正负责招聘的人。

     巴奈特说:“简历通过这种自上而下的方式,会更容易到达招聘经理手中。”假如是老板转发的你的简历,那么招聘经理在看简历时,肯定 会比人力资源部的十秒扫过式仔细认真得多。发送简历之后几天,你就可以打个电话问一下简历目前在谁手中,再问一下是否可以预约一次会面。

     显然,这并不能保证你会被录取。但绕过人力资源部会给你带来一个很大的优势。巴奈特说道:“招聘经理都有自己的‘愿望清单’,但是 人力资源部的雇员并不了解其想法,因为招聘经理真正希望在应聘者身上看到的,往往是一些只可意会、难以言传的特质。”

     人力资源部的职员通常做的,不过是试着把你简历上和职位描述中的关键词一一对应。巴奈特还说,如果职位描述中有15个关键词,而你 的简历里只有其中12个,你很可能就过不了简历关。然而,招聘经理却能看到简历中暗含的信息,巴奈特说道:“就算你简历中的关键词与职位描述不完全吻合, 你其它的经验和资质也可能会引起他们的注意。”

     但愿如此。

 --EOF--

看到这样的解释或许你会了解为什么你投的简历没有回音了,其实,在一些招聘网上,有些职位是无意义的,或者说别人是当成广告位来做的。每年也只需要投入几百元钱,就有一个访问量不小的广告位,何乐而不为?因此要仔细看好一个公司是否是真正在招人也是一件很重要的事情。

该文结尾的两篇相关文章也可以阅读一下:简历筛选的秘密怎样找工作。

Tags: 求职, 简历, 招聘, hr