解讀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)
。