|
SQL注入漏洞初级应用之Access篇(2) 这里很明显当加 and 1=1 的时候返回完全正常的页面,加 and 1=2 显示:暂时还没有文章!
到这里基本上可以断定他存在SQL注入,至于能不能注出账号密码来,还需要更进一步的注入测试,这里只能得到SQL注入点: http://www.xxx.com/show.asp?id=474
4.判断表是否存在
国内的一般程序员在设计数据库的时候都会用一些特定的做为表名,字段名什么的。比如说后台管理员一般放在表admin里面,而注册的用户放在表users里,当然,只是一般,依照各程序的不同而不同。
这个站是我同学自己写的,我还是先判断管理员表admin是否存在,在后面加上语句:and exists (select * from
admin)变成http://www.xxx.com/show.asp?id=474 and exists (select * from
admin)提交访问后返回的页面如图3:
这就说明我猜的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就返回了正常的页面,如图4:
至于这个userid值为多少,同样猜,and exists(select userid where
userid=1)改变1这个数字,一直猜到页面显示正常为止。这里我猜到的是userid=11,如图5:
最后猜出这个继续猜出其它的字段,用户名字段最后为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,最后猜到的是
|