08月 28th, 2008[YY && ZZ]LX退赛后…

LX退赛后,故事会如何发展?请看:

      1. LX因伤病退赛,但心中报效祖国之志不改,四年内刻苦训练,卧薪尝胆历经,千辛万苦。终于在下届奥运会上以破世界记录的成绩夺冠。——40集CCTV年度大戏

      2. LX因伤退赛,国际博彩业爆出惊天冷门,香港警方重案组经过层层剖析,发现此事与国际赌博集团最大的庄家有关。经过一番斗智斗勇,最终擒获庄家,真相大白于天下。——30集TVB港剧

      3. LX退赛,心情极度低沉,就在人生的最低谷时,遇见了一位自己的女粉丝A。A用自己的温柔和善良感动了LX,使其重新振作起来。并夺回了属于自己的世界冠军头衔。最后LX在重夺奥运冠军的一刻,将金牌作为求婚礼物,献给了坐在看台上的A。——20日剧

      4. LX因伤退赛,去到一家著名医院疗伤,在治疗过程中认识了一名身患绝症的女生B。LX感动于B对于生命的乐观和开朗,逐渐康复。却又引来了院长孙女C的追求,LX母亲为撮合LX与C,向B撒谎两人已经订婚。最终LX发觉了母亲的计策,重新找到已经万念俱灰的B,并约定夺回奥运冠军后即与B结婚。最终LX成功夺冠,B在病床前看着电视直播含笑离世,LX将金牌作为C的陪葬……——100集韩剧

      5. LX因伤退赛,世界医学界都对该伤势束手无策。最终一神秘学家找到LX,愿意治好他的腿伤。并将其改造成一双快如闪电的飞毛腿。从此LX表面身份是一名运动员,事实上成为了一名维护正义的使者,凭借其无与伦比的速度优势与罪恶军团开始了针锋相对的斗争。——20集美剧(第一季)

vim有一个非常好的特性——关键字自动完成功能,这个功能对于coder来说是非常贴心的。因为我们经常会因为一个笔误,敲错了一个字母或者漏打了一个 字母而导致程序出错。对于C语言这样的编译型语言来说,一般只能等到代码编译时才能发现错误。还好,有了vim,生活原来可以如此的美好。哈!

用Perl写了这样的一个脚本,用来遍历代码目录下的所有文本文件,找出其中所有的关键词,剔除掉其中重复的关键词,写入字典文件,OK!

其实这个脚本只需要简单修改一下代码,增加自定义的过滤器,就可以只对指定的代码类型文件进行关键词的提取。更高级的一点的应该是对提取关键词的正则表达式下一番功夫,比如只提取函数名(这个最好结合不同的语言单独来写)。感兴趣的朋友们可以自己动手:)

vim的配置就更简单了,只需要一步,在~vimrc文件中增加set dictionary=key.dict就可以了。当然也可以临时性的指定字典文件。在需要的时候C-X,C-K就可以出现候选字列表了,简单吧!我个人更喜欢用C-P这个快捷键,按一次就可以了。

附源代码:

#!/bin/perl -w
# [File Name] build_dict.pl
# [Author] huangwei1983 at gmail.com
# [Version] 0.1

my @files = <*>;
my @keywords = ();
my @uniq_keywords = ();
my $output = key.dict;

#delete previously created dict file before a new start
if(-e $output)
{
unlink($output) or die Can’t delete file $output : $!\n;
}

#iterate over files in current direcotry except for this script file
foreach $file (@files)
{
if($file ne $0) #dont’t extract keywords from myself!
{
if(-s $file && -f $file) #test if it is a non-null file
{
if(-T $file) #test if it is a text file
{
open FILE,<$file or die Can’t open file for read : $!\n;
while($line = <FILE>)
{
while($line =~ m/([a-zA-Z]\w*)/g)
{
push(@keywords,$1);
}
}
close FILE;
}
}
elsif(-d $file) #test if it is a directory
{
@subdirectory = glob $file./*;
push(@files,@subdirectory);
}
}
}

#get distinct keywords
my %seen;
@seen{@keywords} = ();
@uniq_keywords = keys %seen;

#write keywords to file
open FILE,>$output or die Can’t open file for write : $!\n;
foreach my $keyword (@uniq_keywords)
{
print FILE ($keyword.\n);
}
close FILE;

BSQL Hacker is an automated SQL Injection Framework / Tool designed to
exploit SQL injection vulnerabilities virtually in any database.

It ships with Automated Attack modules which allows to dump whole database:

* SQL Server
* ORACLE
* MySQL (experimental)

Attack Templates :

* MS Access
* MySQL
* ORACLE
* PostgreSQL
* MS SQL Server

Also you can write your own attack template for any other database as
well (see the manual for details). New attack templates and exploits
for specific web application can be shared via Exploit Repository.

BSQL Hacker aims for experienced users as well as beginners who want
to automate SQL Injections (especially Blind SQL Injections).

It supports :

* Blind SQL Injection (Boolean Injection)
* Full Blind SQL Injection (Time Based)
* Deep Blind SQL Injection (a new way to exploit BSQLIs, explained
in here : http://labs.portcullis.co.uk/application/deep-blind-sql-injection/)
* Error Based SQL Injection

It allows metasploit alike exploit repository to share and update
exploits and attack tempate.

Download, Screenshots, Source Code and More Information :
http://labs.portcullis.co.uk/application/bsql-hacker/

Injection Wizard Video:
http://www.vimeo.com/1536040?pg=embed&sec=1536040

今天看到一篇文章,是关于MySQL的几个最新的安全隐患发现的。原文在这里。乍一看,这两个漏洞都挺有意思的,而且在当前的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函数的校验而注册失败。

SELECT * FROM user WHERE username='admin'

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

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

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

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

$userdata = null;
if (isPasswordCorrect($username, $password)) {
   $userdata = getUserDataByLogin($username);
   ...
}

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

SELECT username FROM users WHERE username = ? AND passhash = ?

getUserDataByLogin函数使用的SQL语句为:

SELECT * FROM users WHERE username = ?

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

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

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

附:MySQL 4的测试过程

mysql> select * from tb_sqltest where name='jason';
+----+-------+--------+------+------+------+------+
| id | name  | remark | time | col1 | col2 | col3 |
+----+-------+--------+------+------+------+------+
|  1 | jason | NULL   | NULL | NULL | NULL | NULL |
+----+-------+--------+------+------+------+------+
1 row in set

mysql> select * from tb_sqltest where name='jason       x';
Empty set

mysql> insert into tb_sqltest (id,name) values (2,'jason       x');
Query OK, 1 row affected

mysql> select * from tb_sqltest where name='jason';
+----+-------+--------+------+------+------+------+
| id | name  | remark | time | col1 | col2 | col3 |
+----+-------+--------+------+------+------+------+
|  1 | jason | NULL   | NULL | NULL | NULL | NULL |
|  2 | jason | NULL   | NULL | NULL | NULL | NULL |
+----+-------+--------+------+------+------+------+
2 rows in set



		

© 2007 猪在笑 | iKon Wordpress Theme by TextNData | Powered by Wordpress | rakCha web directory
登录 | 访问数171475 | 水木BLOG | 水木社区 | 关于我们 | Blog论坛 | 法律声明 | 隐私权保护 | 京ICP证050249号
水木社区Blog系统是基于KBS系统WordPress MU架构的