最近笔者的朋友接到一个网站的生意,说是给别人做了一个网站, 怕程序出问题。让笔者帮忙检测一下有没有什么注射或者上传之类的漏洞。没有的话就可以交差了。因为只是针对网站来检测漏洞,所以也不需要去旁注或者ARP 什么的。首先打开域名 hxxp://www.target.com/ 打看后一个就知道这程序肯定不是笔者朋友本人写的,好象是什么程序改的,但是又看不出来。打开一个连接随手加个单引号,返回错误了。如图1

Microsoft JET Database Engine 错误 '80040e14';字符串的语法错误;在查询表达式 'ID=16'' 中。/viewInfo_c.asp行318,从这个错误提示我们能看出下面几点:
1、网站使用的是Access数据库,通过JET引擎连接数据库,而不是通过ODBC。
2、程序没有判断客户端提交的数据是否符合程序要求。
3、该SQL语句所查询的表中有一名为ID的字段。
不过看到这小网站就知道不可能是sql server了,google一下才找到43个连接,用SQL是小题大做了点。我们继续。马上and 1=1=2发现返回页面不一样,可以注射。既然知道了是ACCESS那就只能通过来猜解管理员的密码来登陆后台了 ,继续使用 And (Select Count(*) from Admin)>=0 页面返回正常说明存在admin表,这就更加确定这程序不是他本人写的了。因为除了网上公布的些开放原码 很少有程序员用admin做为存放管理员密码的表,知道了admin表就继续猜字段吧。一般来说这样的程序用的字段无非这几个:username; password;id;userid;user_password;pwd;name;userpwd,所以猜这样的字段非常容易。语句一复制,挨个试就好了。猜了半天,发现admin表里存在username;password;id三个字段。很明显username 跟password是存放管理员用户名与密码的。 继续猜 and (select top 1 len(username) from Admin)>0。
先说下原理:如果top 1的username长度大于0,则条件成立;接着就是>1、>2、>3这样测试下去,一直到条件不成立为止,比如>7成立,>8不成立,就是len(username)=8 。

